`
guoyiqi
  • 浏览: 964050 次
社区版块
存档分类
最新评论

豆瓣 BeansDB 卷土重来,发布 0.5.2 版本(转自:http://www.oschina.net/news/14053/beansdb-0-5-2)

 
阅读更多

感谢王海峰的报料:

距上次发布 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的详细信息,或者下载地址请点这里

分享到:
评论

相关推荐

    ImageServer:使用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-0.5.3-中文源注释[Original].rar

    这是本人花了几天的时间对 目前beansdb的源代码进行的分析,其中核心部分每一行都有详细注释。详细注释的文件有htree.c hstore.c bitcask.c record.c beansdb.c,其它部分注释的比较少。因为其它部分不会影响我们的...

    Inside-BeansDB.rar_inside

    BeansDB 是一个主要针对大数据量、高可用性的分布式KeyValue存储系统,采用HashTree和简化的版本号来快速同步保证最终一致性(弱),一个简化版的Dynamo

    cpp-BeansDB豆瓣公司另一个分布式键值存储系统

    BeansDB 是一个主要针对大数据量、高可用性的分布式KeyValue存储系统,采用HashTree和简化的版本号来快速同步保证最终一致性(弱),一个简化版的 Dynamo。 它采用类似memcached的去中心化结构,在客户端实现数据...

    beansdb设计与实现

    beansdb是豆瓣开发的分布式存储,本文档描述了beansdb的存储设计与实现。

    Inside BeansDB

    BeansDB,豆瓣开源数据库存储系统,豆瓣

    BeansDB代理和监控器Beanseye.zip

    Beanseye 是豆瓣用 Go 语言开发的一个 BeansDB 的代理和监控器。

    NoSQL数据库笔谈

    1. 序 2. 思想篇 CAP 最终一致性 变体 BASE 其他 I/O的五分钟法则 不要删除数据 RAM是硬盘,硬盘是磁带 Amdahl定律和Gustafson定律 万兆以太网 3. 手段篇 一致性哈希 ...持久化设计 5. 应用篇 eBay 架构经验

    豆瓣的架构和一些组件

    5月30日CTO俱乐部在北京举办的第99期主题活动的主讲嘉宾:洪强宁(豆瓣 首席架构师) 介绍豆瓣的技术架构和豆瓣自行开发的主要组件(如KV存储组件BeansDB,应用开发平台DAE,Python的Spark实现Dpark等)。...

    大数据云计算技术系列 NoSQL数据库学习教程(共71页).pdf

    4 BeansDB 4 简介 4 更新 4 特性 4 性能 4 Nuclear 4 两个设计上的Tips 4 Voldemort 4 Dynomite 4 Kai 4 未分类 4 Skynet 4 Drizzle 4 比较 4 可扩展性 4 数据和查询模型 4 持久化设计 5 应用篇 5 eBay 架构经验 5 ...

    已存档,请参阅GoBeansDB。-C/C++开发

    什么是Beansdb? Beansdb是为大型在线系统设计的分布式键值存储系统,旨在实现高可用性和易于管理。 它采用了Amazon Dynamo的想法,然后进行了简化以保留“什么是Beansdb”? Beansdb是为大型在线系统设计的分布式...

Global site tag (gtag.js) - Google Analytics