`

分布式key-value存储方案介绍:Cassandra,LightCloud,TokyoCabinet

    博客分类:
  • Java
 
阅读更多
  Cassandra是一个非常可靠的大规模分布式存储系统。高度可伸缩的、一致的、分布式的结构化key-value存储方案,Facebook目前在使用此系统。

开发语言: Java
授权协议: Apache License 2.0
项目主页: http://incubator.apache.org/cassandra/
文档地址: http://wiki.apache.org/cassandra/GettingStarted
下载地址:http://hudson.zones.apache.org/hudson/job/Cassandra/lastSuccessfulBuild/artifact/cassandra/build/
Cassandra 项目是Facebook在2008年开源出来的,随后Facebook自己使用Cassandra的另外一个不开源的分支,而开源出来的 Cassandra主要被Amazon的Dynamite团队来维护,并且Cassandra被认为是Dynamite2.0版本。目前除了Facebook之外,twitter和digg.com都在使用Cassandra。Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。我看到有文章说Facebook的Cassandra群集有超过100台服务器构成的数据库群集。Cassandra也支持比较丰富的数据结构和功能强大的查询语言,和MongoDB比较类似,查询功能比MongoDB稍弱一些,twitter的平台架构部门领导Evan Weaver写了一篇文章介绍Cassandra:http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/ ,有非常详细的介绍。Cassandra以单个节点来衡量,其节点的并发读写性能不是特别好,有文章说评测下来Cassandra每秒大约不到1万次读写请求,我也看到一些对这个问题进行质疑的评论,但是评价Cassandra单个节点的性能是没有意义的,真实的分布式数据库访问系统必然是n多个节点构成的系统,其并发性能取决于整个系统的节点数量,路由效率,而不仅仅是单节点的并发负载能力。

http://www.oschina.net/p/lightcloud Plurk 前陣子放出 LightCloud,試著解決 Amazon 所提出的 Dynamo 用某些複雜方法解決問題。比起 Dynamo 的優點是:

•使用 Tokyo Cabinet 當底層,這是目前最快的 key-value database 之一,而且檔案也小。
•因為使用 Tokyo Cabinet,所以可以用他的 master-master replication 取代 Dynamo 內的 replication,也就是固定以 n = 2 解決問題,以 node 本身的 HA 架構解決 Dynamo 裡面的 consistent 問題。(在 Dynamo 裡透過很多方法解決,變成 eventally consistent)
•增加機器造成資料需要移動的問題是把 hash ring 拆成兩個,一個 lookup ring,另外一個 storage ring,用兩次 query 解決。這個部份我看不懂他的解法,還要再找資料看他怎麼解的。
這個架構如果可行 (要看他解決 routing problem 的解法是否可以達到 scalability 特性),那麼就有很多有趣的應用可以在這個架構上跑。(直接當 filesystem 來放資料)

开发语言: C/C++ Python Lua
操作系统: Linux
项目主页: http://opensource.plurk.com/LightCloud/

http://www.162cm.com/archives/681.html Tokyo Cabinet的作者叫Mikio Hirabayashi.用师兄覃健祥的话说,作者很猛很持久.这不,作者出了一个QDBM(类似gdbm,ndbm,sdbm,mdbm的一个dbm),estraier,Hyperestraier(前面介绍过,是一个支持中文等东亚文字,可以p2p架构的搜索引擎实现)等一系列c软件,现在又出了一个:Tokyo Cabinet.
Tokyo Cabinet 项目主页:http://tokyocabinet.sourceforge.net/
简介(翻译成中文了)
Tokyo Cabinet 是一个DBM的实现。这里的数据库由一系列key-value对的记录构成。key和value都可以是任意长度的字节序列,既可以是二进制也可以是字符 串。这里没有数据类型和数据表的概念。当做为Hash表数据库使用时,每个key必须是不同的,因此无法存储两个key相同的值。提供了以下访问方法:提 供key,value参数来存储,按key删除记录,按key来读取记录,另外,遍历key也被支持,虽然顺序是任意的不能被保证。这些方法跟Unix标准的DBM,例如GDBM,NDBM等等是相同的,但是比它们的性能要好得多(因此可以替代它们)。当按B+树来存储时,拥用相同key的记录也能被存储。像hash表一样的读取,存储,删除函数也都有提供。记录按照用户提供的比较函数来存储。可以采用顺序或倒序的游标来读取每一条记录。依照这个原理,向前的字符串匹配搜索和整数区间搜索也实现了。另外,B+树的事务也是可用的。
As for database of fixed-length array, records are stored with unique natural numbers. It is impossible to store two or more records with a key overlaps. Moreover, the length of each record is limited by the specified length. Provided operations are the same as ones of hash database.
对于定长的数组,记录按自然数来标记存储。不能存储key相同的两条或更多记录。另外,每条记录的长度受到限 制。读取方法和hash表的一样。Tokyo Cabinet是用C写的,同时提供c,perl,ruby,java的API。Tokyo Cabinet在提供了POSIX和C99的平台上都可用,它以GNU Lesser Public License协议发布。

[...] 前面一篇介绍了Tokyo Cabinet,一个DBM. 作者在写完Tokyo Cabinet之后,立马又写了一个应用:Tokyo Tyrant. 这个东东被定义为:一个网络存储,读取接口。网络时代,加上这么一个功能,马上就可以冠上分布式的标签了。 Tokyo Tyrant基于Tokyo Cabinet实现,提供了HTTP协议和memcache 协议的读取/写入等接口。这 不仅仅是贴上了分布式的标签而已:有了http协议,在大公司复杂网络中部署时很多事情简单多了,因为http端口一般不需要专门申请路由了,而其他端口 上部署应用时,要走一堆流程。而memcache协议则解决了很多人尝试用memcache来存储东西时无法持久存储的问题。有了这两个接口,应用 Tokyo Tyrant时,你都不需要调API,php中用来连Memcached的代码直接使用就行。 张宴同学写得比较详细,更实用.请移步研究。

http://hi.baidu.com/ah__fu/blog/item/0f53ff4cfa493af0d72afc99.html Tokyo Cabinet: 资料管理系统分支中的恐龙之翼

   这个奇怪的标题加无聊的比喻来自与对“The Dinosaur Wing of the DBM Forks”的直译,这是TokyoCabinet的作者Mikio Hirabayashi对自己的作品的宣传语。

DBM这个缩写对于非*NIX血统出生的程序员来说的确有些陌生,DBM是database manager的简写,部分网站翻译为资料管理系统。在*NIX 系统中,似乎已是古老经典的一种key-value存储系统了。
这里有一些经典的DBM系统的介绍:《GDBM/NDBM使用介紹》http://blog.chinaunix.net/u/9861/showart_637998.html
此外,开源数据库界出名的Berkeley DB其实也是DBM系统的一种:http://baike.baidu.com/view/1281930.htm
与TokyoCabinet的功能一模一样的MemcachedDb的持久化存储引擎就是用的Berkeley DB。

下面是“恐龙之翼”这段话的原文:(from: http://tokyocabinet.sourceforge.net/spex-en.html)


    Tokyo Cabinet is developed as the successor of GDBM and QDBM on the following purposes. They are achieved and Tokyo Cabinet replaces conventional DBM products.

•improves space efficiency : smaller size of database file.
•improves time efficiency : faster processing speed.
•improves parallelism : higher performance in multi-thread environment.
•improves usability : simplified API.
•improves robustness : database file is not corrupted even under catastrophic situation.
•supports 64-bit architecture : enormous memory space and database file are available.
    As with QDBM, the following three restrictions of traditional DBM: a process can handle only one database, the size of a key and a value is bounded, a database file is sparse, are cleared. Moreover, the following three restrictions of QDBM: the size of a database file is limited to 2GB, environments with different byte orders can not share a database file, only one thread can search a database at the same time, are cleared.

    Tokyo Cabinet runs very fast. For example, elapsed time to store 1 million records is 0.7 seconds for hash database, and 1.6 seconds for B+ tree database. Moreover, the size of database of Tokyo Cabinet is very small. For example, overhead for a record is 16 bytes for hash database, and 5 bytes for B+ tree database. Furthermore, scalability of Tokyo Cabinet is great. The database size can be up to 8EB (9.22e18 bytes).

TokyoCabinet仅仅只是一个DBM系统吗?不尽然,从TokyoCabinet支持的数据引擎来看,功能还更加丰富。TokyoCabinet的数据引擎提供的API有:
·the on-memory hash database API
·the on-memory tree database API
·the hash API
·the B+ tree database API
·the fixed-length database API
·the table database API
假如去掉持久化存储,只使用on-memory hash和on-memory tree两种引擎,则TokyoCabinet的功能与Memcached一致。希望能有高手做一个对比测试,看看不要持久化的TokyoCabinet与Memcached在set/get性能,内存占用,并发处理三个方面的性能有何差别。当然,TokyoCabinet与Memcached的有些功能是有差别的:
·Memcached里,每个key都有过期时间,而TokyoCabinet没有这个功能;
·Memcached里,内存空间满后,插入会失败,而TokyoCabinet在内存满后会丢弃旧的记录;(这个需验证,根据文档得出这个结论,还没实验)
·Memcached里,PHP的Memcached客户端实现了对value的gzip压缩,Memcached服务器端是不支持GZIP压缩的;而TokyoCabinet中,支持多种压缩方式,但是究竟是服务器端实现了压缩,还是客户端实现了压缩,还不得而知;(如果服务端实现了压缩解压缩,则对带宽无法降低)

再看table database这种方式的存储引擎,这不就是内存表嘛,还支持多个索引,更爽了。这个功能是MemcachedDb无法实现的。

其实,在WEB 2.0的应用中,对于数据不敏感的场合,都可以用TokyoCabinet+TokyoTyrant代替Memcached+MySQL,TokyoCabinet的很多功能都将数据持久化做得相当可靠:
1、在一个进程内同时实现cache和持久化,比起Memcached+MySQL来说,更加方便;(一个例外的问题是,通常请求在Memcached和 MySQL中都无法命中的话,也会cache无法命中的信息,而TokyoCabinet对无法命中的请求也会cache吗?)
2、双机冗余,两台服务器之间自动复制数据,且访问任意一台都可以;(在ttserver的参数中配置即可,相当方便。对于TokyoCabinet的同步能力,网上暂无生动的案例,特别是灾难发生时的恢复能力。如何像一个数据库一样更可靠?TokyoCabinet还需要给使用者更多的案例还增强信心)
3、热备功能:在ttserver上实现了,可以端发起一个命令即实现了热备。
4、冷备:还没发现有这样的功能。
5、数据导入:可以将TSV格式的文本导入到TokyoCabinet中。
6、数据导出:已有的API文档中还未发现这样的功能,不过可以自己写一个基于客户端API的低性能实现。
7、update log日志的导入导出:有这样的功能。
有了以上功能,对于数据的可靠性也有了一定保证,又安全又快速,很值得使用!!!

http://hi.baidu.com/llaa27/blog/item/df7e3e8f710a7ee9f11f3663.html Tokyo Cabinet 是日本人 Mikio Hirabayashi开发的一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍。Tokyo Cabinet 是一个DBM的实现【虎.无名:是Mikio另一个产品QDBM的继承者】。这里的数据库由一系列key-value对的记录构成。key和value都可以是任意长度的字节序列,既可以是二进制也可以是字符串。这里没有数据类型和数据表的概念。 当做为Hash表数据库使用时,每个key必须是不同的,因此无法存储两个key相同的值。提供了以下访问方法:提供key,value参数来存储,按 key删除记录,按key来读取记录,另外,遍历key也被支持,虽然顺序是任意的不能被保证。这些方法跟Unix标准的DBM,例如GDBM,NDBM 等等是相同的,但是比它们的性能要好得多(因此可以替代它们)。当按B+树来存储时,拥用相同key的记录也能被存储。像hash表一样的读取,存储,删 除函数也都有提供。记录按照用户提供的比较函数来存储。可 以采用顺序或倒序的游标来读取每一条记录。依照这个原理,向前的字符串匹配搜索和整数区间搜索也实现了。另外,B+树的事务也是可用的。
As for database of fixed-length array, records are stored with unique natural numbers. It is impossible to store two or more records with a key overlaps. Moreover, the length of each record is limited by the specified length. Provided operations are the same as ones of hash database.
对于定长的数组,记录按自然数来标记存储。不能存储key相同的两条或更多记录。另外,每条记录的长度受到限 制。读取方法和hash表的一样。Tokyo Cabinet是用C写的,同时提供c,perl,ruby,java的API。Tokyo Cabinet在提供了POSIX和C99的平台上都可用,它以GNU Lesser Public License协议发布。
Tokyo Tyrant 是由同一作者开发的 Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP协议进行数据交换。Tokyo Tyrant 加上 Tokyo Cabinet,构成了一款支持高并发的分布式持久存储系统,对任何原有Memcached客户端来讲,可以将Tokyo Tyrant看成是一个Memcached,但是,它的数据是可以持久存储的。
上面是我从网上摘录的部分介绍~~
用Tokyo Tyrant 加上 Tokyo Cabinet,他们支持双向的M/M同步,也支持单向的M/S同步,可以为网站提供非常可靠的持久化的分布式数据高速Cache,没有了Memcached对内存大小的依赖,而且速度还是飞快.计算一下,按100w每秒的速度,那么每天可以支持最高100w*1440*60 = 8640000w的查询总量.这样的速度对于任何一个网站都是足够用的了
分享到:
评论

相关推荐

    分布式key-value存储系统入门

    分布式key-value存储系统入门,详细介绍cassandra系统

    Apache Cassandra是一套开源分布式Key-Value存储系统

    作为一款Key-Value存储系统,Cassandra在设计时就考虑了大规模数据存储和处理的需求,因此它非常适合那些需要处理PB级别数据、对数据可用性和读写性能有高要求的应用场景。 在Cassandra的设计哲学中,它强调了数据...

    分布式模拟题题库-题目与答案1

    - Key-Value存储:介绍如Redis、Memcached等键值存储系统,它们在缓存和快速访问数据方面的角色。 4. **分布式服务** - 微服务架构:解释微服务架构如何将大型应用拆分为小而独立的服务,提高开发效率和可扩展性...

    spark-streaming-examples:使用 Cassandra 统计事件的简单火花流示例

    本示例从开始,并添加了以使用 Cassandra 作为持久存储。 准备 安装 Docker 按照的说明操作。 安装 Cassandra Docker 从拉取 Cassandra Docker 镜像。 $ docker pull cassandra:2.1 启动一个 Cassandra Docker ...

    藏经阁-Cassandra总体介绍.pdf

    2. NoSQL数据库:Cassandra是一款NoSQL数据库,不遵循传统的关系数据库管理系统(RDBMS)的模式,而是使用Key-Value、Column-Family和Document等数据模型。 3. 高可用性:Cassandra采用分布式系统架构和复制机制,...

    Cassandra(apache-cassandra-3.11.11-bin.tar.gz)

    用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等知名Web 2.0网站所...

    Redis实战

    **1.1 Key-Value存储系统简介** 在探讨Redis之前,我们先来了解下Key-Value存储系统的基本概念及其应用场景。 - **Voldemort:** 一个分布式键值存储系统,主要用于处理海量数据,并能够提供低延迟的数据访问服务...

    docker-hazelcast-mapstore-cassandra:使用 Cassandra 地图存储运行的 docker multinode hazelcast

    这个项目创建了一个 docker 镜像来运行 Hazelcast 和一个 Cassandra 地图存储。 先决条件 JDK 8 Maven 3.1.0 或更新版本 卡桑德拉 2.1.2 码头工人 1.5 建造 克隆 git clone ...

    bitnami-docker-cassandra-exporter:Bitnami Cassandra导出器Docker映像

    什么是Cassandra出口商? Cassandra导出器是一个独立的应用程序,可通过Prometheus友好端点导出Apache Cassandra指标。 TL; DR $ docker run --name cassandra-exporter bitnami/cassandra-exporter:latest 为什么...

    workshop-spring-data-cassandra:使用Spring Data Cassandra构建Todolist

    今天,我们将使用Apache Cassandra:trade_mark:中带有Spring Boot和Spring Data的存储来开发著名的TodoApplication后端。 :information: Information ----------------- :laptop: There is nothing preventing you...

    分布式模拟题题库-纯题自测1

    3. 分布式存储: - 分布式文件系统(如HDFS)的架构和操作流程。 - NoSQL数据库(如MongoDB、Cassandra)的特点和使用场景。 - 数据复制策略:单活、主从复制、多副本、环形复制等。 4. 分布式计算: - ...

    基于Cassandra的实时气象数据分布式存储系统.pdf

    该系统采用Cassandra作为分布式存储解决方案,旨在满足气象数据存储的高可用性和性能要求。 1. Cassandra关键技术点 Cassandra是一种开源的分布式NoSQL数据库系统,基于一致性哈希算法的P2P环形结构。该结构使得每...

    Windows下的Cassandra 安装图文教程

    其主要功能比 Dynomite(分布式的 Key-Value 存储系统)更丰富,但支持度却不如文档存储 MongoDB。Cassandra 最初由 Facebook 开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库,以 Amazon 专有的...

    分布式系统-原理与范例

    5. **云存储服务**:如Amazon S3,提供可靠的分布式存储解决方案。 6. **分布式文件系统**:如Hadoop HDFS,支持对大规模数据的高效处理。 7. **分布式缓存**:如Memcached、Redis,用于提高数据读取速度。 8. **...

    Apache Cassandra存储系统 v4.1.1 GA

    Apache Cassandra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于储存特别大的数据。 主要特性: 分布式 基于column的结构化 高伸展性 Cassandra的主要特点就是它不是一个数据库,而是由一堆...

    《Redis实战》电子书

    - **大规模的互联网应用**:Key-Value Store可以轻松扩展到数百甚至数千台服务器上,为大型网站提供支持。 - **云存储**:随着云计算的发展,Key-Value Store因其易于扩展和管理的特点,在云存储领域得到了广泛应用...

    bitnami-docker-cassandra:用于Cassandra的Bitnami Docker映像

    是一个免费的开源分布式数据库管理系统,旨在处理许多商用服务器上的大量数据,提供高可用性而没有单点故障。 Cassandra通过跨无主复制的异步无主复制技术,为跨多个数据中心的集群提供了强大的支持,从而为所有...

    Redis实战《红丸出品》

    - **Voldemort**:一个分布式Key-Value存储系统,设计用于处理大规模的数据访问需求,强调数据一致性。 - **Dynamo**:亚马逊开发的分布式Key-Value存储系统,以其高可用性和可扩展性著称,是NoSQL运动的先驱之一。 ...

    《Redis实战》

    #### 一、Key-Value存储系统简介与Redis的选择 **1.1 Key-Value存储系统简介** - **Voldemort**: 一个分布式键值存储系统,最初由LinkedIn开发,用于处理大规模数据读写操作。它强调一致性、高可用性和可扩展性。 ...

    node-cassandra-driver-mock:cassandra-driver 节点模块的基本模拟

    节点-cassandra-driver-mock cassandra-driver 节点模块的基本模拟。 真的,它只是记录了请求和连接的总数。 安装 npm install -save-dev cassandra-driver-mock 用法 // Mock must be required before cassandra-...

Global site tag (gtag.js) - Google Analytics