何时在rethinkdb中创建单独的表

Pan*_*kaj 1 rethinkdb

我在设计rethinkdb表/文档时感到困惑.我何时创建单独的表,何时将其存储在同一文档中.应该尽可能避免加入,还是应该广泛使用它们.将数据存储在单独的表中与将其存储在父文档中有什么好处.

Jor*_*lva 6

这取决于.

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

这里有一些事情需要考虑:

  1. 您希望降低复杂性.如果将所有内容存储在文档中是有意义的,那么您应该这样做.如果使用有意义.join,你应该这样做.
  2. 更新文档非常昂贵.如果你能避免它,那就更好了.这可能意味着只需要在一个文档中编写所有内容,或者如果您不得不经常更新该文档,则将其分开.
  3. 解析复杂文档(具有许多嵌套属性)非常昂贵.如果您经常阅读文档,请尽量降低文档的复杂性.
  4. .join.changes(尚未支持).您采取的决定取决于您是否以及如何使用更改源.

以下是一些场景以及如何解决这些问题:

  1. 如果表A与B具有一对多,并且您不会经常创建/更新任何一个,那么最好将所有内容写入一个文档.

  2. 如果表A对B有一对多,并且您不会创建/更新很多As,但是您将创建/更新很多B,最好将它们存储在两个不同的表中并使用.join.

  3. 如果表A与B具有一对多且B具有非常复杂的嵌套JSON结构,则最好将它们存储在不同的表中并使用.join,因为读取A会非常昂贵(除非您将读取Bs)在每一次)

  4. 如果表A与B具有一对多,并且您将广泛使用只有A上的数据的更改源,则最好将B保留在单独的表中.

  5. 如果表A与B具有一对多,并且您将广泛使用带有A和B上的数据的更改源,则您需要将所有数据保留在同一文档中.