非关系型数据库日益受到更多关注。主要限制是今天复杂的数据确实是连通的。在连接RDBMS中的表时连接数据库不方便吗?当然,我只是指简单的案例。想象一下三篇文章,标签,关系。在像Mysql这样的RDBMS中,我们可以运行三个查询
1. Find ID of a given tag
2. Find Articles connected with the captured Tag ID
3. Fetch the contents of Articles tagged with the term
我们通过JOIN执行单个查询,而不是三个查询。我认为像BerkeleyDB这样的键/值数据库中的三个查询比Mysql中的JOIN查询要快。
这个想法有用吗?或者其他问题涉及忽略这种方法?答案 0 :(得分:2)
NoSQL数据库可以很好地支持关系数据模型。您只需在应用程序中自己实现关系映射,这种努力通常并非无关紧要。
在某些应用中,这种额外的努力是值得的。也许你只有少量的表,你需要的连接非常简单。或者您可能在传统的关系型DBMS和NoSQL替代方案之间进行了一些性能评估,并发现NoSQL选项更适合您的需求,原因有多种(性能,可伸缩性,灵活性等等)。
但是,你应该记住一件事。典型的SQL DBMS基本上是一个NoSQL DB,它前面有一个优化的,精心构建的关系引擎。有些数据库甚至允许您绕过关系层和treat their system like a pure NoSQL DB。
因此,当你开始build your own relational mappings and joins on top of a NoSQL DB的那一刻,你应该问自己,“难道没有人为我建造这个吗?”答案可能是“是”,解决方案可能是使用传统的SQL DBMS。
要具体回答问题的“3查询”部分,答案是“可能”。您当然可以在NoSQL DB中比在RDBMS中更快地运行这样的查询,但是您需要记住,这里需要考虑的事情多于查询的原始速度:
您可以查看该列表并对自己说,“没什么大不了的,我正在运行一个只有几千个数据库条目的简单应用程序,我会自己维护它”。如果是这样,那就把自己搞得一团糟 - 伯克利(以及其他NoSQL选项)可以正常工作。我已经多次使用Berkeley进行这类应用。但是,如果您为大规模的SaaS产品构建后端,可能会有很多用户和非常复杂的查询,那么您可能会有不同的答案。
遗憾的是,我们无法给出一个通用的答案。您必须根据应用程序和组织的需要自行判断。
答案 1 :(得分:1)
当然,在任一解决方案中,单个记录连接都非常快,但这不是连接的最大优势。当您加入包含许多其他行的许多行时,联接非常有用。想象一下,在您的示例中,您是否希望为100个不同的标签执行此操作。没有连接,你就是在谈论SQL的300个查询。
答案 2 :(得分:0)
noSql系统的另一个解决方案是playOrm。它只在分区中加入BUT,因此表可以是无限大小,但分区必须与RDBMS表的大小相同。虽然它有一些不同之处,但它会为你提供所有相关注释的所有花哨的hibernate内容,并且会在你反规范化时添加Embedded。它使事情变得更容易。通常处理nosql是你必须要做的所有翻译逻辑中的一种痛苦,并且所有手动索引和更新都会从索引中删除.... playOrm会为你完成所有这些。