2011-01-31 59 views
3

我打算开发一些应用程序,如与朋友的朋友的朋友连接。它可能看起来像Facebook或Twitter,但最初我打算实施它来了解有关NOSQL数据库的更多信息。哪个NOSQL数据库工具更适合我的应用程序?

NOSQL中有许多数据库工具。我经历了许多数据库类型,如文档存储,键值存储,列类型,图形数据库。最后我想出了两个数据库工具,分别是cassandra & Neo4J。是否正确选择任何一个,如果不正确我&为我提供一些宝贵的意见。

还有一件事是我选择的语言绑定是JAVA。

我的问题是, 哪个数据库工具适合我的应用?

等待您的宝贵意见。感谢您花费宝贵的时间。

+4

这是一个主观问题。你特意征求意见。 – TheCloudlessSky 2011-01-31 12:26:21

+0

感谢您的时间。任何人都可以提出自己的看法,但我可以选择和研究更多关于他们的意见以及它如何适合我。我有机会跟随和研究他们的意见。这就是要求提出宝贵意见的原因。 – NANI 2011-01-31 12:32:54

回答

1

我不知道我理解所有的Cassandata一致性模型的影响相对于在多个可用区的数据一致。

给定多个区域,并且考虑到Cassandra中的协调节点使用的一致性级别不要求所有区域报告回来,但只有一个法定数量,区域数据状态差异如何在随后的读取中协调一致?

是否所有的防区工作在相同的系统时钟?还是每个区域都有自己的时钟?如果他们不在同一个时钟上工作,它们是如何同步的,以便在差异得到调和时,在“愈合”过程中比较时间戳?

比方说,确实有最新数据的区域现在处于脱机状态,并且前一次写入期间处于脱机状态的区域(因此未更新并且包含陈旧数据)现在已恢复线上。陈旧的数据会被返回吗?协调员有什么方法可以知道数据是陈旧的吗?

4

蒂姆,你真的应该分别张贴你的问题,而不是作为一个问题的任择议定书,它不是。

但是,为了回答,首先,在去阅读http://www.slideshare.net/benjaminblack/introduction-to-cassandra-replication-and-consistency本黑色的幻灯片。

完成?好了,现在的具体问题:

“怎么会在[副本]数据状态的差异可以在随后的和解读?”

最高时间戳获胜。

“所有区域的工作时间是否与系统时钟相同?”

时间戳由客户端(即您的应用服务器)提供。它们应该与例如ntpd(这是很好的做法),但高精度不是必需的,因为如果排序很重要,您应该通过使用唯一列名或通过使用外部锁来避免冲突。

例如:如果你有一个用户列表之后,你在Twitter的克隆,你应该给每个跟随自己的列,并会有没有办法丢失数据无论多么不同步的时钟是。

如果您对您的网站和两个管理员上传新图标的管理工具“同时,”一个更新要赢,它并没有真正无论哪个。在这里,你确实希望你的时钟同步,但“几ms内”已经足够接近。

如果要管理用户注册,并要允许创建帐户“jbellis”只有当它不存在,你需要一个锁管理器,不管你怎么时钟密切synchronzied是。

“陈旧的数据会返回吗?”

节点(比“区域”更好的思考单位)在其停机时间内不会丢失数据,直到通过读取修复,暗示切换或反熵修复发送该数据为止。同时,它将回复读取陈旧数据的请求;如果使用足够高的一致性级别,读取请求将等待足够的其他回复,以确保始终能够看到最新版本,这可能意味着如果有足够的其他副本停机,则无法完成请求。否则,低一致性级别(例如ONE)隐含地意味着“我明白,我用较低的一致性级别获得的较高的可用性和较低的延迟意味着我可以在停机后临时看到陈旧的数据。”

1

如果您不需要扩展在短期内我会用Neo4j的去,因为它被设计成储存像你描述的一个网络。 (如果你最终需要扩展,也许你可以在它的前面或扔东西肫。祝你好运!)

0

你看着Riak数据库?它具有与Cassandra相同的背景,但您不需要关心时间戳同步(它们涉及解决数据状态的不同方法)。

我的第一个应用程序建立在Cassandra数据库上。但我现在试图Riak,因为它更合适。它不仅仅是按键(键 - 值/超列 - 键 - 值)的区别,而且还有文档存储功能。

它创建一个使用MapReduce的复杂查询的方法。 Cassandra确实有使用Hadoop的选项,但听起来很困难。

进一步它使用HTTP /一个众所周知的定义的接入协议是那么它很容易,当你有大量的流量管理的服务器。

唯一不好的一点是比Cassandra慢。但通常你会读取的记录多于写入(并且Cassandra在写入时优化,而不是读取),所以最终结果应该是确定的。

相关问题