<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IT妖怪 &#187; 数据库</title>
	<atom:link href="http://blog.ityao.com/archives/category/backend/%e6%95%b0%e6%8d%ae%e5%ba%93/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.ityao.com</link>
	<description>热爱生活，热爱程序</description>
	<lastBuildDate>Wed, 03 Aug 2011 02:56:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>闲谈分布式key-value存储服务nuclear及其他</title>
		<link>http://blog.ityao.com/archives/559</link>
		<comments>http://blog.ityao.com/archives/559#comments</comments>
		<pubDate>Mon, 29 Mar 2010 08:02:58 +0000</pubDate>
		<dc:creator>零蛋</dc:creator>
				<category><![CDATA[JAVA EE]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[服务端技术]]></category>
		<category><![CDATA[nuclear]]></category>
		<category><![CDATA[人人网]]></category>

		<guid isPermaLink="false">http://blog.ityao.com/?p=559</guid>
		<description><![CDATA[现在很多国内公司都纷纷开始了key-value的nosql存储方式，然而，从什么时候开始key-value会变得这么流行呢？是风靡一时，还是顺应时代的潮流？前后数一数，有豆瓣网的beandb、有新浪的SDD、小道消息还有腾讯的TDB以及人人网的nuclear。再数国外，吹起这阵风的原因是亚马逊的一篇文档，这篇文档讲述了在亚马逊的S3服务中所使用的存储系统dynamo实现方式，但遗憾的是dynamo并不开源。紧随其后，facebook来了位号称是当年亚马逊dynamo的开发人员之一的同志，实现了facebook的cassandra，并且值得表扬的是还将其开源了。与此同时，相同理论下产生的，还有linkedin的voldemort系统。 百家争鸣还是百家讲坛 分布式存储的目标，是解决大规模数据在数据量不断增长的情况下，让服务更加稳定，更容易扩展。 其主要具备以下几个特点： 1.高可靠性：系统能够长时间高效运行不迭机。严格的说即使坏了一部分机器也没事。 2.可扩展性：可以随意增加减少机器，不用担心额外的数据损失。 3.负载均衡：要保证每个节点的数据都是负载均衡的，不出现集中负载到一个节点的情况。 4.一致性：因为是分布式的节点，就需要保证节点与节点之间保存数据的一致。 鱼与熊掌不可兼得，这几点，往往完成了其中几点就会损失另外一点，要全部达到完美，是一件非常困难的事情。 在国内的几个存储来看，基本都是只实现了其中的一部分，再按照自己业务的需求，来加强其中更为关心的建设。 beansdb的最终一致性通过哈希树实现快速完整数据同步（短时间内数据可能不一致）；可以在不中断服务的情况下进行容量扩展；异步IO和高性能的KeyValue数据TokyoCabinet：通过N,W,R进行配置（这点其实是dynamo的文档里的方案，并非beansdb所创）；Memcache兼容协议，大量可用客户端。sdd也大同小异。 Nuclear完成了这些功能，并且可以适配到mysql\tc\bdb等存储引擎之上。 为什么已经有开源的项目，还要去自己实现呢？简单的说，twitter敢用，你敢用吗？ 分布式key-value存储之所以稳定的原因 从设计之初，注定这个系统会很稳定。为什么呢，主要是下面几点： 1.dynamo文档中的NWR的观点，可以让节点在损坏的情况下也能稳定如新。基本上这些系统都实现了。 2.dynamo文档中的两层数据节点的观点，可以让各节点在大负载的情况下负载均衡。部分实现了这一点。 3.底层存储的时候是key-value的读和取，只有一个维度的底层操作，对引擎来说，所有的操作都是可计算时间的。这一点的意思是说，假设都是MYSQL的底层存储，这个系统只会有一堆的select value form table where key=num这样的查询，而不会出现select * from table where key in(num1,num2,num3….)这样的查询，这两个查询不同的地方在于，如果都是1000次的查询，那么前一条的时间是可以准确预估的，而后一条取决于mysql底层实现的逻辑，而这个逻辑对上层是不可见的。 更多不明原因。。。 适合使用的范围 这套系统也不是放之四海而皆准的东西，如果说您的系统有如下的特征，可以考虑考虑： 1.数据插入后不需要各维度的查询。 2.数据不需要100%精确立即展示。 更多不明特点。 总结 其实这个系统，在过十亿的数据量下才有意思。 本文作者： 54chen(陈臻)，人人网分布式存储研究人员，业余时间混迹于各技术组织且乐此不疲。目前关注实施PHP培训。对flex等前端技术有一点研究。 个人技术站点:http://www.54chen.com/ 。可以通过电子邮件 czhttp@gmail.com 联系到他。 [文中所提及的链接] beansDB:http://code.google.com/p/beansdb/ SDD:http://code.google.com/p/sina-sdd/ Nuclear:http://ugc.renren.com S3:http://aws.amazon.com/s3/ dynamo:http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf cassandra:http://incubator.apache.org/cassandra/ voldemort:http://project-voldemort.com/]]></description>
			<content:encoded><![CDATA[<p>现在很多国内公司都纷纷开始了key-value的nosql存储方式，然而，从什么时候开始key-value会变得这么流行呢？是风靡一时，还是顺应时代的潮流？前后数一数，有豆瓣网的beandb、有新浪的SDD、小道消息还有腾讯的TDB以及人人网的nuclear。再数国外，吹起这阵风的原因是亚马逊的一篇文档，这篇文档讲述了在亚马逊的S3服务中所使用的存储系统dynamo实现方式，但遗憾的是dynamo并不开源。紧随其后，facebook来了位号称是当年亚马逊dynamo的开发人员之一的同志，实现了facebook的cassandra，并且值得表扬的是还将其开源了。与此同时，相同理论下产生的，还有linkedin的voldemort系统。<span id="more-559"></span></p>
<p><strong>百家争鸣还是百家讲坛</strong></p>
<p>分布式存储的目标，是解决大规模数据在数据量不断增长的情况下，让服务更加稳定，更容易扩展。</p>
<p>其主要具备以下几个特点：</p>
<p>1.高可靠性：系统能够长时间高效运行不迭机。严格的说即使坏了一部分机器也没事。</p>
<p>2.可扩展性：可以随意增加减少机器，不用担心额外的数据损失。</p>
<p>3.负载均衡：要保证每个节点的数据都是负载均衡的，不出现集中负载到一个节点的情况。</p>
<p>4.一致性：因为是分布式的节点，就需要保证节点与节点之间保存数据的一致。</p>
<p>鱼与熊掌不可兼得，这几点，往往完成了其中几点就会损失另外一点，要全部达到完美，是一件非常困难的事情。</p>
<p>在国内的几个存储来看，基本都是只实现了其中的一部分，再按照自己业务的需求，来加强其中更为关心的建设。</p>
<p>beansdb的最终一致性通过哈希树实现快速完整数据同步（短时间内数据可能不一致）；可以在不中断服务的情况下进行容量扩展；异步IO和高性能的KeyValue数据TokyoCabinet：通过N,W,R进行配置（这点其实是dynamo的文档里的方案，并非beansdb所创）；Memcache兼容协议，大量可用客户端。sdd也大同小异。</p>
<p>Nuclear完成了这些功能，并且可以适配到mysql\tc\bdb等存储引擎之上。</p>
<p>为什么已经有开源的项目，还要去自己实现呢？简单的说，twitter敢用，你敢用吗？</p>
<p><strong>分布式key-value存储之所以稳定的原因</strong></p>
<p>从设计之初，注定这个系统会很稳定。为什么呢，主要是下面几点：</p>
<p>1.dynamo文档中的NWR的观点，可以让节点在损坏的情况下也能稳定如新。基本上这些系统都实现了。</p>
<p>2.dynamo文档中的两层数据节点的观点，可以让各节点在大负载的情况下负载均衡。部分实现了这一点。</p>
<p>3.底层存储的时候是key-value的读和取，只有一个维度的底层操作，对引擎来说，所有的操作都是可计算时间的。这一点的意思是说，假设都是MYSQL的底层存储，这个系统只会有一堆的select value form table where key=num这样的查询，而不会出现select * from table where key in(num1,num2,num3….)这样的查询，这两个查询不同的地方在于，如果都是1000次的查询，那么前一条的时间是可以准确预估的，而后一条取决于mysql底层实现的逻辑，而这个逻辑对上层是不可见的。</p>
<p>更多不明原因。。。</p>
<p><strong>适合使用的范围</strong></p>
<p>这套系统也不是放之四海而皆准的东西，如果说您的系统有如下的特征，可以考虑考虑：</p>
<p>1.数据插入后不需要各维度的查询。</p>
<p>2.数据不需要100%精确立即展示。</p>
<p>更多不明特点。</p>
<p><strong>总结</strong></p>
<p>其实这个系统，在过十亿的数据量下才有意思。<br />
本文作者：<br />
54chen(陈臻)，人人网分布式存储研究人员，业余时间混迹于各技术组织且乐此不疲。目前关注实施PHP培训。对flex等前端技术有一点研究。<br />
个人技术站点:<a href="http://www.54chen.com/">http://www.54chen.com/</a> 。可以通过电子邮件 czhttp@gmail.com 联系到他。</p>
<p><strong>[文中所提及的链接]</strong></p>
<p>beansDB:http://code.google.com/p/beansdb/</p>
<p>SDD:http://code.google.com/p/sina-sdd/</p>
<p>Nuclear:http://ugc.renren.com</p>
<p>S3:http://aws.amazon.com/s3/</p>
<p>dynamo:http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf</p>
<p>cassandra:http://incubator.apache.org/cassandra/</p>
<p>voldemort:http://project-voldemort.com/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ityao.com/archives/559/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

