《左耳听风》读书心得之高手成长篇书单

一直佩服左耳朵耗子叔的知识广度,深度,看了他的专栏对人生规划清楚多了,下面分享下他推荐的高手成长需要读的书

程序员练级攻略:Linux系统、内存和网络

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/ 红帽企业Linux 7的产品文档
https://github.com/0xAX/linux-insides ,GitHub 上的一个开源电子书,其中讲述了 Linux 内核是怎样启动、初始化以及进行管理的。
https://lwn.net/Kernel/Index/ 上面有很多非常不错的文章来解释 Linux 内核的一些东西
https://www.kernel.org/doc/Linux 的内核文档也可以浏览一下
每个程序员都应该了解的内存知识【第一部分】https://lwn.net/Articles/250967/
https://www.oschina.net/translate/what-every-programmer-should-know-about-memory-part1
https://lwn.net/Articles/252125/
https://lwn.net/Articles/253361/
https://lwn.net/Articles/254445/
https://lwn.net/Articles/255364/
https://lwn.net/Articles/256433/
https://lwn.net/Articles/257209/
https://lwn.net/Articles/258154/
https://lwn.net/Articles/258188/
http://irl.cs.ucla.edu/~yingdi/web/paperreading/whymb.2010.06.07c.pdf 内存的读写屏障是线程并发访问共享的内存数据时,从程序本身、编译器到 CPU 都必须遵循的一个规范
https://www.cl.cam.ac.uk/~pes20/ppc-supplemental/test7.pdfARM 和 POWER 的宽松内存模型的一个教程式的简介
http://www.malloc.de/en/是 glibc 的内存分配管理
https://github.com/gperftools/gperftools是 Google 的内存分配管理模块
http://jemalloc.net/ 是 BSD 提供的内存分配管理 , 论文:https://people.freebsd.org/~jasone/jemalloc/bsdcan2006/jemalloc.pdf 这是一个可以并行处理的内存分配管理器
https://owent.net/2013/867.html ptmalloc,tcmalloc和jemalloc内存分配策略研究
http://www.cnhalo.net/2016/06/13/memory-optimize/ 内存优化总结:ptmalloc、tcmalloc和jemalloc
https://book.douban.com/subject/10510747/计算机网络(第5版) 作者: Andrew S. Tanenbaum / David J.
》,这本“计算机网络”和前面推荐的那本计算机网络不一样,前面那本偏扫盲,这本中有很多细节。这本书是国内外使用最广泛、最权威的计算机网络经典教材。全书按照网络协议模型自下而上(物理层、数据链路层、介质访问控制层、网络层、传输层和应用层)有系统地介绍了计算机网络的基本原理,并结合 Internet 给出了大量的协议实例。
http://www.site.uottawa.ca/~shervin/courses/ceg4185/lectures/ 渥汰华大学的一个课程讲义
https://www.geeksforgeeks.org/computer-network-tutorials/ 计算机网络教程
https://lartc.org/LARTC-zh_CN.GB2312.pdf Linux 的高级路由和流量控制 HowTo
https://access.redhat.com/sites/default/files/attachments/20150325_network_performance_tuning.pdf 网络调优
https://github.com/caesar0301/awesome-pcaptools 计算机科学领域的其他研究人员开发的工具集合,用于处理网络跟踪
PackageCloud 上的两篇关于 Linux 网络栈 https://blog.packagecloud.io/eng/2016/06/22/monitoring-tuning-linux-networking-stack-receiving-data/ https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data/
https://tools.ietf.org/html/rfc2661 Tunnel 相关的协议
https://tools.ietf.org/html/rfc2637 点对点隧道协议(PPTP)
https://coolshell.cn/articles/11564.html TCP 的那些事儿(上)
https://tools.ietf.org/html/rfc793 最初的 TCP 标准定义,但不包括 TCP 相关细节
https://tools.ietf.org/html/rfc813 TCP中的窗口和确认策略
https://tools.ietf.org/html/rfc879 讨论 MSS 参数对控制 TCP 分组大小的重要性
https://tools.ietf.org/html/rfc896 IP / TCP Internetworks中的拥塞控制
https://tools.ietf.org/html/rfc2581 TCP拥塞控制 https://tools.ietf.org/html/rfc5681
https://tools.ietf.org/html/rfc6582 对NT的快速恢复算法的NewReno修改
https://tools.ietf.org/html/rfc2018 TCP选择性确认选项
https://tools.ietf.org/html/rfc2883 CP的选择性确认(SACK)选项的扩展
https://tools.ietf.org/html/rfc2988 计算TCP的重传定时器
https://ee.lbl.gov/papers/congavoid.pdf 我个人觉得 TCP 最牛的不是不丢包,而是拥塞控制
http://man7.org/linux/man-pages/man7/tcp.7.html Linux 下的 TCP 参数
https://book.douban.com/subject/10746113/ HTTP权威指南 作者: David Gourley / Brian Totty 这本书有点厚,可以当参考书来看
https://tools.ietf.org/html/rfc7230 超文本传输​​协议(HTTP / 1.1):消息语法和路由
https://tools.ietf.org/html/rfc7231 超文本传输​​协议(HTTP / 1.1):语义和内容
https://tools.ietf.org/html/rfc7232 超文本传输​​协议(HTTP / 1.1):条件请求
https://tools.ietf.org/html/rfc7233 超文本传输​​协议(HTTP / 1.1):范围请求
https://tools.ietf.org/html/rfc7234 缓存
https://tools.ietf.org/html/rfc7235 身份验证
https://legacy.gitbook.com/book/ye11ow/http2-explained/details http2讲解
https://cascadingmedia.com/insites/2015/03/http-2.html
https://www.nginx.com/wp-content/uploads/2015/09/NGINX_HTTP2_White_Paper_v4.pdf
https://httpwg.org/specs/rfc7540.html 超文本传输​​协议版本2(HTTP / 2)
https://httpwg.org/specs/rfc7541.html HTTP/2 的压缩算法
https://en.wikipedia.org/wiki/Internet_protocol_suite 这是一个很不错的网络协议的词条汇集地。顺着这些协议,你可以找…

程序员练级攻略:异步I/O模型和Lock-Free编程

https://developer.ibm.com/articles/l-async/ https://developer.ibm.com/articles/l-async/
https://www.usenix.org/legacy/event/usenix04/tech/general/full_papers/elmeleegy/elmeleegy_html/html.html
https://docs.microsoft.com/en-us/windows/desktop/FileIO/i-o-completion-ports
http://sysinternals.d4rk4.ru/Information/IoCompletionPorts.html
https://book.douban.com/subject/6935552/ Windows Internals, Part 1
https://flylib.com/books/en/4.491.1.85/1/
http://www.wangafu.net/~nickm/libevent-book/ 使用Libevent进行快速便携式无阻塞网络编程
https://aceld.gitbooks.io/libevent/content/ 教程目的主要是快速建立libevent的认知,了解libevent的常用数据结构和编程方法。达到可以使用libevent写出自己的高并发服务器处理模型。
我简单总结一下,基本上来说,异步 I/O 模型的发展技术是: select -> poll -> epoll -> aio -> libevent -> libuv。Unix/Linux 用了好几十年走过这些技术的变迁,然而,都不如 Windows I/O Completion Port 设计得好(免责声明:这个观点纯属个人观点。相信你仔细研究这些 I/O 模型后,你会有自己的判断)。
看过这些各种异步 I/O 模式的实现以后,相信你会看到一个编程模式——Reactor 模式。下面是这个模式的相关文章(读这三篇就够了)。
https://dzone.com/articles/understanding-reactor-pattern-thread-based-and-eve 了解Reactor模式:基于线程和事件驱动
https://www.dre.vanderbilt.edu/~schmidt/PDF/Reactor2-93.pdf
https://www.celum.com/en/blog/technology/the-reactor-pattern-and-non-blocking-io 反应器模式和非阻塞IO
https://idea.popcount.org/2017-01-06-select-is-fundamentally-broken/
https://idea.popcount.org/2017-02-20-epoll-is-fundamentally-broken-12/
https://idea.popcount.org/2017-03-20-epoll-is-fundamentally-broken-22/

Lock-Free - 无锁技术越来越被开发人员重视,因为锁对于性能的影响实在是太大了,所以如果想开发出一个高性能的程序,你就非常有必要学习 Lock-Free 的编程方式。
http://www.drdobbs.com/lock-free-data-structures/184401865
https://erdani.com/publications/cuj-2004-10.pdf
https://mirrors.edge.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html 这本书堪称并行编程的经典书,必看。
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.53.8674&rep=rep1&type=pdf
https://coolshell.cn/articles/8239.html 无锁队列的实现
http://www.cs.rochester.edu/~scott/papers/1996_PODC_queues.pdf 这篇论文给出了一个无阻塞和阻塞的并发队列算法。
https://en.wikipedia.org/wiki/Non-blocking_algorithm
https://en.wikipedia.org/wiki/Read-copy-update
https://en.wikipedia.org/wiki/Seqlock
http://www.1024cores.net/
http://paulmck.livejournal.com/
http://concurrencyfreaks.blogspot.com/
http://preshing.com/
https://herbsutter.com/
http://mechanical-sympathy.blogspot.com/
https://www.boost.org/doc/libs/1_60_0/doc/html/lockfree.html Boost.Lockfree
https://github.com/concurrencykit/ck 并发性编程的原语。
https://github.com/facebook/folly - Facebook 的开源库(它对 MPMC 队列做了一个很好的实现)。
https://github.com/preshing/junction C++ 中的并发数据结构
https://github.com/rigtorp/MPMCQueue - 一个用 C++11 编写的有边界的“多生产者 - 多消费者”无锁队列。
https://github.com/rigtorp/Seqlock 用 C++ 实现的 Seqlock
http://liburcu.org/ - liburcu 是一个用户空间的 RCU(Read-copy-update,读 - 拷贝 - 更新)库。
https://github.com/khizmax/libcds 一个并发数据结构的 C++ 库
https://liblfds.org/ 一个用 C 语言编写的可移植、无许可证、无锁的数据结构库
https://software.intel.com/en-us/blogs/2011/07/07/all-about-64-bit-programming-in-one-place/ 所有关于64位编程的地方
https://dl.acm.org/citation.cfm?id=3037750 ,事务性内存(TM)一直是许多研究的重点,它在诸如 IBM Blue Gene/Q 和 Intel Haswell 等处理器中得到了支持。许多研究都使用 STAMP 基准测试套件来评估其设计。然而,我们所知的所有 TM 系统上的 STAMP 基准测试所获得的加速比较有限。 例如,在 IBM Blue Gene/Q 上有 64 个线程,我们观察到使用 Blue Gene/Q 硬件事务内存(HTM)的中值加速比为 1.4 倍,使用软件事务内存(STM)的中值加速比为 4.1 倍。什么限制了这些 TM 基准的性能?在本论文中,作者认为问题在于用于编写它们的编程模型和数据结构上,只要使用合适的模型和数据结构,程序的性能可以有 10 多倍的提升。
https://software.intel.com/en-us/articles/improving-openssl-performance ,这篇文章除了教你如何提高 OpenSSL 的执行性能,还讲了一些底层的性能调优知识。
https://www.ebayinc.com/stories/blogs/tech/how-ebays-shopping-cart-used-compression-techniques-to-solve-network-io-bottlenecks/ ,这是一篇很好的文章,讲述了 eBay 是如何通过压缩数据来提高整体服务性能的,其中有几个比较好的压缩算法。除了可以让你学到相关的技术知识,还可以让你看到一种比较严谨的工程师文化。
https://engineering.linkedin.com/blog/2017/05/boosting-site-speed-using-brotli-compression 来替换 gzip,以此带来更快的访问,这篇文章讲述了什么是 Brotli 以及与其它压缩程序的比较和所带来的性能提升。
https://www.dwheeler.com/secure-programs/ ,这是一本电子书,其中有繁体中文的翻译,这本电子书讲了 Linux/Unix 下的一些安全编程方面的知识。
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/acrobat-17.pdf ,计算机设计的忠告,这是 ACM 图灵奖得主 在 Xerox PARC 工作时的一篇论文。这篇论文简明扼要地总结了他在做系统设计时的一些想法,非常值得一读。(用他的话来说,“Studying the design and implementation of a number of computer has led to some general hints for system design. They are described here and illustrated by many examples, ranging from hardware such as the Alto and the Dorado to application programs such as Bravo and Star“。)
http://www.hpl.hp.com/techreports/tandem/TR-86.1.pdf ,根据文章名称也可以看出,5 分钟法则是用来衡量内存与磁盘的,而 5 字节法则则是在内存和 CPU 之间的权衡。这两个法则是 Jim Gray 和 Franco Putzolu 在 1986 年的文章。
http://jimgray.azurewebsites.net/5_min_rule_sigmod.pdf 中对该法则进行了重新审视。2007 年,也就是该论文发表 20 年后,这年的 1 月 28 日,Jim Gray 驾驶一艘 40 英尺长的船从旧金山港出海,目的是航行到附近的费拉隆岛,在那里撒下母亲的骨灰。出海之后,他就同朋友和亲属失去了联系。为了纪念和向大师致敬,时隔 10 多年后的 2009 年 Goetz Graefe 又发表了
http://cacm.acm.org/magazines/2009/7/32091-the-five-minute-rule-20-years-later/fulltext

程序员练级攻略:Java底层知识

https://dzone.com/articles/introduction-to-java-bytecode ,这篇文章图文并茂地向你讲述了 Java 字节码的一些细节,是一篇很不错的入门文章。
https://www.ibm.com/developerworks/library/it-haggar_bytecode/index.html ,虽然这篇文章很老了,但是这篇文章是一篇非常好的讲 Java 字节码的文章。
https://github.com/jon-bell/bytecode-examples 操作字节码的比较实用的例子。包括方法调用统计、静态字节码修改、Heap Taggin 和 Heap Walking。
https://wiki.openjdk.java.net/display/CodeTools/asmtools 用于生产环境的 Java .class 文件开发工具。
http://bytebuddy.net/#/ 代码生成库:运行时创建 Class 文件而不需要编译器帮助。
https://github.com/qmx/jitescript 和 BiteScript 类似的字节码生成库。
使用字节码编程可以玩出很多高级玩法,最高级的还是在 Java 程序运行时进行字节码修改和代码注入。听起来是不是一些很黑客,也很黑科技的事?是的,这个方式使用 Java 这门静态语言在运行时可以进行各种动态的代码修改,而且可以进行无侵入的编程。
比如, 我们不需要在代码中埋点做统计或监控,可以使用这种技术把我们的监控代码直接以字节码的方式注入到别人的代码中,从而实现对实际程序运行情况进行统计和监控。如果你看过我的《编程范式游记》,你就知道这种技术的威力了,其可以很魔法地把业务逻辑和代码控制分离开来。
https://stackoverflow.com/questions/11898566/tutorials-about-javaagents ”,其主要方法是实现一个叫 premain() 的方法(嗯,一个比 main() 函数还要超前执行的 main 函数),然后把你的代码编译成一个 jar 文件。
https://www.javacodegeeks.com/2015/09/java-agents.html
https://www.infoq.cn/article/Easily-Create-Java-Agents-with-ByteBuddy
http://www.stagemonitor.org/ 如何用 Java Agent 做监控
https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf 。对于规格说明书的阅读,我认为是系统了解 JVM 规范的最佳文档,这个文档可以让你对于搞不清楚或是诡异的问题恍然大悟。关于中文翻译,有人在 GitHub 上开了个 Repo - “ https://github.com/waylau/java-virtual-machine-specification
https://shipilev.net/jvm-anatomy-park/ JVM 解剖公园,这是一个系列的文章,每篇文章都不长,但是都很精彩,带你一点一点地把 JVM 中的一些技术解开。
http://www.jcp.org/en/jsr/detail?id=133 学习 Java 底层原理还有 Java 的内存模型,官方文章是
http://www.cs.umd.edu/~pugh/java/memoryModel/ Java内存模型
http://gee.cs.oswego.edu/dl/jmm/cookbook.html ,解释了怎样实现 Java 内存模型,特别是在考虑到多处理器(或多核)系统的情况下,多线程和读写屏障的实现。
http://gee.cs.oswego.edu/dl/html/j9mm.html ,讲了怎样通过 VarHandle 来使用 plain、opaque、release/acquire 和 volatile 四种共享内存的访问模式,并剖析了底层的原理。
https://book.douban.com/subject/6809987/ 》,在豆瓣上的得分居然是 9.9(当然,评价人数不多)。这本书非常全面地介绍了垃圾收集的原理、设计和算法。但是这本书也是相当难啃的。中文翻译《 https://book.douban.com/subject/26740958/ 垃圾回收算法手册:自动内存管理的艺术
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ 它是 Hotspot Java 虚拟机的垃圾回收调优指南

程序员练级攻略:数据库

https://book.douban.com/subject/5402711/ Oracle Database 9i/10g/11g编程艺术 》,无论是开发人员还是 DBA,它都是必读的书。这本书的作者是 Oracle 公司的技术副总裁托马斯·凯特(Thomas Kyte),他也是世界顶级的 Oracle 专家。
https://dev.mysql.com/doc/ MySQL参考手册
然后,官方还有几个 PPT 也要学习一下。
https://www.mysql.com/cn/why-mysql/presentations/tune-mysql-queries-performance/
https://www.mysql.com/cn/why-mysql/presentations/mysql-performance-tuning101/
https://www.mysql.com/cn/why-mysql/presentations/mysql-performance-sys-schema/
https://www.mysql.com/cn/why-mysql/presentations/mysql-performance-tuning-best-practices/
https://www.mysql.com/cn/why-mysql/presentations/mysql-security-best-practices/
https://www.mysql.com/cn/why-mysql/presentations/mysql-cluster-deployment-best-practices/
https://www.mysql.com/cn/why-mysql/presentations/mysql-high-availability-innodb-cluster/
https://book.douban.com/subject/23008813/ 高性能MySQL 》,这本书是 MySQL 领域的经典之作,拥有广泛的影响力。不但适合数据库管理员(DBA)阅读,也适合开发人员参考学习。不管是数据库新手还是专家,都能从本书中有所收获。
https://book.douban.com/subject/24708143/ MySQL技术内幕 如果你对 MySQL 的内部原理有兴趣的话,可以看一下这本书https://dev.mysql.com/doc/internals/en/ 官网
https://book.douban.com/subject/26419771/ 数据库索引设计与优化 》也是很不错的。虽然不是讲 MySQL 的,但是原理都是相通的。这也是上面推荐过的《高性能 MySQL》在其索引部分推荐的一本好书。 你千万不要觉得只有做数据库你才需要学习这种索引技术。不是的!在系统架构上,在分布式架构中,索引技术也是非常重要的。这本书对于索引性能进行了非常清楚的估算,不像其它书中只是模糊的描述,你一定会收获很多。
下面还有一些不错的和 MySQL 相关的文章。
http://blog.codinglabs.org/articles/theory-of-mysql-index.html
https://medium.com/@kousiknath/data-structures-database-storage-internals-1f5ed3619d43
https://medium.com/@Pinterest_Engineering/sharding-pinterest-how-we-scaled-our-mysql-fleet-3f341e96ca6f
https://www.mysql.com/cn/why-mysql/white-papers/mysql-guide-to-high-availability-solutions/
https://dzone.com/articles/choosing-mysql-high-availability-solutions
https://mariadb.com/sites/default/files/content/Whitepaper_High_availability_with_MariaDB-TX.pdf
https://shlomi-noach.github.io/awesome-mysql/ 这个列表中有很多的工具和开发资源,可以帮助你做很多事。

MySQL 有两个比较有名的分支,一个是 Percona,另一个是 MariaDB,其官网上的 Resources 页面中有很多不错的资源和文档,可以经常看看。
https://www.percona.com/resources
https://mariadb.com/resources/
https://www.percona.com/blog/
https://mariadb.com/resources/blog

https://www.percona.com/live/mysql-conference-2015 ,Booking.com 的 MySQL 数据库使用的演化,其中有很多不错的经验分享,我相信也是很多公司会遇到的的问题。
https://medium.com/airbnb-engineering/tracking-the-money-scaling-financial-reporting-at-airbnb-6d742b80f040 ,Airbnb 的数据库扩展的经验分享。
https://eng.uber.com/mysql-migration/ ,无意比较两个数据库谁好谁不好,推荐这篇 Uber 的长文,主要是想让你从中学习到一些经验和技术细节,这是一篇很不错的文章。

关于 MySQL 的集群复制,下面有这些文章供你学习一下,都是很不错的实践性比较强的文章。
https://github.blog/2017-10-13-mitigating-replication-lag-and-reducing-read-load-with-freno/
另外,Booking.com 给了一系列的文章,你可以看看:
https://medium.com/booking-com-infrastructure/better-parallel-replication-for-mysql-14e2d7857813
https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-2-slave-group-commit-459026a141d2
https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-3-benchmarks-in-production-db5811058d74
https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-4-more-benchmarks-in-production-49ee255043ab
https://medium.com/booking-com-infrastructure/evaluating-mysql-parallel-replication-part-4-annex-under-the-hood-eb456cf8b2fb
对于 MySQL 的数据分区来说,还有下面几篇文章你可以看看
https://stackoverflow.com/questions/5541421/mysql-sharding-approaches
https://www.percona.com/blog/2009/08/06/why-you-dont-want-to-shard/
https://www.percona.com/sites/default/files/presentations/How to Scale Big Data Applications.pdf
https://www.percona.com/blog/2016/08/30/mysql-sharding-with-proxysql/
然后,再看看各个公司做 MySQL Sharding 的一些…
https://devs.mailchimp.com/blog/using-shards-to-accommodate-millions-of-users/
https://eng.uber.com/schemaless-rewrite/
https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c
https://medium.com/airbnb-engineering/how-we-partitioned-airbnb-s-main-database-in-two-weeks-55f7e006ff21

NoSQL 数据库
关于 NoSQL 数据库,其最初目的就是解决大数据的问题。然而,也有人把其直接用来替换掉关系型数据库。所以在学习这个技术之前,我们需要对这个技术的一些概念和初衷有一定的了解。下面是一些推荐资料。
https://www.youtube.com/watch?v=qI_g07C_Q5I&feature=youtu.be
https://book.douban.com/subject/25662138/ NoSQL精粹 是本难得的关于 NoSQL 的书,很不错,非常易读。
https://medium.com/baqend-blog/nosql-databases-a-survey-and-decision-guidance-ea7823a822d#.nhzop4d23 ,这篇文章可以带你自上而下地从 CAP 原理到开始了解 NoSQL 的种种技术,是一篇非常不错的文章。
http://ianvarley.com/UT/MR/Varley_MastersReport_Full_2009-08-07.pdf ,这篇论文虽然有点年代久远。但这篇论文是 HBase 的基础,你花上一点时间来读读,就可以了解到,对各种非关系型数据存储优缺点的一个很好的比较。
https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/ NoSQL 建模技术。这篇文章我曾经翻译在了 CoolShe.
https://docs.mongodb.com/manual/core/data-modeling-introduction/ ,虽然这是 MongoDB 的数据建模介绍,但是其很多观点可以用于其它的 NoSQL 数据库。
https://firebase.google.com/docs/database/android/structure-data ,Google 的 Firebase 数据库使用 JSON 建模的一些最佳实践。
http://blog.nahurst.com/visual-guide-to-nosql-systems 因为 CAP 原理,所以当你需要选择一个 NoSQL 数据库的时候,你应该看看这篇文档
https://www.upwork.com/hiring/data/sql-vs-nosql-databases-whats-the-difference/
https://engineering.salesforce.com/sql-or-nosql-9eaf1d92545b

各种 NoSQL 数据库
学习使用 NoSQL 数据库其实并不是一件很难的事,只要你把官方的文档仔细地读一下,是很容易上手的,而且大多数 NoSQL 数据库都是开源的,所以,也可以通过代码自己解决问题。下面我主要给出一些典型的 NoSQL 数据库的一些经验型的文章,供你参考。
https://medium.com/walmartlabs/avoid-pitfalls-in-scaling-your-cassandra-cluster-lessons-and-remedies-a71ca01f8c04
https://medium.com/walmartlabs/building-object-store-storing-images-in-cassandra-walmart-scale-a6b9c02af593
https://engineeringblog.yelp.com/2016/08/how-we-scaled-our-ad-analytics-with-cassandra.html Yelp 的这篇博客也有一些相关的经验和教训。
https://blog.discordapp.com/how-discord-stores-billions-of-messages-7fa6ec7ee4c7 Discord 公司分享的一个如何存储十亿级消息的技术文章。
https://www.slideshare.net/DataStax/cassandra-at-instagram-2016
https://medium.com/netflix-techblog/benchmarking-cassandra-scalability-on-aws-over-a-million-writes-per-second-39f45f066c9e Netflix 公司在 AWS 上给 Cassandra 做的一个 Benchmark
HBase 相关
https://medium.com/imgur-engineering/imgur-notifications-from-mysql-to-hbase-9dba6fc44183
https://medium.com/@Pinterest_Engineering/improving-hbase-backup-efficiency-at-pinterest-86159da4b954
https://www.ibm.com/support/knowledgecenter/en/SSPT3X_2.1.2/com.ibm.swg.im.infosphere.biginsights.analyze.doc/doc/bigsql_TuneHbase.html
http://www.larsgeorge.com/2010/05/hbase-file-locality-in-hdfs.html
http://borthakur.com/ftp/RealtimeHadoopSigmod2011.pdf
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.294.8459&rep=rep1&type=pdf
https://github.com/rayokota/awesome-hbase
针对于 HBase 有两本书你可以考虑一下。
https://book.douban.com/subject/25706541/ HBase实战 首先,先推荐两本书,一本是偏实践的
另一本是偏大而全的手册型的 https://book.douban.com/subject/10748460/ HBase权威指南
http://hbase.apache.org/book.html#book Apache HBase™参考指南
另外两个列数据库
https://clickhouse.yandex/
https://engineering.giphy.com/scaling-redshift-without-scaling-costs/
文档数据库 Document Database - MongoDB, SimpleDB, CouchDB
https://msdn.microsoft.com/en-us/magazine/hh547103.aspx
https://www.mongodb.com/blog/post/ebay-building-mission-critical-multi-data-center-applications-with-mongodb
https://medium.baqend.com/parse-is-gone-a-few-secrets-about-their-infrastructure-91b3ab2fcf71
https://medium.com/build-addepar/migrating-mountains-of-mongo-data-63e530539952
https://engineering.linkedin.com/blog/2017/12/couchbase-ecosystem-at-linkedin
https://medium.com/zendesk-engineering/resurrecting-amazon-simpledb-9404034ec506
https://github.com/ramnes/awesome-mongodb
数据结构数据库 Data structure Database - Redis
https://tech.trivago.com/2017/01/25/learn-redis-the-hard-way-in-production/
http://highscalability.com/blog/2014/9/8/how-twitter-uses-redis-to-scale-105tb-ram-39mm-qps-10000-ins.html
https://slack.engineering/scaling-slacks-job-queue-687222e9d100
https://github.blog/2017-01-10-moving-persistent-data-out-of-redis/
https://engineering.instagram.com/storing-hundreds-of-millions-of-simple-key-value-pairs-in-redis-1091ae80f74c
https://www.infoq.com/presentations/twitch-pokemon/
https://deliveroo.engineering/2016/10/07/optimising-session-key-storage.html
https://deliveroo.engineering/2017/01/19/optimising-membership-queries.html
https://github.com/JamzyWang/awesome-redis
时序数据库 Time-Series Database
https://blog.timescale.com/what-the-heck-is-time-series-data-and-why-do-i-need-a-time-series-database-dcf3b1b18563
https://blog.timescale.com/time-series-data-why-and-how-to-use-a-relational-database-instead-of-nosql-d0cd6975e87c
https://code.fb.com/core-data/beringei-a-high-performance-time-series-storage-engine/
https://medium.com/netflix-techblog/introducing-atlas-netflixs-primary-telemetry-platform-bd31f4d8ed9a
https://blog.timescale.com/when-boring-is-awesome-building-a-scalable-time-series-database-on-postgresql-2900ea453ee2/
https://medium.com/netflix-techblog/scaling-time-series-data-storage-part-i-ec2b6d44ba39
https://medium.com/@leventov/design-of-a-cost-efficient-time-series-store-for-big-data-88c5dc41af8e
https://github.com/xephonhq/awesome-time-series-database
图数据库 - Graph Platform
首先是 IBM Devloperworks 上的两个简介性的.
https://www.ibm.com/developerworks/library/cl-graph-database-1/cl-graph-database-1-pdf.pdf
https://www.ibm.com/developerworks/library/cl-graph-database-2/cl-graph-database-2-pdf.pdf
https://graphdatabases.com/
接下来是一些图数据库的介绍文章。
https://www.infoq.com/presentations/graph-database-scalability/
https://neo4j.com/customers/
https://blog.twitter.com/engineering/en_us/a/2010/introducing-flockdb.html
https://architecht.io/google-ibm-back-new-open-source-graph-database-project-janusgraph-1d74fb78db6b
https://aws.amazon.com/cn/neptune/
搜索数据库 - ElasticSearch
https://www.elastic.co/guide/en/elasticsearch/guide/master/index.html 这是官网方的 ElasticSearch 的学习资料,基本上来说,看这个就够了。
接下来是 4 篇和性能调优相关的工程实践
https://www.ebayinc.com/stories/blogs/tech/elasticsearch-performance-tuning-practice-at-ebay/
https://kickstarter.engineering/elasticsearch-at-kickstarter-db3c487887fc
https://www.loggly.com/blog/nine-tips-configuring-elasticsearch-for-high-performance/
https://medium.com/@abhidrona/elasticsearch-deployment-best-practices-d6c1323b25d7
https://github.com/dzharii/awesome-elasticsearch 是 GitHub 上的资源列表
好了,总结一下今天分享的内容。虽然有人会认为数据库与程序员无关,是 DBA 的事儿。但我坚信,数据库才真正是程序员的事儿。因为程序是需要和数据打交道的,所以程序员或架构师不仅需要设计数据模型,还要保证整体系统的稳定性和可用性,数据是整个系统中关键中的关键。
对于数据库方向,重点就是两种数据库,一种是以 SQL 为代表的关系型数据库,另一种是以非 SQL 为代表的 NoSQL 数据库。因而,在这篇文章中,我给出了 MySQL 和各种开源 NoSQL 的一些相关的有价值的文章和导读,主要是让你对这些数据库的内在有一定的了解,但又不会太深。同时给出了一些知名企业使用数据库的工程实践,这对于了解各种数据库的优劣非常有帮助,值得认真读读。

你可能感兴趣的:(好文收藏)