Java 为我的应用程序选择哪个NOSQL数据库工具更好?

Java 为我的应用程序选择哪个NOSQL数据库工具更好?,java,nosql,cassandra,neo4j,Java,Nosql,Cassandra,Neo4j,我正计划开发一些应用程序,比如与朋友的朋友联系。它可能看起来像Facebook或Twitter,但最初我计划实现它以了解更多关于NOSQL数据库的信息 NOSQL中有许多数据库工具。我经历了许多数据库类型,如文档存储、键值存储、列类型、图形数据库。最后我提出了两个数据库工具,cassandra和Neo4J。如果你不纠正我,给我提供一些你有价值的意见,那么选择任何一个都是正确的吗 还有一件事是我选择的语言绑定是JAVA 我的问题是,, 哪个数据库工具适合我的应用程序 等待您的宝贵意见。感谢您花费宝

我正计划开发一些应用程序,比如与朋友的朋友联系。它可能看起来像Facebook或Twitter,但最初我计划实现它以了解更多关于NOSQL数据库的信息

NOSQL中有许多数据库工具。我经历了许多数据库类型,如文档存储、键值存储、列类型、图形数据库。最后我提出了两个数据库工具,cassandra和Neo4J。如果你不纠正我,给我提供一些你有价值的意见,那么选择任何一个都是正确的吗

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

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


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

我不确定我是否理解Cassandata一致性模型对跨多个可用性区域的数据协议的所有影响

如果有多个区域,并且Cassandra中的coordinator节点使用了一个一致性级别,该级别不要求所有区域都报告,而只要求仲裁,那么在后续读取时如何协调区域数据状态的差异

所有区域是否在同一系统时钟下工作?还是每个区域都有自己的时钟?如果它们不是在同一个时钟下工作,那么它们是如何同步的,以便在协调差异的“修复”过程中可以比较时间戳的


假设确实具有准确、最新数据的区域现在处于脱机状态,而在上一次写入期间处于脱机状态的区域(因此未更新且包含陈旧数据)现在又恢复联机状态。过时的数据会被返回吗?协调员有没有办法知道数据过时了?

蒂姆,你真的应该把你的问题单独发布,而不是作为OP的答案,事实并非如此

但要回答这个问题,首先,去看本·布莱克的幻灯片

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

“如何在后续读取时协调[副本]数据状态的差异?”

最高的时间戳获胜

“所有区域是否在同一系统时钟下工作?”

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

例如:如果你有一个Twitter克隆中跟随你的用户列表,你应该给每个跟随者自己的列,无论时钟多么不同步,数据都不会丢失

如果你的网站有一个管理工具,两个管理员“同时”上传一个新的favicon,那么一个更新就会成功,不管是哪个更新。在这里,您确实希望时钟同步,但“几毫秒内”就足够了

如果您正在管理用户注册,并且希望仅在帐户“jbellis”不存在时才允许创建该帐户,那么无论时钟的同步程度如何,您都需要一个锁管理器

“是否会返回过时的数据?”

节点(比“区域”更好的单元)在停机期间不会丢失数据,直到通过读修复、暗示切换或反熵修复发送该数据。同时,它将用过时的数据响应读取请求;如果使用足够高的一致性级别,read requests将等待足够多的其他回复,以确保始终看到最新版本,这可能意味着如果有足够多的其他副本关闭,则无法满足请求


否则,低一致性级别(例如1)隐含地意味着“我知道,使用此低一致性级别获得的更高可用性和更低延迟意味着我可以在停机后临时查看过时数据。”

如果短期内不需要扩展,我会选择Neo4j,因为它是为存储您描述的网络而设计的。(若你们最终真的需要扩展,也许你们可以在它前面扔一些砂囊之类的东西。祝你们好运!)

你们看过数据库了吗?它的背景与Cassandra相同,但您不需要关心时间戳同步(它们涉及不同的解析数据状态的方法)

我的第一个应用程序是建立在Cassandra数据库上的。但我现在正在尝试里亚克,因为它更合适。这不仅是键(键-值/超级列-键-值)之间的区别,而且与文档存储功能的区别更大。

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

此外,它在http/s中使用了一个众所周知的、已定义的访问协议,因此当您有大量流量时,很容易管理服务器


唯一的缺点是比卡桑德拉慢。但通常你会读记录多于写记录(Cassandra在写记录而不是读记录方面进行了优化),因此最终结果应该是可以的。

这是一个主观问题。你在特别征求意见。谢谢你抽出时间。任何人都可以提供他们自己的观点,但我可以选择并研究更多关于他们的观点,以及它们如何适合我。我有机会跟随和研究他们的意见。这就是征求有价值意见的原因。感谢您对并发模型的澄清。另外,如果在这个网站上的评论可以更长一些,并且格式化,我的回复应该是评论,因为它是80%的评论,只有20%的答案。有时,一个人必须违反本网站的规则才能令人信服地参与对话。