Mysql 使用NoSQL数据库实现关系化

Mysql 使用NoSQL数据库实现关系化,mysql,database,nosql,relational-database,berkeley-db,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 wit

非关系数据库正日益受到人们的关注。主要的限制是今天的复杂数据确实是相互关联的。当我们连接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
我们通过连接执行单个查询,而不是三个查询。我认为像BerkeleyDB这样的键/值数据库中的三个查询比Mysql中的连接查询要快


这个想法可行吗?或者忽略此方法会涉及到其他问题?

当然,单记录联接在两种解决方案中都非常快速,但这并不是联接的最大优势。当您将许多行与许多其他行连接在一起时,连接非常有用。想象一下,在您的示例中,您希望对100个不同的标记执行此操作。如果没有连接,您就需要对SQL的一个查询进行300次查询。

当然,在这两种解决方案中,单记录连接都非常快速,但这并不是连接的最大优势。当您将许多行与许多其他行连接在一起时,连接非常有用。想象一下,在您的示例中,您希望对100个不同的标记执行此操作。如果没有连接,您就需要对SQL的一个查询进行300次查询。

NoSQL数据库可以很好地支持关系数据模型。您只需要自己在应用程序中实现关系映射,而这项工作通常不是无关紧要的

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

然而,你应该记住一件事。典型的SQL DBMS基本上是一个NoSQL数据库,前面有一个优化的、构建良好的关系引擎。有些数据库甚至允许您绕过关系层和

因此,当你开始思考的时候,你应该问自己,“难道没有人已经为我构建了这个吗?”答案很可能是“是的”,解决方案可能是使用传统的SQL DBMS

具体回答问题的“3个问题”部分,答案是“可能”。在NoSQL数据库中,这样的查询可能比在RDBMS中运行得更快,但是需要记住的是,这里有更多的事情要考虑,而不仅仅是查询的原始速度:

  • 在构建join-like功能时,您将承担技术债务,否则您将不必构建这些功能
  • 构建、测试和优化查询代码所需的时间可能比编写简单的SQL查询更重要
  • 事务保证或其他典型产品功能(复制、管理工具等)方面的任何差异,这些差异可能会因您选择的NoSQL选项而有所损失或增加
  • 能够雇佣懂得如何从操作角度运行数据库的DBMs
  • 你可能会回顾这个列表,然后对自己说,“没什么大不了的,我正在运行一个只有几千个DB条目的简单应用程序,我会自己维护它”。如果是这样的话,把你自己弄出来——伯克利(和其他NoSQL选项)也可以。我已经用伯克利很多次了。但是,如果您正在为一个规模巨大的SaaS产品构建后端,那么您可能会有不同的答案,该产品可能很快就会拥有数百万用户和非常复杂的查询


    不幸的是,我们不能给出一个一刀切的答案。您必须根据应用程序和组织的需要做出判断。

    NoSQL数据库可以很好地支持关系数据模型。您只需要自己在应用程序中实现关系映射,而这项工作通常不是无关紧要的

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

    然而,你应该记住一件事。典型的SQL DBMS基本上是一个NoSQL数据库,前面有一个优化的、构建良好的关系引擎。有些数据库甚至允许您绕过关系层和

    因此,当你开始思考的时候,你应该问自己,“难道没有人已经为我构建了这个吗?”答案很可能是“是的”,解决方案可能是使用传统的SQL DBMS

    具体回答问题的“3个问题”部分,答案是“可能”。在NoSQL数据库中,这样的查询可能比在RDBMS中运行得更快,但是需要记住的是,这里有更多的事情要考虑,而不仅仅是查询的原始速度:

  • 在构建join-like功能时,您将承担技术债务,否则您将不必构建这些功能
  • 构建、测试和优化查询代码所需的时间可能比编写简单的SQL查询更重要
  • 事务保证或其他典型产品功能(复制、管理工具等)方面的任何差异,这些差异可能会因您选择的NoSQL选项而有所损失或增加
  • 能够雇佣懂得如何从操作角度运行数据库的DBMs
  • 你可能会回顾这个列表,然后对自己说,“没什么大不了的,我正在运行一个只有几千个DB条目的简单应用程序,我会自己维护它”。如果是这样的话,把你自己弄出来——伯克利(和其他NoSQL选项)也可以。我用过伯克利人