据我了解,你可以输入任何非结构化信息转化为面向文档的数据库。让我们想象一下这样一个文件:

{
  name: 'John Blank',
  yearOfBirth: 1960
}

后来,在一个新的版本,该结构被重构到

{
  firstname: 'John',
  lastname: 'Blank',
  yearOfBirth: 1960
}

如何与文档面向数据库做到这一点?你有准备合并的脚本,即改变数据库中的所有条目?还是有更好的方法可以处理结构的变化?

有帮助吗?

解决方案

重构这里意味着有一个从旧模式到新模式的确定性映射。因此,最有效的办法是做同样的事情,你会做一个SQL数据库和实际更新的文件。

文档导向的数据库给你做一个选择,虽然这取决于其DODB以及如何你使用它的前端。这种选择是简单地离开这个数据本身,并支持“老字号”定义你的应用程序作为一种向后兼容性选项。换句话说,你正在做的即时这些翻译,而不是永久的一次性更新。

这是不是真的有一个SQL数据库的选择,因为你必须保持过时的列上,并可能索引。随着DODB,你没有真正浪费任何数据或索引空间。你不得不权衡的缺点优点。

的主要缺点是,很明显,不一致,这可以随时间增长而导致的错误。另一个缺点是可能在即时,或者不能有效利用新的结构这样的计算费用(例如,您可能希望指数只是lastname)。因此,大部分的时间,我想我会选择只运行一个大规模更新。

有一个明显的优点但保留旧文件;如果你不能确定你的重构是完美的 - 例如,如果你的name列中的数据并没有遵循一致的约定,也许在某些情况下,它的lastname, firstname而在其他情况下,它的firstname lastname而在其他情况下,它的company name - 那么做你的即时转换,而不做一个永久的更新允许您优化映射随着时间的推移,这样你就可以使用时所使用的firstnamelastname领域,但回落到name猜谜游戏的遗留数据。

如前所述,我大概预留特殊情况下,我不相信,我就可以得到“重构”正确的每个记录/文档第二个选项。尽管如此,它是提供给您的是,你真的不与其他类型的数据库的选项。

除了这两个,我没有看到任何其他明确的选择。这是一种二元决策的;要么你永久更新现有的数据,也可以没有。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top