【发布时间】:2013-08-13 22:03:34
【问题描述】:
在以下两个选项中维护 MongoDB 中数据一致性的最佳实践、权衡或有效性是什么?
- 使用 cron 作业进行手动缓存(也就是存储冗余数据并使用脚本定期传播更改)
- 每次动态加载数据,但有缓存层(或利用内置的 mongodb 缓存)
例如,假设有comments 和users。使用选项 1,每个 comment 将包含:
{
user_id:
user_displayname:
user_gravatar:
[comment fields]
}
如果user 决定更改他或她的显示名称,user 对象会更改,但脚本也会运行所需的 MongoDB 命令来更新所有user 的comments 以反映更改。
使用选项 2,每个 comment 将包含:
{
user_id:
[comment fields]
}
如果user 决定更改他或她的显示名称,它只会在user 对象本身中更改。当comment 被访问而不命中缓存时,它会将user 对象与缓存中的comment 对象相关联。这样以后,如果在此comment 仍在缓存中时再次访问它,则user 和comment 查询都将被跳过。 (我基本上是在描述内置的 MongoDB 缓存吗?)
是否值得做选项 1 中描述的数据冗余?或者 MongoDB 是否足够聪明以至于已经缓存了额外但等效的查询?或者是否值得使用 Redis 等其他东西自己制作缓存层?
谢谢!
【问题讨论】: