我试图弄清楚 MongoDB 是否需要事务,以及为什么你不会将所有内容都放在一个文档中。我也知道 twitter 使用确实有交易的 HBase,所以我想到了一条推文和观察者。
如果我发布推文,它将毫无问题地插入。但是我或其他人如何找到我的推文?我听说 mongodb 有索引,所以也许我可以索引作者并找到我的推文,但是我无法想象如果每个人都这样做会很有效率。时间也必须被索引。
所以据我了解(我想我看到了一些推特发布的幻灯片)推特有一个“时间线”,所以每次一个人发推文时,推特都会在每个人的时间线中插入推文 ID,该时间线按日期索引,当给定用户浏览时,它会抓取可用的推文排序时间。
这将如何在 mongodb 中完成?我能想到的唯一解决方案是在推文文档中有一列写着 {SendOut:DateStamp},完成后将其删除。如果它在第一次尝试时没有完成(检查时间戳以猜测它现在是否应该完成),那么我需要检查所有观察者,看看谁没有收到它,如果没有则插入。但也因为没有交易,我想我需要索引 SendOut 列?这个解决方案行得通吗?我如何有效地插入推文并将其提供给所有观看用户的人?(如果此解决方案不起作用)