感谢王海峰的报料:
距上次发布 beansdb-0.3.0 以来, 又过了一年. 经过一年的线上运营锤炼, 它一直在不断改进中, 到现在已经有了非常大的变化, 下面简单描述一下:
完全放弃了ToykoCabinet 作为存储引擎, 它在数据的可靠性, 一致性, 以及大数据量下的性能有不少问题, 已经不能满足 beansdb 对数据存储的需求. 于是重新实现了一种基于日志结构的存储引擎 Bitcask, 借鉴自 Riak 项目的一份设计文档: http://downloads.basho.com/papers/bitcask-intro.pdf
Bitcask 有以下优点: 读写低时延, 高写入吞吐量, 能处理大规模数据集而性能不会显著下降, 数据持久化更好, 不用担心crash会导致数据丢失, 通过简单的rsync就能在线备份数据, 还能恢复被错误覆盖的数据.算法简单, 代码容易维护和调优, 在大数据量和高负载下的性能容易估计.
Bitcask 也有缺点, 它要求所有key信息全部放入内存, 在启动时一次性载入. 这对内存索引的效率提出了非常高的要求. beansdb中改进的HashTree有更好的空间效率, 它根据key的特点进行了重新编码, 大大降低了空间消耗, 每条记录平均只需20字节, 其中包括key, 版本,hash, 位置等信息, 这样一台8G内存的服务器可以存储 4亿条记录.如果记录平均大小为1k的文本, 则能存 400G, 如果是平均大小为100k的图片, 则能存40T.
启动时间也是Bitcask算法的缺点, 目前在一分钟大概能载入5千万条记录的索引, 还有进一步优化的空间.如果是意外crash后的重启, 时间会稍微长一点, 视数据量的大小而定, 一般也不会超过10分钟.
日志结构存储的另一个问题是会有空洞, beansdb 支持外部控制的在线垃圾回收过程, 可以安排在夜里进行.通常在硬盘不是太紧张的情况下, 几个月进行一次垃圾回收就可以了.
之前网络层采用的是memcached的代码, 它使用libevent, 每个连接是跟固定的线程绑定的,在存储引擎中使用这种线程模型容易发生阻塞, 磁盘IO操作阻塞当前线程进而阻塞了其它连接的网络IO,因而直接基于epoll/kqueue 实现 leader/follower 模式的线程池, 响应时间会更好, 尤其是在并发访问比较高的时候.
为了简化维护, 在部署beansdb时增加了一层 proxy, 它是用 go 实现的, 会根据后端存储节点的数据情况自动做数据路由和负载均衡.proxy 时无状态的, 可以部署多台开实现扩容和HA. 添加新节点时只要改一下proxy的配置, 而数据迁移时无需更改任何配置.
目前我们部署了两个实例, 一个用来存文本数据, 共有13.3亿条记录, 总数据量为 2.8T, 分散在 8 个节点的 10 块SATA盘上, qps 为 160, 99% 的时间在 70ms 以内.
另外一个实例用来存储图片和单曲, 共有 7.5 亿, 数据量为 22T, 分散在 17 个节点的 约 50 块硬盘上, qps 为 180, 99% 时间在 300 ms 以内.
目前代码和文档还没有同步更新到 beansdb.googlecode.com 上去, 近期会进行完善. 有兴趣的同学, 可以先拿一份最新的代码去尝尝鲜:http://beansdb.googlecode.com/files/beansdb-0.5.2.tar.gz
提前祝大家圣诞快乐, 元旦快乐, 新年快乐, 还有情人节更快乐~
- Davies
更多关于BeansDB的详细信息,或者下载地址请点这里
分享到:
相关推荐
beansdb -p 7901 -d -P/tmp/beansdb1.pid -L/tmp/beansdb1.log -H /home/gfreezy/beans/db/db1 -vv beansdb -p 7902 -d -P/tmp/beansdb2.pid -L/tmp/beansdb2.log -H /home/gfreezy/beans/db/db2 -vv 自定义设置。...
这是本人花了几天的时间对 目前beansdb的源代码进行的分析,其中核心部分每一行都有详细注释。详细注释的文件有htree.c hstore.c bitcask.c record.c beansdb.c,其它部分注释的比较少。因为其它部分不会影响我们的...
- **分布式设计**:BeansDB采用了分布式架构,这意味着它可以将数据分散存储在多个服务器上,从而提高了系统的整体性能和可扩展性。 - **最终一致性**:BeansDB在设计上追求最终一致性,即在短期内可能会存在数据不...
BeansDB 是一个强大的分布式键值存储系统,设计用于处理海量数据并确保高可用性。它在大数据领域扮演着重要角色,因为它的核心特性是能够高效地存储和检索大量的键值对。这个系统的设计灵感来源于Amazon的Dynamo,但...
### BeansDB:豆瓣开源数据库存储系统的深度解析 #### 一、BeansDB概览 BeansDB是豆瓣于2009年开发的一款开源数据库存储系统,它主要被设计为一种高性能、分布式、高可用的Key-Value数据库。不同于传统的事务型...
BeansDB 是一个主要针对大数据量、高可用性的分布式KeyValue存储系统,采用HashTree和简化的版本号来快速同步保证最终一致性(弱),一个简化版的 Dynamo。 它采用类似memcached的去中心化结构,在客户端实现数据...
BeansDB 是一个分布式键值存储系统,主要用于支持大规模的数据存储和检索。在豆瓣(Douban)的业务场景中,它被用来处理大量的用户数据和元数据。Beanseye 是针对 BeansDB 的一个重要补充,它是一个由 Go 语言编写的...
豆瓣,作为一家知名的互联网公司,不仅以其独特的文化氛围闻名,同样在技术架构和组件方面也有所创新和贡献。在CTO俱乐部北京举办的第99期主题活动中,豆瓣的首席架构师洪强宁介绍了豆瓣的技术架构和自主研发的几个...
豆瓣网作为一个分享和发现书籍、电影、音乐等文化生活信息的用户生成内容(UGC)社区,自2005年4月上线以来,迅速成长为一个具有广泛影响力的平台。截至报告撰写时,豆瓣在国内Alexa排名为26位,其非典型的LAMP架构...
- **分布式文件系统**:为了应对图片文件剧增带来的I/O负载问题,引入了分布式文件系统(如MogileFS/FastDFS/BeansDB/TaobaoTFS)。这些系统可以提供更好的可扩展性和容错能力。 - **缓存策略改进**:传统的缓存...
- BeansDB是由豆瓣社区开发的。 6. **NoSQL与NewSQL**: - NoSQL数据库包括Bigtable、Dynamo等,但不包括DB2。 - NewSQL数据库如MemSQL,TokuDB,不同于传统的SQL数据库,如MySQL,但Sybase是传统的关系型数据库...
- BeansDB是中国豆瓣社区开发的分布式存储系统。 - NewSQL数据库如MemSQL、TokuDB提供类似关系型数据库的ACID特性,但支持更大规模的数据。 - NoSQL数据库如Bigtable、Dynamo不使用传统的关系模型,适应大数据...
- BeansDB是由豆瓣社区开发的,NewSQL数据库如MemSQL提供高性能的事务处理,而NoSQL数据库如Bigtable和Dynamo提供了灵活的数据模型。 4. 数据挖掘与可视化: - 数据挖掘包括数据融合、分析和决策支持,但发现的...
1. 序 2. 思想篇 CAP 最终一致性 变体 BASE 其他 I/O的五分钟法则 不要删除数据 RAM是硬盘,硬盘是磁带 Amdahl定律和Gustafson定律 万兆以太网 3. 手段篇 一致性哈希 ...持久化设计 5. 应用篇 eBay 架构经验
什么是Beansdb? Beansdb是为大型在线系统设计的分布式键值存储系统,旨在实现高可用性和易于管理。 它采用了Amazon Dynamo的想法,然后进行了简化以保留“什么是Beansdb”? Beansdb是为大型在线系统设计的分布式...