一位Mongo noob在这里希望得到一些关于我是否在思考太多' MySQL'以及如果是这样,如何以不同的方式解决这个问题的反馈。
对于一个项目,我一直在尝试使用MongoDB在社交/视频平台上存储个人用户行为。例如,在Reddit上,我希望定期跟踪从一组subreddits评论frontpage帖子的用户,然后查看是否有活动与其他subreddits重叠。收集数据后,我希望将其存储在单个用户是单个文档的位置,如下所示:
{
"_id" : ObjectId("57a9af8172cad6fcaa916963"),
"name" : "example_user_1",
"data" : [
{
"subreddit" : ObjectId("57a9af2336a21c2f343dccad"),
"thread" : ObjectId("57a9af2436a21c2f343dccae"),
"time" : ISODate("2016-08-09T12:25:05.061Z")
},
{
"subreddit" : ObjectId("57a9af2336a21c2f343dccad"),
"thread" : ObjectId("57a9af2436a21c2f343dccae"),
"time" : ISODate("2016-08-09T12:25:05.061Z")
}
]
}
基本上,这些是不规则的时间序列数据集,每当我看到用户评论时,我都会将他的位置和时间推送到“数据”中。阵列。 subreddit和线程ObjectID引用回另一个集合,我已经存储了这些subreddit和线程的一些元数据。
我的问题:
1)这是正确的方法吗?为此目的使用MongoDB?它有一种关系感,但我不确定如何以另一种方式存储所有这些数据(同时保持查询聚合用户行为很容易)。
2)目前,我使用ObjectID来存储从另一个集合引用的subreddit和线程ID。然而,使用12字节的ObjectID对于引用subreddits感觉效率低(在MySQL中,tinyint就足够了,每个数据点为2个字节)。我到处都读到MongoDB中的自动增量是一个很大的不,但是这适用于此吗?
我已定期阅读this有关时间序列数据的文章(在我的情况下不适用),以及this关于不规则时间序列的文章,这对我来说不是一个理想的选择,因为我的时间序列可能非常不规则,以至于创建具有开始和结束日期的段可能效率低于每个系列添加日期。