Answers:
一般用途
如果您在创建系统时没有明确定义数据结构。例如,我倾向于将用户设置保留在nosql中。另一个示例是一个系统,其中用户需要能够在运行时添加字段-在RDBMS中非常痛苦,而在NoSQL中则轻而易举。
如果您的模型结构主要围绕一个或几个模型对象,并且大多数关系实际上是主要模型对象的子对象。在这种情况下,您会发现对实际连接的需求非常少。我发现例如可以在nosql中很好地实现联系人管理系统。一个人可以有多个地址,电话和电子邮件。而不是将它们分别放入单独的表中,它们都成为同一模型的一部分,并且您只有一个人对象。
如果您想从跨多个服务器的数据集群中受益,而不是拥有一台整体服务器,这是RDBMS通常需要的。
正在缓存。即使您希望使用RDBMS作为主要数据库,使用NoSQL数据库来缓存查询结果或保留数据(例如计数器)也可能很有用。
储存文件。如果要存储一致的文档,则在数据库中某些NoSQL数据库(例如MongoDB)实际上专门用于存储那些文档。
那加入呢?
老实说,一开始的时候,不参加的事情对我来说还是很吓人的。但是诀窍是停止使用SQL进行思考。在运行应用程序时,您必须真正考虑存储在内存中的对象。它们应该或多或少地保存在NoSQL数据库中。
因为您可以将完整的对象图与子对象一起存储,所以消除了对联接的大部分需求。而且,如果您发现需要一个,则必须咬紧牙关,获取两个对象,然后加入您的应用程序代码。
幸运的是,如果您正确设置架构,大多数驱动程序都可以为您完成连接。
为了进一步阅读,我实际上推荐Martin Fowler。
我肯定会在项目的规划阶段(开发之前,甚至设计之前)使用这样的数据库来记录其结构,关系和特征尚不为人所知且需要分析的数据。之后,我将尝试使所有内容适合关系模型。
在某些情况下,您不需要外键。例如:
查找此用户发布的所有评论
与加载与comments
用户相对应的文档部分一样简单。这被称为非规范化:您没有一个文档,而只有两个文档,而您需要的所有东西都在文档中。一个查询,无联接,性能更好。
但是在某些情况下,这可能会导致数据重复,因此从一个文档链接到另一文档可能是合适的。在这种情况下,您可能会对MongoDB规范化,外键和联接,“ 数据库引用”页面特别是DBRefs功能感兴趣。