动态水平可伸缩键值存储

时间:2010-01-19 09:17:03

标签: scalability nosql key-value

是否有一个键值存储库可以提供以下内容:

  • 允许我简单地添加和删除节点,并自动重新分配数据
  • 允许我删除节点,但仍有2个额外的数据节点来提供冗余
  • 允许我存储大小不超过1GB的文字或图片
  • 可以存储高达100TB数据的小尺寸数据
  • 快速(因此允许在其上执行查询)
  • 使所有这些对客户端透明
  • 适用于Ubuntu / FreeBSD或Mac
  • 免费或开源

我基本上想要一些我可以使用“单一”的东西,而不必担心有memcached,db和几个存储组件所以是的,我确实想要一个数据库“银弹”你可以说。

由于

祖拜尔

答案到目前为止: BackBlaze之上的MogileFS - 据我所知,这只是一个文件系统,经过一些研究,它似乎只适用于大型图像文件

东京暴君 - 需要lightcloud。添加新节点时,这不会自动缩放。我确实研究了这个问题,但对于适合单个节点的查询来说,它似乎非常快

Riak - 这是我自己看的一个,但我还没有任何结果

Amazon S3 - 是否有人将此作为生产中唯一的持久层?从我所看到的它似乎用于存储图像,因为复杂的查询太昂贵

@shaman建议Cassandra - 我肯定是在研究

到目前为止,似乎没有数据库或密钥值存储符合我提到的标准,即使提供了100分的赏金,问题也得到了解答!

12 个答案:

答案 0 :(得分:17)

答案 1 :(得分:5)

Amazon S3是一种存储解决方案,而不是数据库。

如果您只需要简单的键/值,那么最好的选择是将Amazon SimpleDB与S3结合使用。大文件存储在S3上,而用于搜索的元数据存储在SimpleDB中。这为您提供了一个可水平扩展的键/值系统,可以直接访问S3。

答案 2 :(得分:4)

还有另一个解决方案,它似乎正是您正在寻找的:Apache Cassandra项目:http://incubator.apache.org/cassandra/

目前twitter正在从memcached + mysql cluster切换到Cassandra

答案 3 :(得分:4)

HBase和HDFS共同满足了大部分要求。 HBase可用于存储和检索小对象。 HDFS可用于存储大型对象。 HBase压缩小对象并将它们存储为HDFS上的较大对象。速度是相对的 - HBase在磁盘上随机读取的速度不如mysql(例如) - 但是从内存读取速度相当快(类似于Cassandra)。它具有出色的写入性能。 HDFS是底层存储层,完全可以抵御多个节点的丢失。它可以在机架上复制,也可以进行机架级维护。它是一个基于Java的堆栈,具有Apache许可证 - 几乎可以运行OS。

此堆栈的主要缺点是优于随机磁盘读取性能和缺乏交叉数据中心支持(这是一项正在进行的工作)。

答案 4 :(得分:2)

我可以建议你两种可能的解决方案:

1)购买亚马逊的服务(亚马逊S3)。对于100 TB,每月花费14 512美元。
2)更便宜的解决方案:

构建两个自定义backblaze存储pod(link)并在其上运行MogileFS。

目前我正在研究如何使用类似的解决方案存储数PB的数据,因此如果您发现有趣的内容,请发贴说明。

答案 5 :(得分:2)

看看Tokyo Tyrant。它是一个非常轻量级,高性能的复制守护程序,可将Tokyo Cabinet键值存储区导出到网络中。我听说过这件好事。

答案 6 :(得分:2)

从我在你的问题中看到的Project Voldemort似乎是最接近的问题。看看他们的Design page

我看到的唯一问题是它将如何处理大文件,根据this thread,事情并不都是好的。但是你可以使用文件轻松地解决这个问题。最后 - 这是文件系统的确切目的。看一下wikipedia list of file systems - 列表很大。

答案 7 :(得分:1)

您可能需要查看MongoDB

据我所知,你正在寻找一个数据库/分布式文件系统组合,这可能很难甚至无法找到。

您可能需要查看分布式文件系统,例如MooseFSGluster,并将数据保存为文件。这两个系统都是容错和分布式的(您可以根据需要放入和取出节点),并且两者对客户端都是透明的(构建在FUSE之上) - 您使用的是简单的文件系统操作。这包括以下特征:1),2),3),4),6),7),8)。我们正在使用MooseFS进行数字电影存储,其存储容量为1.5 PB,上传/下载速度与网络设置允许的速度一样快(因此性能取决于I / O,不依赖于协议或实现)。您的列表中不会有查询(功能5),但您可以将此类文件系统与MongoDB甚至某些搜索引擎(如Lucene(它具有聚簇索引))结合使用,以查询存储在文件系统中的数据。 / p>

答案 8 :(得分:1)

祖拜尔,

我正在开发一个到目前为止为faster than anything else的键值存储。

它还没有(还)使用复制,错过了你的第一个要求,但这个问题激发了我的灵感 - 谢谢你!

否:允许我简单地添加和删除节点,并自动重新分配数据 no:允许我删除节点,仍然有2个额外的数据节点来提供冗余 ok:允许我存储大小不超过1GB的文本或图像(是:无限制)
ok:可存储小到100TB数据的小尺寸数据(是:无限制)
ok:快速(因此允许在其上执行查询)(是:比东京内阁的TC-FIXED阵列更快)
ok:将所有这些透明化到客户端(是的:集成到Web服务器)
ok:适用于Ubuntu / FreeBSD或Mac (是:Linux)
ok:免费或开源(是:免费软件)

除了单线程性能优于哈希表和B树之外,这个KV商店是我唯一知道的“无需等待”(不阻塞,也不延迟任何操作)。

答案 9 :(得分:1)

MarkLogic正朝这个方向发展。虽然不是免费的......

答案 10 :(得分:1)

除了其他人提到的内容之外,您还可以看一下OrientDB - http://code.google.com/p/orient/一个看起来非常有前途的文档和K / V商店。

答案 11 :(得分:1)

结帐BigCouch。它是CouchDB,但针对集群进行了优化(所有大数据问题集群都适合)。正如我们所说,BigCouch正在merged into the CouchDB project获得Cloudant的人们,其中许多人是CouchDB的核心提交者。

您的要求的简要说明:

  

请允许我简单地添加和删除节点,并自动重新分配数据

     

允许我删除节点,并且仍然有2个额外的数据节点来提供冗余

是。 BigCouch使用Dynamo的Quorum概念来设置有多少节点保留数据的副本数量。

  

允许我存储大小不超过1GB的文字或图片

是。就像CouchDB一样,您可以将任意大小的blob(例如文件)传输到数据库。

  

可以存储高达100TB数据的小尺寸数据

是。构建BigCouch的团队之所以这样做是因为他们面临的系统每秒生成数PB的数据

  

快速(因此允许在其上执行查询)

是。查询由O(log n) time中的MapReduce完成。

  

使所有这一切对客户端透明

     

适用于Ubuntu / FreeBSD或Mac

     

免费或开源

烨! Apache 2.0许可下的开源。默认安装说明适用于Debian系统,如Ubuntu。