【发布时间】:2014-11-01 22:12:01
【问题描述】:
我开始构建一个新的基于 Spring 的多用户文档管理应用程序,我想冒险进入 NoSQL/MongoDB 的世界。来自 RDBMS 背景,我对 MongoDB 有几个担忧,主要是:
- 缺少交易
- 更注重性能/可扩展性而不是数据完整性
- 缺乏 JPA 标准
首先,我不期望高负载或大量读取与写入。我怀疑读取到写入的比率约为 10 比 1。此外,我预计负载不会很高 - 尤其是开始时。
1) 据我所知,没有简单的方法来进行多收款交易。在 RDBMS 中,我可以轻松地在单独的表中维护每个用户的文档 ID 计数器,但考虑到它将位于单独的集合/文档中,似乎没有办法在 MongoDB 中可靠地执行此操作。因此,我不确定是否/如何解决这个问题。
2) 此外,根据我的阅读,NoSQL 在数据完整性不是主要问题的情况下非常有用(例如:博客 cmets 等)。但是,我不确定这如何转化为应用程序的主要数据存储。这是否意味着可以更新文档并使其失败?我遇到了一个older unaccredited rant,它讨论了失败的提交/等,这进一步激起了人们的担忧。
3) NoSQL 似乎缺乏类似 JPA 的标准,这意味着我必须选择我的数据库并坚持使用它。与 JPA 不同,我可以轻松地将一个数据库供应商换成另一个符合 JPQ/SQL 的供应商,如果我想切换到另一个 NoSQL 数据库,我必须考虑使用 MongoDB 进行编码并重新设计我的结构/查询。我见过 Hibernate OGM,但它似乎仍处于起步阶段,仅提供基本支持。绝对不是可以避免 mongodb 特定查询的东西。
这些问题容易缓解吗?作为 NoSQL 世界的新手,我仍然无法理解何时使用 NoSQL 的正确业务案例。
【问题讨论】:
-
以崇尚魔鬼为代价,为什么要使用NoSQL?您不应该根据您的要求选择工具,而不是选择工具然后想知道“我如何使用它来钉这个钉子?” (当然,除非您正在尝试学习技术)。如果您的数据对关系更有意义、具有固定架构、数量不多且对 ACID 约束没有疑虑,为什么还要寻找其他东西?
-
@prabugp 对于初学者,我正在尝试学习技术。 :) 其次,不完全了解技术,我很难知道 NoSQL 数据库在这种情况下是否有意义。在很多情况下,我可以看到无模式结构使设计更容易。然而,这些事务/ACID 问题让我想知道它是否真正有效地满足了我的需求。我怀疑其他人已经遇到过这些问题,所以如果我误解了 NoSQL/MongoDB 的限制,或者是否存在解决方案,或者这只是我需要忍受的东西,我正在寻找反馈。
-
DataNucleus JPA 很久以前就支持 MongoDB,但是 JPA 是专门为 RDBMS 设计的,所以 JPQL 不“适合”其他类型的数据存储,JDO 和 JDOQL OTOH 可以。
-
查看 Oracle NoSQL,可以对其进行调整以支持数据完整性。此外,不应将 NoSQL 数据库用作您的主要数据源。
-
NoSQL != 只是 MongoDB。 Neo4j 支持事务 iirc。
标签: java sql mongodb jpa nosql