mysql - 将 NoSQL 数据库用于关系目的

标签 mysql database nosql relational-database berkeley-db

非关系数据库日益受到越来越多的关注。主要的限制是当今复杂的数据确实是相互关联的。连接数据库是不是就像我们在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 查询更快。

这个想法实用吗?或者涉及其他问题而忽略此方法?

最佳答案

NoSQL 数据库可以很好地支持关系数据模型。您只需在应用程序中自行实现关系映射即可,而且这项工作通常并非微不足道。

在某些应用中,这种额外的努力是值得的。也许您只有少量的表,并且您需要的联接非常简单。或者,您可能已经在传统关系 DBMS 和 NoSQL 替代方案之间进行了一些性能评估,并发现 NoSQL 选项出于多种原因(性能、可扩展性、灵 active 等)更适合您的需求。

但是,您应该记住一件事。典型的 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你应该问自己:“不是有人已经为我构建了这个吗?”答案很可能是"is",解决方案可能是使用传统的 SQL DBMS。

具体回答您问题的“3 查询”部分,答案是“也许”。您当然可以使这样的查询在 NoSQL DB 中比在 RDBMS 中运行得更快,但您需要记住,这里需要考虑的不仅仅是查询的原始速度:

  1. 在构建类似联接的功能时将产生的技术债务,而您原本不必构建这些功能
  2. 构建、测试和优化查询代码所需的时间可能比编写简单的 SQL 查询更重要
  3. 交易保证或其他典型产品功能(复制、管理工具等)方面的任何差异,您可能会失去或获得这些差异,具体取决于您选择的 NoSQL 选项
  4. 能够聘请了解如何从运营角度运行数据库的 DBM

您可能会查看该列表并对自己说,“没什么大不了的,我正在运行一个只有几千个数据库条目的简单应用程序,我将自己维护它”。如果是这样,那就让自己崩溃吧——伯克利(和其他 NoSQL 选项)会很好。我曾多次使用伯克利来处理此类应用程序。但是,如果您正在为大型 SaaS 产品构建后端,并且该产品可能很快就会拥有数百万用户和非常复杂的查询,那么您可能会有不同的答案。

不幸的是,我们无法给出一刀切的答案。您必须根据应用程序和组织的需求自行做出判断。

关于mysql - 将 NoSQL 数据库用于关系目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7761027/

相关文章:

mysql - 通用投票表与单独的投票表?

php - 从 CodeIgniter 中的数据库获取下拉列表

php - session 未插入数据库语法错误

mysql - Heroku 的 Rails 数据库特定查询

mongodb - NoSQL 数据库之间有什么区别,它们与传统关系数据库有何不同?

java - elasticsearch中更新文档的效率

MYSQL 内部连接与计数子查询

mysql - 重新为MySQL用户分配主机访问权限

php - 格式化 MySQL 中的时间戳

database - (memcached + 关系数据库) vs nosql