NoSQL数据库设计的最佳实践


33

我刚刚开始使用基于NoSQL文档的数据库(MongoDB),并且对设计数据库的最佳实践感到好奇。

我认为体系结构应该与关系数据库不同?我是否仍应针对规范化的数据库?

例如,我有一个特定的用例。

我有一个具有租用历史记录(地址数组)的用户,该数组应该是用户数组还是具有共享密钥的单独集合?


不要使用外键
dukeofgaming 2012年

不要使用SQL :-)。说真的,“ NoSQL”能告诉您有关该技术的其他信息吗?

我认为该线程应该在Stack Exchange的数据库站点中。在那里您可以找到有关此问题的更多帮助。
Luis Arriojas 2014年

Answers:


23

NoSQL数据库设计的适当方法是DDD域驱动设计)。对于以前设计RDBMS的某些人来说,NoSql看起来像Sql反模式,在DDD范围内考虑时,它更有意义。

根据地址的使用,您可以将其定义为租赁历史记录模型/实体中的值对象。

这里有一些参考资料,这些参考资料可能会清除有关使用NoSQL进行设计的想法:


19

TL; DR

RDBMS中的规范化使您可以利用关系范式的优势。

NoSQL中的非规范化使您可以利用NoSQL范式的优势。

长答案

RDBMS很棒,因为它们使您可以对唯一的结构化实体(无论是否可变)及其彼此之间的关系进行建模。这意味着在实体级别上工作,更新其属性,插入另一个属性,删除一个属性等非常容易。但是,对于动态地将它们聚合,拥有所有者的狗,拥有住所的狗等也非常有用。 RDBMS为您提供了便利所有这些的工具。它会为您加入,它将为您处理各个实体之间的原子更改,等等。

NoSQL数据库之所以出色,是因为它们使您可以对半/非结构化聚合和动态实体进行建模。这意味着对不断变化的实体进行建模非常容易,这些实体并非都共享相同的属性和分层聚合。

要为NoSql建模,您需要考虑层次结构和聚合而不是实体和关系。因此,您没有人,出租地址以及它们之间的关系。您拥有租赁记录,这些记录可为每个人汇总他们拥有的租赁地址。

您需要问,我需要一起更改哪些数据。哪些数据在逻辑上将其他数据分组。在你的情况下,一个人听起来像一个很好的聚集体。通往其余数据的逻辑切入点是什么?

假设您说的是NoSQL,存储的是具有其他事物的事物,这些事物具有自己的事物。把事情的整个层次归还给我。让我随便更改它,现在用更改后的内容替换整个事物的层次结构。这就是给您的一切。为什么有用?如果您拥有的是事物层次结构,那么您始终会整体上进行交互。或者,如果您需要大规模扩展。

RDBMS给您的其他所有功能,您都必须在代码和架构中手动实现。如果您需要汇总,则必须加入代码。如果只需要聚合的一部分,则必须解析。如果您不想重复,则需要自己检查唯一性。跨聚合等工作时,您需要实现自己的事务逻辑。

因此,在一张大桌子上放着您需要的所有东西,这就是NoSql的方法。由于仅在该级别上保证原子性,所以性能也得到保证。尽早确定您的关系很重要。这就是非规范化。

在RDBMS中,非规范化实际上会使您的数据库瘫痪于NoSQL。所以通常您想要相反的东西,那就是规范化。如果不这样做,则应该改用NoSQL DB。除非您同时需要两者。

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.