NoSQL-大数据、大并发下的key-value数据库[整理]

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

NoSQL-大数据、大并发下的key-value数据库[整理]29二月2012,6:48下午随着NoSQL的理念越来越火,我总结一下在大数据、大并发下数据快速响应的知识,今天先开个篇,希望自己能够慢慢形成系列。这方面做的比较早的是Memcached.AnatolyVorobey和BradFitzpatrick为了提升LiveJournal.com访问速度,开发了Memcached。随着他的开源,越来越多的公司开始采用他来部署实时数据应用。2007年后,互联网的数据越来越庞大,传统的数据库模式已经无法满足大量数据的实时访问问题,而随着内存的价格越来越便宜,人们开始倾向于用内存来存储一些访问度比较高的数据。以取得更大的访问速度。Memcached的出现,也使得key-value数据库的发展快速起来。下面的各种key-value数据库,本文不做时间上的比较。1Google的LevelDBGoogle宣布将LevelDB开源,并且遵守NewBSD许可证。LevelDB是一个嵌入式的key-value数据库。它的键和关联值可以是任意的字节数组,并且按照键值排序,排序机制是可以被重载的。数据存储机制非常简单,仅仅支持Put,Get和Delete命令,然后还有前向和后向迭代遍历。数据会自动使用Snappy压缩,这是一个压缩库,Google将其用于BigTable,MapReduce和RPC中,并且在四月份宣布开源。LevelDB也有一些局限:不支持SQL查询和索引,支持多线程单进程访问,并且可以用于嵌入式设备,这将使某些项目收益,但是也会给其他的项目来带麻烦。LevelDB优化了批量写操作。它将多个修改请求有序缓存在内存中,在累计到配置文件预设置的阈值之后再写入到磁盘中。对于顺序和随机写操作,以及顺序读操作来说,它的性能非常优秀,根据Google的性能基准测试,它能在某些测试项目中得分领先SQLite两个数量级。SQLite在随机读操作中比LevelDB稍好,而在写入较大数据的时候速度两倍快于LevelDB。LevelDB同样也表现得比KyotoCabinet优秀,KyotoCabinet也是一个key-value数据库,不过Google并没有像SQLite那样在所有测试项目中均进行比较。同样,Riak进行了一些测试对比LevelDB和InnoDB,在一些测试项目中,Google的LevelDB要比InnoDB要优秀或者能达到相同性能。LevelDB是使用C++编写,一些外部的依赖库已经成功地移植到Windows、MacOSX、Android和各种Unix上。在实际的应用中,Chrome的一些实验性版本中已经使用了LevelDB,将其作为IndexDBAPI的实现。而Riak则将其用于节点级的存储。不仅如此,一家开发3D地图软件的公司UpNext也使用了这套系统。2MongoMongoDB是一种文件导向数据库,由C++撰写而成,以此来解决应用程序开发社区中的大量现实问题。2007年10月,MongoDB由10gen团队所发展。2009年2月首度推出。它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:*面向集合存储,易存储对象类型的数据。*模式自由。*支持动态查询。*支持完全索引,包含内部对象。*支持查询。*支持复制和故障恢复。*使用高效的二进制数据存储,包括大型对象(如视频等)。*自动处理碎片,以支持云计算层次的扩展性。*支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。*文件存储格式为BSON(一种JSON的扩展)。*可通过网络访问。Mongo是一个高性能,开源,模式自由(schema-free)的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值(key-value)存储方式。Mongo使用C++开发,具有以下特性:面向集合的存储:适合存储对象及JSON形式的数据。动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。自动分片以支持云级别的伸缩性(处于早期alpha阶段):自动分片功能支持水平的数据库集群,可动态添加额外的机器。模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(BinarySerializeddOcumentFormat)。MongoDB服务端可运行在Linux、Windows或OSX平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。3RedisRedis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key-value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。性能测试结果:SET操作每秒钟110000次,GET操作每秒钟81000次,服务器配置如下:Linux2.6,XeonX33202.5Ghz.stackoverflow网站使用Redis做为缓存服务器。redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。4LightCloudLightCloud是最近看到的一个比较轻巧的分布式key-value数据库,尽管这类软件已经让人觉得审美疲劳,但我仍然觉得它的设计思路值得一提。特色除开其项目主页上列出来的特点不提,我觉得还能数得上的特色有:理论上可以用任意key-value数据库做为底层存储,现在支持以tokyotyrant或者redis作为底层的存储,如果使用redis可以获得更好的性能(大概提升30%~50%)没有定制服务器端,基本上靠客户端语言来实现键值查找。优点是部署起来比较简单,缺点也是显而易见的,效率会有损失。可以很方便的移植到其它语言上,我已经在github上找到一个ruby版本,甚至还有个php版本的实现。可以方便的增加节点。结构简单,方便hack5TokyoCabinet特性1、故障转移:TokyoTyrant支持双机互为主辅模式,主辅库均可读写,服务器端保持同步;也可以实现类似MySQL主辅库同步的方式实现读写分离,主服务器写,多个从服务器读。2、兼容Memcache客户端,直接用php的newmemcache()就完全可以操作。如果需要memcache客户端的故障转移,使用$memcache-addServer()连接而不是$memcache-Connect()3、数据存储占用小,同步日志文件体积小,同步日志约为数据本身的1.3倍4、性能表现稳定出色:TCHBD速度最快,但与memcache类似需要完全内存映射。TCBDB。B+Tree索引,缓存800万条记录缓存,5G数据量,在只开128M内存,并且已经有1000的并发连接数的情况下:首次查询0.1秒级别完成,二次查询0.00x秒,约为TCHBD的85%TCTDB表结构的数据读写性能约为TCHDB的45%6FlareTokyoCabinet(TC)是日本第一大SNS网站mixi开发的,而Flare是日本第二大SNS网站green.jp开发的。Flare简单的说就是给TC添加了scale功能。他替换掉了TT部分,自己另外给TC写了网络服务器,Flare的主要特点就是支持scale能力,他在网络服务端之前添加了一个nodeserver,来管理后端的多个服务器节点,因此可以动态添加数据库服务节点,删除服务器节点,也支持failover。如果你的使用场景必须要让TC可以scale,那么可以考虑flare。flare唯一的缺点就是他只支持memcached协议,因此当你使用flare的时候,就不能使用TC的table数据结构了,只能使用TC的key-value数据结构存储。7MemcachedMemcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。关于这个东西,相信很多人都用过,本文意在通过对memcached的实现及代码分析,获得对这个出色的开源软件更深入的了解,并可以根据我们的需要对其进行更进一步的优化。末了将通过对BSM_Memcache扩展的分析,加深对memcached的使用方式理解。针对Memcached出现了类似phpmyadmin的管理系统MemAdmin8CouchDBCouchDB是什么CouchDB一种半结构化面向文档的分布式,高容错的数据库系统,其提供RESTFulHTTP/JSON接口。其拥有MVCC特性,用户可以通过自定义Map/Reduce函数生成对应的View。在CouchDB中,数据是以JSON字符的方式存储在文件中。特性RESTFulAPI:HTTPGET/PUT/POST/DELETE+JSON基于文档存储,数据之间没有关系范式要求每个数据库对应单个个文件(以JSON保存),HotbackupMVCC(Multi-Version-Concurrency-Control),读写均不锁定数据库用户自定义View内建备份机制支持附件使用Erlang开发(更多的特性)应用场景在我们的生活中,有很多document,比如信件,账单,笔记等,他们只是简单的信息,没有关系的需求,我们可能仅仅需要存储这些数据。这样的情况下,CouchDB应该是很好的选择。当然其他使用关系型数据库的环境,也可以使用CouchDB来解决。根据CouchDB的特性,在某些偶尔连接网络的应用中,我们可以用CouchDB暂存数据,随后进行同步。也可以在Cloud环境中,作为分布式的数据存储。CouchDB提供给予HTTP的API,这样所有的常见语言都可以使用CouchDB。使用CouchDB,意味着我们不需要在像使用RMDBS一样,在设计应用前首先设计负责数据Table。我们的开发更加快速,灵活。9VoldemortVoldemortisadistributedkey-valuestoragesystemDataisautomaticallyreplicatedovermultipleservers.DataisautomaticallypartitionedsoeachservercontainsonlyasubsetofthetotaldataServerfailureishandledtransparentlyPluggableserializationissupportedtoallowrichkeysandvaluesincludinglistsandtupleswithnamedfields,

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功