何时在 rethinkdb 中创建一个单独的 table

When to create a separate table in rethinkdb

我在设计rethinkdb时很困惑tables/documents。我什么时候创建一个单独的 table 以及什么时候将它存储在同一个文档中。应该尽可能避免连接,还是应该广泛使用它们。将数据存储在单独的 table 中与将其存储在父文档中有什么优势。

视情况而定。

数据库应该围绕您的数据的外观来构建。 .join 不一定要避免。在许多情况下,.join 会提高数据库的性能。

以下是一些需要考虑的事项:

  1. 您想降低复杂性。如果将所有内容存储在文档中有意义,那么您应该这样做。如果使用 .join 有意义,你应该这样做。
  2. 更新文档的成本很高。如果你能避免它就更好了。这可能意味着只需将所有内容都写在一个文档中,或者如果您必须经常更新该文档,则将其拆分。
  3. 解析复杂文档(具有许多嵌套属性)的开销很大。如果您经常阅读文档,请尝试降低文档的复杂性。
  4. .join.changes 中不受支持(还!)。您做出的决定取决于您是否以及如何使用变更源。

这里有几个场景以及如何处理它们:

  1. 如果table A 与B 一对多,而你不会creating/updating 经常是其中任何一个,最好将所有内容都写到一个文档中.

  2. 如果table A对B一对多,你不会creating/updating很多A,但你会creating/updating 很多B最好分别存放在两个不同的table中,然后用.join.

  3. 如果tableA对B有一对多,B有很复杂的嵌套JSON结构,最好分开存放tables 并使用 .join,因为否则读取 A 会非常昂贵(除非您每次都读取 As 中的 B)。

  4. 如果 table A 与 B 具有一对多关系,并且您将广泛使用仅包含 A 上的数据的变更源,最好将 B 保存在单独的 table。

  5. 如果 table A 与 B 之间存在一对多关系,并且您将广泛使用变更源来处理 A 和 B 上的数据,您将希望保留所有同一文档中的数据。