4. 豆瓣社区 – BeansDB(自研KV数据库)
它采用类似memcached的去中心化结构,在客户端实现数据路由。目前只提供了Python版本的客户端,其它语言的客户端可以由memcached的客户端稍加改造得到。它具有如下特性:
高可用:通过多个可读写的用于备份实现高可用
最终一致性:通过哈希树实现快速完整数据同步(短时间内数据可能不一致)
容易扩展:可以在不中断服务的情况下进行容量扩展。
高性能:异步网络IO, 日志结构的存储方式Bitcask.
简单协议:Memcache兼容协议,大量可用客户端
目前,BeansDB在豆瓣主要部署了两个集群:一个集群用于存储数据库中的大文本数据,比如日记、帖子一类;另外一个豆瓣FS集群,主要用于存储媒体文件,比如用户上传的图片、豆瓣电台上的音乐等。
BeansDB采用Key-Value存储架构,其最大的特点是具有高度的可伸缩性;在BeansDB的架构下,在大数据量下,扩展数据节点将轻而易举,只需要添加硬件,安装软件,修改相应的配置文件即可。
BeansDB项目可以说是一个简化版的AWS DynamoDB。BeansDB对key做哈希运算找到节点来实现分布和冗余, 一个写操作会写好几个节点,而现在的配置是写三份读一份。BeansDB主要的特点是支持海量KV数据库——相比Redis这种支持几十个G到几百个G的内存KV数据库,BeansDB可以支持到上百T的数据。另外BeansDB最大的好处就是运维很简单,性能、扩容都很好,也实现了最终一致性。
BeansDB在可用性方面也有很大的优势,任何一个节点宕机都不会受到影响,数据是自动伸缩冗余的。在运维方面也很简单,基本上没有什么用户数据的冗余残余,所有数据通过一个同步脚本可以快速同步。
学习资料
1.书籍
1.1 MongoDB: The Definitive Guide(Kristina Chodorow)
MongoDB是入门NoSQL数据库的最好选择之一。本书讲解了所有关于MongoDB的基础知识,是本很好的入门书籍。
1.2 NoSQL精粹 (Pramod J.Sadalage,Martin Fowler)
本书全方位比较关系型数据库与NoSQL数据库的异同,详细讲解4大主流NoSQL数据库的优劣势、用法和适用场合,深入探讨实现NoSQL数据库系统的各种细节。此书对于技术选型有很好的指导作用。