推荐的文件大小? (许多小文档与较少的大文档)
Recommended document size? (Many small documents vs. Fewer large documents)
假设我想每天存储一些关于用户如何使用应用程序的统计数据。用户应该能够查看这些统计数据,了解每日、每周、每月和每年的使用情况。
您是否建议每天在数据库中创建一个 _id
为 stats + localeDateString
的新文档,或者创建一个名为 stats
的文档,它基本上是一个嵌套对象并存储不同的年、月、日?
我看到只创建一个文档的缺点是它可能会随着时间的推移变得非常大,并变成一个昂贵的读/写/同步操作。
相反,如果我每天创建一个新文档,我最终会得到数百个文档。因此,如果用户想查看他一整年的统计数据,我需要从数据库中检索 365 个文档并将它们合并。这听起来也不太好。
您建议使用更少和更大的文档还是更多和更小的文档?
总体思路是将一起变化的数据存储在一起。在几乎所有情况下,使用许多、小的、不变的文档比更新的单个(或几个)文档更好。
这是因为要更新文档,您需要先获取整个文档,解析 json,更新 json,然后重新上传整个文档,即使单字节改变。这变得非常糟糕,而且很快,如果多个进程同时访问文档,更新冲突的发生率将会增加。
相比之下,不可变方法速度快,并且不受并发更新冲突的影响。因此,在您的情况下,每天创建一个文档,但使用视图使用 reduce 进行聚合。
我写了这篇文章:https://blog.cloudant.com/2019/11/21/Best-and-Worst-Practices.html -- 它适用于 Cloudant,但大部分想法也应该适用于 PouchDB。
假设我想每天存储一些关于用户如何使用应用程序的统计数据。用户应该能够查看这些统计数据,了解每日、每周、每月和每年的使用情况。
您是否建议每天在数据库中创建一个 _id
为 stats + localeDateString
的新文档,或者创建一个名为 stats
的文档,它基本上是一个嵌套对象并存储不同的年、月、日?
我看到只创建一个文档的缺点是它可能会随着时间的推移变得非常大,并变成一个昂贵的读/写/同步操作。
相反,如果我每天创建一个新文档,我最终会得到数百个文档。因此,如果用户想查看他一整年的统计数据,我需要从数据库中检索 365 个文档并将它们合并。这听起来也不太好。
您建议使用更少和更大的文档还是更多和更小的文档?
总体思路是将一起变化的数据存储在一起。在几乎所有情况下,使用许多、小的、不变的文档比更新的单个(或几个)文档更好。
这是因为要更新文档,您需要先获取整个文档,解析 json,更新 json,然后重新上传整个文档,即使单字节改变。这变得非常糟糕,而且很快,如果多个进程同时访问文档,更新冲突的发生率将会增加。
相比之下,不可变方法速度快,并且不受并发更新冲突的影响。因此,在您的情况下,每天创建一个文档,但使用视图使用 reduce 进行聚合。
我写了这篇文章:https://blog.cloudant.com/2019/11/21/Best-and-Worst-Practices.html -- 它适用于 Cloudant,但大部分想法也应该适用于 PouchDB。