使用MongoDB的Twitter练习和缺少交易?

使用MongoDB的Twitter练习和缺少交易?,mongodb,twitter,Mongodb,Twitter,我试图弄清楚MongoDB是否需要事务,以及为什么不能将所有内容都放在一个文档中。我也知道twitter使用HBase,它确实有事务,所以我想到了tweet和watchers 如果我发布一条推文,它将毫无问题地插入。但我或其他人如何找到我的推文?我听说mongodb有索引,所以也许我可以索引作者并找到我的tweet,但是如果每个人都这么做,我无法想象这样会有效率。时间也必须被索引 因此,据我所知(我想我看到了twitter发布的一些幻灯片),twitter有一个“时间线”,因此每次一个人推特推特

我试图弄清楚MongoDB是否需要事务,以及为什么不能将所有内容都放在一个文档中。我也知道twitter使用HBase,它确实有事务,所以我想到了tweet和watchers

如果我发布一条推文,它将毫无问题地插入。但我或其他人如何找到我的推文?我听说mongodb有索引,所以也许我可以索引作者并找到我的tweet,但是如果每个人都这么做,我无法想象这样会有效率。时间也必须被索引

因此,据我所知(我想我看到了twitter发布的一些幻灯片),twitter有一个“时间线”,因此每次一个人推特推特时,twitter都会在每个人的时间线中插入推特ID,该时间线按日期索引,当给定用户浏览时,它会获取按时间排序的可用推特


在mongodb中如何实现这一点?我能想到的唯一解决办法是在tweet文档中有一个列,上面写着{SendOut:DateStamp},该列在完成后被删除。如果它没有在第一次尝试时完成(检查时间戳猜测它是否应该在现在完成),那么我需要检查所有观察者,看看谁没有收到它,如果没有,则插入。但是由于没有事务,我想我需要索引发送列?这个解决方案有效吗?我如何有效地插入推文,并将其发送给所有关注该用户的人?(如果这个解决方案不起作用)

听起来你在描述一个类似于发布/订阅的模型。你不能用用户上次阅读的每个用户对象来跟踪最后一篇文章(按日期)吗?用户将以同样的方式请求tweet,使用包括时间在内的各种索引

我不确定您需要事务做什么,但Mongo确实支持原子操作

[更新]

换句话说,每个用户的对象存储最后一条tweet读取/发送的日期时间。显然,您还需要订阅的作者ID列表。要获取新的tweet,您需要根据author_id、time属性对tweet进行索引,然后按时间排序

通过使用用户对象的最后读取日期并将其作为tweets集合的第二个索引,我认为您不需要发布/订阅或事务来完成这项工作


不过我可能遗漏了一些东西。

我不知道你所说的“你能不能用用户上次阅读的每个用户对象来跟踪最后一篇文章(按日期)”是什么意思。我认为时间不是一个好的索引,因为每分钟有数千条推特,大多数你都不关心。如果你观察100个人(这是一个很低的数字)并且帖子由作者编入索引,那么服务器上的1k用户在第二次搜索他们的100个朋友时可能需要花费大量的时间。我认为时间表或交付清单将是唯一合理的解决方案,但我无法思考如何实施,除非在我的QI中提到,我已经在帖子中扩展了内容-这有意义吗?