一般来说,我想知道查询(以及索引)无模式数据结构的最佳实践是什么?(即文件)
假设我使用 MongoDB 在集合中存储和查询确定性数据结构。此时所有文档都具有相同的结构,因此我可以轻松地为我的应用程序中的任何查询创建索引,因为我知道每个文档都有索引所需的字段。
更改结构并尝试将新文档保存到数据库后会发生什么?假设我将两个字段 FirstName 和 Lastname 加入到 FullName。因此,该集合包含不确定的数据。我在这里看到两个问题:
- 旧索引无法覆盖新数据,因此需要处理新旧字段的新索引
- 应用程序应该负责处理文档的两种表示形式
当数据库中有许多更改导致文档结构的多个版本时,这可能会导致一个大问题。
我看到两种主要方法:
- 懒惰的迁移。这意味着每个文档都按需迁移(即仅在从集合加载后)到最终结构,然后存储回集合。这种方法实际上并不能解决问题,因为它在任何时候都承认不确定性。
- 强制迁移。这与 RDBMS 迁移的方法相同。在应用程序未运行时,在某一时间点对所有文档执行迁移。主要缺点是应用程序的停机时间。
那么问题来了:有什么好的方法可以解决这个问题,尤其是在没有应用程序停机的情况下?