Membase与Cassandra之间的比较?

7

对于大多数应用程序来说,哪种NoSQL数据库更好?


Cassandra (0.7x)和Membase两者都:

  • 是键值数据库
  • 速度快
  • 可横向扩展
  • 可以与Hadoop结合进行Mapreduce处理
  • 支持增量和减量

Cassandra具有可选择的每个查询耐久性/一致性保证。

Cassandra具有BigTable列支持。

Membase具有异步(立即返回)写入功能。


除了一致性保证之外,为什么要选择其中之一?


还有其他产品可能比上述产品更好或更差。为什么要单独挑选这两个呢? - Phill
对于具有高可用性和简单扩展的实时查询,它们似乎是领先者。它们都承诺快速低延迟的写入和读取,以及简单的同质化单进程扩展。 - MartysMind
Cassandra更偏向于写入操作而非读取操作... - Phill
Cassandra具有异步(立即返回)写入功能 - 只需选择ConsistencyLevel.ZERO - yfeldblum
3个回答

8
Cassandra提供了行分成列的方式,可以进行索引,独立高效地更新(而不必重新编写整个行/对象),并用作物化视图(与关系型行不同,Cassandra列名称可以在运行时动态确定)。
Cassandra提供了可配置每个键空间的多数据中心完全多主复制。(例如,我希望在北美数据中心中有3个数据集X的副本,在欧洲有1个副本。但是我只想在北美拥有2个数据集Y的副本。)
错误地说“Cassandra更适合写入而非读取”是不正确的。区别在于Cassandra在读写两方面都非常快速,这与大多数系统只在读取方面快速不同。
值得一提的是,Cassandra曾经提供异步写入,但我们将其删除了,因为当你达到容量极限时,你的选择是(1)将服务器运行到崩溃或(2)丢弃请求而没有向客户端反馈发生了什么。这对于非常小的性能提升来说是不值得的。

这是否意味着Cassandra根据一致性级别同步写入?另一个问题是,在什么情况下可能存在数据不一致的状态(旧值)在某些节点上超过1分钟?您对Megastore有何看法,它会对Cassandra产生任何反响吗? - sirmak
搜索了一下,发现所有的都差不多,http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis 上说:“最适合用于:写入操作比读取操作更频繁(日志记录)。” - 当然,我只用过RavenDB和MongoDB。 - Phill
Phil,你引用的文章是一群盲人带路。 - jbellis
我实际上很喜欢菲尔的文章,但是有一些不一致之处。大多数文章都没有深入到足以理解真正的权衡。这与许多基准测试存在的问题类似。至于关于写入的误解,我认为归结为我们中没有人愿意展示我们的产品不好。与其说Cassandra的写入由于对一致性的考虑而变慢,不如说它们被描述为异常快速。 - MartysMind
内存数据库如Mongo比Cassandra更快,但是会牺牲持久性。Mongo可以被设置得更加持久,但那样的话它将失去速度这个卖点。据我所见,Membase不允许进行每个操作的耐久性设置。这很合理,因为它继承了memcached的特点。 - MartysMind

5

Membase最近与CouchDB合并,并将其磁盘/持久层从sqllite更新为CouchDB,使Membase能够执行map/reduce和查询/索引。

还有一件事情还没有被提到,那就是Membase集群的设置非常容易,而Cassandra需要更多的系统管理员工作。

Cassandra目前也更广泛地被采用,尽管像Zynga及其社交游戏这样的关键用例适用于Membase。


还没有人提到的一件事是,Membase集群的设置非常容易,特别是在Mac上,就像Couch一样。 - sbartell

1

这是一个非常简单的问题。为什么你不同时比较riak、Couchdb、Hadoop和其他数据库呢?

对于大多数应用程序来说,没有一种NoSQL数据库是最好的选择。Tokyo Tyrant非常适合某些任务。SQLITE是一种优秀的数据库,如果你知道该怎么做,它可以进行扩展。

NoSQL的整个意义在于解构单片式关系型数据库,并提供专注于数据库访问方面的精简工具,这些方面是你的应用程序瓶颈所在。每个应用程序都是不同的,因此并不存在最佳选择。

然而,有一种最佳策略。那就是确定你的应用程序的原始性能需求,找到瓶颈所在,并选择支持这些瓶颈并帮助你管理它们的数据库工具(也许是NoSQL,也许是关系型数据库)。

博客圈充满了那些从同样简单的问题开始,最终做出错误选择的人的故事。如果你想得到正确的答案,你需要从问正确的问题开始,有时候你需要清醒地认识到,从技术角度来看,你的应用程序很难管理。其他人已经发现,扩展问题可以更好地由业务人员解决,但前提是技术人员必须能够解释系统、其瓶颈和自然限制以及在某些方面更容易扩展的机会,只要业务朝不同的方向发展。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接