最近学习了一下豆瓣的分布式 Key/Value 存储系统 BeansDB(v0.5.3)。
BeansDB 的作者 Davies 写的关于 BeansDB 的介绍:《beansdb卷土重来》。
BeansDB 的项目主页:http://code.google.com/p/beansdb/。
用户手册:http://code.google.com/p/beansdb/wiki/UserGuide。
下载地址:http://code.google.com/p/beansdb/downloads/list。
下载之后参照用户手册上的说明编译安装即可,非常简单。
启动 BeansDB 也很简单,如:
1
|
beansdb -d -p 7900 -H testdb |
其中 -p 指定端口,-H 指定数据文件存放的目录。
BeansDB 发布版中带有 Python 接口,用法如下(来自官网手册):
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#python from dbclient import Beansdb cfg = { "localhost:7901" : range ( 16 ), "localhost:7902" : range ( 16 ), "localhost:7903" : range ( 16 ), } db = Beansdb(cfg, 16 ) db. set ( 'key' , 'value' ) v = db.get( 'key' ) db.delete( 'key' ) |
BeansDB 非常简单,基本上它只有三个操作:set、get以及delete。它甚至没有直接提供遍历所有 key 的方法,遍历所有 key 的话,需要 get(‘@’),然后继续遍历,不过,在数据量很大的情况下,这个遍历可能会花比较长的时间。
BeansDB 采用了 Bitcask 设计,将所有 key 的信息都保存在内存中。这样的好处是查找会特别快,但一个直接的缺点就是机器的内存限制了能存放的 key 的数目的上限。根据《beansdb卷土重来》中的介绍,一个 key 大约占用 20 字节,这样一台 8G 内存的服务器将可以存储约 4 亿个 key。当然,key 所对应的 value 是存储在硬盘上的。
BeansDB 比较适合存储中等大小的写入后就很少变化的内容,比如图片;不适合存储大量小碎片内容或会频繁更改的内容,比如日志;也不适合存储太大的文件,根据作者 Davies 的说法,BeansDB 默认设置单文件不超过 50M,实际上用它存储超过 10M 的文件感觉都不太合适。
另外,随着硬盘越来越便宜,目前各大 NoSQL 存储系统似乎都不太关心硬盘的占用量,为了追求写入速度,普遍使用追加的方式写新数据,当一个 key 的值发生变化时,系统只是在硬盘上追加一条记录,并不会把原来的值从硬盘上删除。这样一来,如果你存储的内容经常变化,一段时间后,你会发现硬盘占用量只 增不减。
请教了作者 Davies 之后,关于这个问题得到以下解决方案:
目前没有提供相关工具,可以用telnet 来控制:
12telnet localhost 7900
flush_all 0
这样对应的节点就会执行优化操作,tail -f /var/log/beansdb.log 能看到优化的信息,如果运行的时候设置的Log文件的话。
总的来说,BeansDB 安装和使用都非常简单,性能也不错,而且是国人开发的。如果有类似于大量图片存储这样的需求,可以尝试一下。
相关推荐
### BeansDB设计与实现 #### 一、BeansDB概述 BeansDB是一款由豆瓣开发的分布式存储系统,它主要被设计为一种高效的键值(Key-Value)数据库,具有良好的可扩展性和高可用性特点。该系统的目标是提供一个既能够应对...
### BeansDB:豆瓣开源数据库存储系统的深度解析 #### 一、BeansDB概览 BeansDB是豆瓣于2009年开发的一款开源数据库存储系统,它主要被设计为一种高性能、分布式、高可用的Key-Value数据库。不同于传统的事务型...
这是本人花了几天的时间对 目前beansdb的源代码进行的分析,其中核心部分每一行都有详细注释。详细注释的文件有htree.c hstore.c bitcask.c record.c beansdb.c,其它部分注释的比较少。因为其它部分不会影响我们的...
BeansDB 是一个分布式键值存储系统,主要用于支持大规模的数据存储和检索。在豆瓣(Douban)的业务场景中,它被用来处理大量的用户数据和元数据。Beanseye 是针对 BeansDB 的一个重要补充,它是一个由 Go 语言编写的...
BeansDB 是一个强大的分布式键值存储系统,设计用于处理海量数据并确保高可用性。它在大数据领域扮演着重要角色,因为它的核心特性是能够高效地存储和检索大量的键值对。这个系统的设计灵感来源于Amazon的Dynamo,但...
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 是一个主要针对大数据量、高可用性的分布式KeyValue存储系统,采用HashTree和简化的版本号来快速同步保证最终一致性(弱),一个简化版的 Dynamo。 它采用类似memcached的去中心化结构,在客户端实现数据...
什么是Beansdb? Beansdb是为大型在线系统设计的分布式键值存储系统,旨在实现高可用性和易于管理。 它采用了Amazon Dynamo的想法,然后进行了简化以保留“什么是Beansdb”? Beansdb是为大型在线系统设计的分布式...
NoSQL数据库学习教程 CAP定律是NoSQL数据库存在的三大基石之一,CAP定律是指在分布式系统中,无法同时满足一致性、可用性和分区容忍性这三个属性。其中,一致性是指所有节点在同一时间看到相同的数据;可用性是指...
在豆瓣内部,BeansDB有两个集群,doubandb和doubanfs,分别用于存储小型数据(如文本信息)和中型数据(如图片、音频)。doubandb存储了约30亿条记录,9TB的数据,而doubanfs存储了约10亿条记录,150TB的数据。 ...
相比之下,BeansDB采用了去中心化的设计,每个区间都对应多个节点,通过客户端写入和读取操作实现了数据的冗余存储。BeansDB通过HashTree机制实现了快速的数据同步,大大提升了系统的可靠性和性能。 #### 大文件的...
14. BeansDB开发者:BeansDB是由豆瓣社区开发的。 15. 不是NewSQL数据库:Sybase是一个传统的关系型数据库,而不是NewSQL。 16. 不是NoSQL数据库:DB2是传统的关系型数据库。 17. 不是传统关系型数据库:HBase是...
- BeansDB是由豆瓣社区开发的,NewSQL数据库如MemSQL提供高性能的事务处理,而NoSQL数据库如Bigtable和Dynamo提供了灵活的数据模型。 4. 数据挖掘与可视化: - 数据挖掘包括数据融合、分析和决策支持,但发现的...
1. 序 2. 思想篇 CAP ...BeansDB 简介 更新 特性 性能 Nuclear 两个设计上的T ips Voldemort Dynomite Kai 未分类 Skynet Drizzle 比较 可扩展性 数据和查询模型 持久化设计 5. 应用篇 eBay 架构经验
- BeansDB是中国豆瓣社区开发的分布式存储系统。 - NewSQL数据库如MemSQL、TokuDB提供类似关系型数据库的ACID特性,但支持更大规模的数据。 - NoSQL数据库如Bigtable、Dynamo不使用传统的关系模型,适应大数据...
Dynamo的设计理念被许多分布式键值存储系统采纳,如豆瓣的BeansDB。这种分布式存储方式解决了单点故障、容错和负载均衡问题,为大规模Web应用提供了基础。 传统的LAMP(Linux、Apache、MySQL、PHP)架构在面对高...