哪个NoSQL数据库用于极高数据量

时间:2011-05-29 23:45:22

标签: mongodb cassandra redis database nosql

我正在寻找NoSQL的大量数据。我们目前正在将缓存版本的网页文本存储在MySQL中,但似乎数据库会很快变大。

我的要求是:

  • 持久性,不得丢失刷新/写入数据
  • 读取速度非常快,写得快“
  • 完全一致的复制
  • 最好是在内存中加上最终的磁盘写入

我正在看:MongoDB,Redis,Raik和Cassandra。

哪种最符合我的要求?

5 个答案:

答案 0 :(得分:4)

将缓存版本存储在MemCache中而不是MySQL中。它将消除大多数写入。写入MySQL是不好的,因为它会杀死查询缓存。当您在MemCache中缓存页面时,您对数据库的写入次数会少得多,并且您的阅读压力也会减少。您可以缓存复杂查询的结果,或者根据需要缓存整个页面。

也许它不会像Cassandra那么快,但与目前只有MySQL的情况相比,它会给你带来巨大的推动力。而且您不必重写整个应用程序。

答案 1 :(得分:4)

我有使用Redis和MongoDB的经验,但不建议您使用。 Redis在各方面都很棒,但由于它只是RAM而且没有集群功能(但它们正在开发中),它的扩展性不是很好。 MongoDB除了一个小的副本集之外,我再也不会使用任何东西。

基本上,MongoDB还不成熟,完全不适合任何类型的高容量,高性能要求。它具有在磁盘刷新期间保持的全局写锁定,这意味着性能可能会根据您的操作而有很大差异。在实践中,它会使更新无法增加文档,您也需要非常小心删除。说到删除,它们严重破坏了数据库,所以如果你做了很多删除,你的性能就会受到影响。

1.8.0到1.8.1的分片是一场灾难。有完整的显示塞子虫,永远不应该使它成为一个稳定的释放。配置未正确刷新,并且很容易使数据库进入错误状态,以便块从未移出主分片。 1.8.2解决了大部分问题并且看起来更稳定,但我不相信分片的实现。除此之外,即使一切正常,分片仍然很难,选择一个自然的分片键并不总是那么容易,如果你不分片会让你感到很悲伤。

MongoDB非常易于使用,功能集非常好用。文档,驱动程序和社区都很棒。 MongoDB可以作为MySQL的替代品,但不要将它用于任何需要扩展的东西。

我们目前正在考虑搬到卡桑德拉。我发现发电机模型(例如没有主节点;在任何地方写入和读取;只需添加节点来增长集群)引人注目,这些功能或多或少适合我们。数据模型的架构不像MongoDB,虽然稍微有点限制(基本上可以选择一个或两个级别的哈希)。一旦你进入它,我确信社区是好的,但到目前为止,我发现很难找到关于如何解决常见问题的良好信息,而且缺乏文档。你在博客上发现的大部分信息都是一年之久,从那以后发生了很多事情(0.7和0.8似乎都是非常重要的更新,但你找到的大多数事情都是0.6左右)。从我到目前为止看到的驱动程序也不是很成熟或记录良好,每个人似乎都在争论Thrift,Avro或CQL是应该使用的(并且已经从0.6变为0.7到0.8) 。

Riak很有意思,出于与Cassandra相同的原因,但对我们来说,纯粹的键值存储是不够的,我们需要能够在没有先读取的情况下进行更新。使用Riak这是不可能的,因为值只是blob。这听起来对你来说不会是一个问题。

HBase是另一个竞争者。由于许多不同的部分,ZooKeeper,HDFS等,设置和运行似乎很痛苦。但数据模型类似于Cassandra(柱状,即一级哈希),这对我们很有效,但可能不适用对你很重要这似乎是真实的,但是与MongoDB一样,你必须注意分片问题,你必须考虑一下你的密钥或者你遇到麻烦。

还有CouchDB,Project Voldemort和其他无数可能的选择。我认为,如果你认真对待“极其庞大的数据量”,那么它就是Cassandra,Riak和HBase之间。如果纯粹的键值存储不够,请打击Riak。根据“完全一致的复制”的含义,Cassandra和Riak都会出局,因为有可能(不一定是大的,可调的)读取过时的值。

最后你显然必须尝试一下你的特定用例,所以你真的应该把这个答案带回家:不要打扰MongoDB。

答案 2 :(得分:0)

答案 3 :(得分:0)

对于极高容量的数据,显然Cassandra和hadoop / hbase在这项任务中远远优于其他所有数据。 Cassandra在400个节点等大型集群上证明了自己。 rdms dbs无法轻松扩展,当节点数开始增加时,mongo也会遇到一些问题http://www.nosqlbenchmarking.com/2011/05/paper-on-elasticity-and-scalability-for-acm-socc-2011/

的Serdar

答案 4 :(得分:0)

RavenDB每个节点最多可以存储16TB的数据,每台机器可以使用其内置的分片支持作为一个数据库。这是巨大的。

耐用性,坚固性,复制就在那里,并且也支持在内存中运行(但如果你想要扩展到每个节点16TB,则不推荐使用。)