`

满足极高读写性能需求的Key-Value数据库

阅读更多

TokyoTyrant
MemcacheDB
TreapDB
Redis
LightCloud
Berkeley DB
MongoDB
Cassandra
Voldemort

 

 

一、满足极高读写性能需求的Key-Value数据库

      高性能Key-Value数据库的主要特点就是具有极高的并发读写性能,Redis,Tokyo Cabinet, Flare,这3个Key-Value DB都是用C编写的,他们的性能都相当出色,但出了出色的性能,他们还有自己独特的功能:

 

1、Redis

    Redis是一个很新的项目,刚刚发布了1.0版本。Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统 统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是我知道的性能最快的Key-Value DB。

    Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存List链表和Set集合的数据结构,而且还支持对List进行各种操作,例如 从List两端push和pop数据,取List区间,排序等等,对Set支持各种集合的并集交集操作,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。

    Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,并且它没有原生的可扩展机制,不具有scale(可扩展)能 力,要依赖客户端来实现分布式读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。目前使用Redis的网站有 github,Engine Yard。

2、Tokyo Cabinet和Tokoy Tyrant

    TC和TT的开发者是日本人Mikio Hirabayashi,主要被用在日本最大的SNS网站mixi.jp上,TC发展的时间最早,现在已经是一个非常成熟的项目,也是Kye-Value 数据库领域最大的热点,现在被广泛的应用在很多很多网站上。TC是一个高性能的存储引擎,而TT提供了多线程高并发服务器,性能也非常出色,每秒可以处理 4-5万次读写操作。

   TC除了支持Key-Value存储之外,还支持保存Hashtable数据类型,因此很像一个简单的数据库表,并且还支持基于column的条件 查询,分页查询和排序功能,基本上相当于支持单表的基础查询功能了,所以可以简单的替代关系数据库的很多操作,这也是TC受到大家欢迎的主要原因之一,有 一个Ruby的项目miyazakiresistance将TT的hashtable的操作封装成和ActiveRecord一样的操作,用起来非常爽。

   TC/TT在mixi的实际应用当中,存储了2000万条以上的数据,同时支撑了上万个并发连接,是一个久经考验的项目。TC在保证了极高的并发读 写性能的同时,具有可靠的数据持久化机制,同时还支持类似关系数据库表结构的hashtable以及简单的条件,分页和排序操作,是一个很棒的NoSQL 数据库。

   TC的主要缺点是在数据量达到上亿级别以后,并发写数据性能会大幅度下降,NoSQL: If Only It Was That Easy提到,他们发现在TC里面插入1.6亿条2-20KB数据的时候,写入性能开始急剧下降。看来是当数据量上亿条的时候,TC性能开始大幅度下降, 从TC作者自己提供的mixi数据来看,至少上千万条数据量的时候还没有遇到这么明显的写入性能瓶颈。

这个是Tim Yang做的一个Memcached,Redis和Tokyo Tyrant的简单的性能评测,仅供参考

3、Flare

   TC是日本第一大SNS网站mixi开发的,而Flare是日本第二大SNS网站green.jp开发的,有意思吧。Flare简单的说就是给TC添加了 scale功能。他替换掉了TT部分,自己另外给TC写了网络服务器,Flare的主要特点就是支持scale能力,他在网络服务端之前添加了一个 node server,来管理后端的多个服务器节点,因此可以动态添加数据库服务节点,删除服务器节点,也支持failover。如果你的使用场景必须要让TC可 以scale,那么可以考虑flare。

flare唯一的缺点就是他只支持memcached协议,因此当你使用flare的时候,就不能使用TC的table数据结构了,只能使用TC的key-value数据结构存储。

 

二、满足海量存储需求和访问的面向文档的数据库:MongoDB,CouchDB

    面向文档的非关系数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能。MongoDB是用C++开发的,而CouchDB则是Erlang开发的:

1、MongoDB

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似 json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几 乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

   Mongo主要解决的是海量数据的访问效率问题,根据官方的文档,当数据量达到50GB以上的时候,Mongo的数据库访问速度是MySQL的10 倍以上。Mongo的并发读写效率不是特别出色,根据官方提供的性能测试表明,大约每秒可以处理0.5万-1.5次读写请求。对于Mongo的并发读写性 能,我也打算有空的时候好好测试一下。

因为Mongo主要是支持海量数据存储的,所以Mongo还自带了一个出色的分布式文件系统GridFS,可以支持海量的数据存储,但我也看到有些评论认为GridFS性能不佳,这一点还是有待亲自做点测试来验证了。

   最后由于Mongo可以支持复杂的数据结构,而且带有强大的数据查询功能,因此非常受到欢迎,很多项目都考虑用MongoDB来替代MySQL来实 现不是特别复杂的Web应用,比方说why we migrated from MySQL to  MongoDB就是一个真实的从MySQL迁移到MongoDB的案例,由于数据量实在太大,所以迁移到了Mongo上面,数据查询的速度得到了非常显著 的提升。

   MongoDB也有一个ruby的项目MongoMapper,是模仿Merb的DataMapper编写的MongoDB的接口,使用起来非常简单,几乎和DataMapper一模一样,功能非常强大易用。

2、CouchDB

   CouchDB现在是一个非常有名气的项目,似乎不用多介绍了。但是却对CouchDB没有什么兴趣,主要是因为CouchDB仅仅提供了基于HTTP REST的接口,因此CouchDB单纯从并发读写性能来说,是非常糟糕的,这让我立刻抛弃了对CouchDB的兴趣。

 

三、满足高可扩展性和可用性的面向分布式计算的数据库:Cassandra,Voldemort

    面向scale能力的数据库其实主要解决的问题领域和上述两类数据库还不太一样,它首先必须是一个分布式的数据库系统,由分布在不同节点上面的数据 库共同构成一个数据库服务系统,并且根据这种分布式架构来提供online的,具有弹性的可扩展能力,例如可以不停机的添加更多数据节点,删除数据节点等 等。因此像Cassandra常常被看成是一个开源版本的Google BigTable的替代品。Cassandra和Voldemort都是用Java开发的:

 

1、Cassandra

    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多个节点构成的系统,其并发性 能取决于整个系统的节点数量,路由效率,而不仅仅是单节点的并发负载能力。

 

2、Voldemort

   Voldemort是个和Cassandra类似的面向解决scale问题的分布式数据库系统,Cassandra来自于Facebook这个SNS网 站,而Voldemort则来自于Linkedin这个SNS网站。说起来SNS网站为我们贡献了n多的NoSQL数据库,例如 Cassandar,Voldemort,Tokyo Cabinet,Flare等等。Voldemort的资料不是很多,因此没有特别仔细去钻研,Voldemort官方给出Voldemort的并发读写 性能也很不错,每秒超过了1.5万次读写。

   从Facebook开发Cassandra,Linkedin开发Voldemort,我们也可以大致看出国外大型SNS网站对于分布式数据库,特 别是对数据库的scale能力方面的需求是多么殷切。前面提到,web应用的架构当中,web层和app层相对来说都很容易横向扩展,唯有数据库是单点 的,极难scale,现在Facebook和Linkedin在非关系型数据库的分布式方面探索了一条很好的方向,这也是为什么现在Cassandra这 么热门的主要原因。

 

分享到:
评论

相关推荐

    Redis 是一个高性能的key-value数据库 它 的出现,很大程度补偿了memcached这类keyvalue存储的不足

    7. **性能卓越**:Redis完全驻留在内存中,读写速度极快。对于读写密集型的应用,Redis能提供比传统数据库更快的响应速度。 8. **API丰富**:Redis提供了多种编程语言的客户端库,如Python、Java、Ruby、PHP等,...

    redis 可持久化 Key-Value数据库

    作为一款内存数据库,Redis可以实现极快的读写速度,但同时也提供了可持久化功能,以确保数据在系统崩溃或重启后不会丢失。 Redis的持久化机制主要有两种方式:RDB(Redis Database Backup)和AOF(Append Only ...

    一种多存储引擎Key-Value分布式内存数据库的研究与实现.pdf

    而对于某些对读写性能要求极高的业务,比如需要快速响应的优惠活动,可以使用leveldb引擎,它在处理大量小记录时具有更好的性能表现。 综上所述,本文所研究与实现的多存储引擎Key-Value分布式内存数据库结合了当前...

    高性能K-V数据库 Aerospike.zip

    键值数据库是一种NoSQL数据库类型,其中数据以键(key)和值(value)对的形式存储,键用于唯一标识每个记录,值则可以是任何类型的数据。这种数据库结构非常适合于快速查找和访问数据,尤其适用于高并发的在线事务...

    常见数据库场景分析

    ###### 2.1 满足极高读写性能需求的Key-Value数据库 - **Redis** - **本质**:基于内存的Key-Value数据库,支持持久化。 - **特色**: - 纯内存操作,性能非常高。 - 支持多种数据类型,如字符串、列表、集合等...

    Practical Tips for Using MySQL as a Scalable Key-Value Store

    - **高性能**:MySQL能够处理大量并发请求,确保数据的快速读写。 - **事务持久性和恢复**:通过ACID事务支持确保数据的一致性和可靠性。 - **复制以实现高可用性**:利用主从复制机制来提高系统的可靠性和可用性。 ...

    no关系型数据库,nosql

    例如,Redis适合需要极高读写性能和低延迟的场景,如缓存和计数器应用;MongoDB适用于需要处理复杂查询和大量文档数据的应用,如内容管理和日志分析;Tokyo Cabinet/Tokyo Tyrant适合需要高性能、小数据量的键值存储...

    Go-Redix一个非常快速的持久化支持的KV存储使用与redis相同的协议

    - 高性能:Go-Redix利用Go语言的并发模型和原生的内存管理,实现了极高的读写速度,为实时应用提供了强大的支持。 - 持久化:Go-Redix支持数据持久化,即使在服务重启后,也能恢复先前存储的数据,确保了数据的...

    NOSQL内存数据库选型报告x.docx

    1. **Key-Value数据库**:这类数据库特别适用于需要极高读写性能的场景,如Redis、Tokyo Cabinet、MemcachedDB等。它们通过将数据存储在内存中来提高性能,其中Redis和MemcachedDB采用C/S架构,而Tokyo Cabinet则是...

    社交网数据库技术分析

    这类服务的特点在于支持庞大的用户群体及其之间的互动交流,因此对后端数据库系统提出了极高的要求。传统的数据库管理系统在面对如此大规模的数据量和复杂度时显得力不从心。本文旨在探讨适用于社交网络的几种数据库...

    7.3-键值对数据库-1.pptx

    Redis是KV类型的内存数据库,通过Key-Value的单值不同类型来区分,支持的数据类型包括字符串类型(String)、哈希表类型(Hash)、链表类型(List)、集合类型(Set)和有序集合类型(ordered set,zset)。...

    基于内存数据库的分布式数据库架构.pdf

    内存型关系数据库结合了关系数据库和内存数据库的优势,将数据存储在内存中,同时提供关系数据库的结构化查询语言(SQL)支持和事务处理能力,适用于对读写性能要求极高的应用场景。 文章通过对比分析传统磁盘...

    Redis实战

    - **性能:** Redis是基于内存的操作,因此具有极高的读写速度。 - **提供API的语言:** Redis支持多种编程语言,如Java、Python、PHP等。 - **适用场合:** Redis适用于需要高速数据存取的应用程序,如实时数据分析...

    NoSQL数据库探讨之一-为什么要用非关系数据库?.pdf

    而NoSQL数据库,如Key-Value存储系统Redis、Tokyo Cabinet和Flare,通过内存存储和高效的键值查找算法,能够实现极高的并发读写性能。 其次,NoSQL数据库在处理海量数据存储方面表现出色。例如,Facebook、Twitter...

    2016最新redis视频教程

    综上所述,Redis作为一个高性能的Key-Value数据库,在现代软件架构中扮演着重要角色。无论是对于企业还是个人开发者而言,掌握Redis都是非常有价值的。通过上述知识点的介绍,希望能帮助读者更好地理解和学习Redis...

    PGConf.CN2019大会资料 培训PPT--4-李章梅--HugeGraph图数据库介绍及使用PostgreSQL作为后端存储

    - **InMemory**:内存存储,适用于需要极高速度但数据持久性较低的场景。 - **ScyllaDB**:一种兼容Cassandra API的高性能NoSQL数据库。 - **MySQL**:传统的关系型数据库,也可以作为后端存储之一。 ### 3. 使用...

    key-value-system:单机键值存储系统

    这种系统设计的主要目标是提供高并发的读写性能,以及对大量无结构或半结构化数据的快速访问。在单机环境下,键值存储系统依然能发挥其优势,为开发者提供简单、高效的存储方式。下面将详细探讨单机键值存储系统的...

    Redis实战《红丸出品》

    Key-Value Store因其简单的键值对模型、高读写性能、易于水平扩展等特点,在处理大规模互联网应用和云存储方面表现出色。Redis作为其中的佼佼者,凭借其丰富的数据结构和低延迟响应,在缓存、会话管理、消息队列等...

    第9章互联网分布式系统的数据资源存储与管理KeyValue存储模式.ppt

    - **高性能(Performance)**:提供极高的读写性能。 ##### 9.2.4 相关关键技术 - **数据划分**:通过分片等方式实现数据的水平划分,提高系统的可扩展性。 - **复制和一致性保障**:通过数据复制机制提高系统的可用...

Global site tag (gtag.js) - Google Analytics