何时在mysql上使用诸如mongodb之类的nosql数据库?


13

我是nosql数据库的新手,并且从未使用过它。根据我已阅读的内容和所了解的一点点内容,如果没有外键的概念,如果您不能在数据之间进行引用,我仍然看不到它们如何特别有用。

例如,如何查询“查找此用户发布的所有评论”,“查找属于相册实体的所有照片”等简单信息。

Nosql系统是否远离静态关系数据模型,但仍然让您跟踪此类引用,是否有与外键类似的东西可以在查询中使用?

Answers:


19

一般用途

  • 如果您在创建系统时没有明确定义数据结构。例如,我倾向于将用户设置保留在nosql中。另一个示例是一个系统,其中用户需要能够在运行时添加字段-在RDBMS中非常痛苦,而在NoSQL中则轻而易举。

  • 如果您的模型结构主要围绕一个或几个模型对象,并且大多数关系实际上是主要模型对象的子对象。在这种情况下,您会发现对实际连接的需求非常少。我发现例如可以在nosql中很好地实现联系人管理系统。一个人可以有多个地址,电话和电子邮件。而不是将它们分别放入单独的表中,它们都成为同一模型的一部分,并且您只有一个人对象。

  • 如果您想从跨多个服务器的数据集群中受益,而不是拥有一台整体服务器,这是RDBMS通常需要的。

  • 正在缓存。即使您希望使用RDBMS作为主要数据库,使用NoSQL数据库来缓存查询结果或保留数据(例如计数器)也可能很有用。

  • 储存文件。如果要存储一致的文档,则在数据库中某些NoSQL数据库(例如MongoDB)实际上专门用于存储那些文档。

那加入呢?

老实说,一开始的时候,不参加的事情对我来说还是很吓人的。但是诀窍是停止使用SQL进行思考。在运行应用程序时,您必须真正考虑存储在内存中的对象。它们应该或多或少地保存在NoSQL数据库中。

因为您可以将完整的对象图与子对象一起存储,所以消除了对联接的大部分需求。而且,如果您发现需要一个,则必须咬紧牙关,获取两个对象,然后加入您的应用程序代码。

幸运的是,如果您正确设置架构,大多数驱动程序都可以为您完成连接。

为了进一步阅读,我实际上推荐Martin Fowler


2

我肯定会在项目的规划阶段(开发之前,甚至设计之前)使用这样的数据库来记录其结构,关系和特征尚不为人所知且需要分析的数据。之后,我将尝试使所有内容适合关系模型。


2
什么?为什么 ...
罗伯特·哈维

因此,人们可以在实践中利用关系模型来存储数据,例如在mysql中,该数据不会真正改变很多,例如用户信息,典型名称,电子邮件等。然后将其与nosql数据库结合使用,以处理非结构化,不规则的数据,例如用户活动日志。责任分担。?还是您建议从nosql数据库开始,并在一切设置完成后完全迁移到关系模型?
akomada

在您甚至在分析开始之前就已经有数据的情况下(例如,您被要求重写控制现有工厂的软件,其中传感器已经在喷射数据了),我将立即开始在nosql数据库中捕获数据,然后,如果可能的话,我会尝试使其适合关系模型。如果不可能,那么我将继续使用nosql。
Mike Nakis 2015年

0

在某些情况下,您不需要外键。例如:

查找此用户发布的所有评论

与加载与comments用户相对应的文档部分一样简单。这被称为非规范化:您没有一个文档,而只有两个文档,而您需要的所有东西都在文档中。一个查询,无联接,性能更好

但是在某些情况下,这可能会导致数据重复,因此从一个文档链接到另一文档可能是合适的。在这种情况下,您可能会对MongoDB规范化,外键和联接,“ 数据库引用”页面特别是DBRefs功能感兴趣。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.