java - 哪种 NOSQL 数据库工具更适合我的应用程序?

标签 java nosql cassandra neo4j

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

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

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

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

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

最佳答案

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

但要回答问题,首先,请阅读 Ben Black 的幻灯片,网址为 http://www.slideshare.net/benjaminblack/introduction-to-cassandra-replication-and-consistency .

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

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

时间戳最高者获胜。

“所有区域都使用相同的系统时钟吗?”

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

例如:如果您在 Twitter 克隆中有一个关注您的用户列表,您应该为每个关注者提供自己的列,并且无论时钟多么不同步都不会丢失数据。

如果您的网站有一个管理工具,并且两个管理员“同时”上传了一个新的网站图标,那么一个更新将胜出,而哪个更新并不重要。在这里,您确实希望时钟同步,但“在几毫秒内”已经足够接近了。

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

“会返回过时的数据吗?”

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

否则,低一致性级别(例如,ONE)隐含地意味着“我理解,通过这种较低的一致性级别可以获得更高的可用性和更低的延迟,这意味着我可以在停机后暂时看到陈旧的数据。”

关于java - 哪种 NOSQL 数据库工具更适合我的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4850695/

相关文章:

apache-spark - 如何有效地使用spark读取具有分区热点的cassandra数据?

nosql - Redis 与 Cassandra(Bigtable 数据模型)

java - 在循环中将所有 double 相加,Java

java - 如何使用JButton?

json - 访问Firebase中的用户uid

nosql - 用于创建多个节点和关系的 Cypher 查询

java - 如果缺少一台主机,Datastax Java 驱动程序将无法连接

java - 创建Android Studio项目时出现异常

java - 查找 JUnit 测试类中测试方法的数量

cassandra - 不支持带有 2ndary 索引的 ORDER BY