Mongodb 如果需要,每次在字段或查询中保存追随者数量

Mongodb 如果需要,每次在字段或查询中保存追随者数量,mongodb,database-design,mongoose,database,Mongodb,Database Design,Mongoose,Database,我想创建一个类似Twitter的应用程序。现在我有一个关于这个项目数据库架构的问题。我想在他/她的个人资料(如Twitter)中显示每个用户的关注者/关注者数量,但我不知道每次都必须从关注者/关注者表/集合中查询,或者该值可以是用户记录中两个单独的小字段?如果我每次都查询,肯定会占用很多时间和数据库开销。另一方面,如果我为每个用户保存两个字段,当有更改时,我必须执行两个操作,修改关注者或下表以及用户记录中的这两个字段。我的数据库将是巨大的和非常大的数据量 哪种方法是好的和标准的?好吧,这取决于它

我想创建一个类似Twitter的应用程序。现在我有一个关于这个项目数据库架构的问题。我想在他/她的个人资料(如Twitter)中显示每个用户的关注者/关注者数量,但我不知道每次都必须从关注者/关注者表/集合中查询,或者该值可以是用户记录中两个单独的小字段?如果我每次都查询,肯定会占用很多时间和数据库开销。另一方面,如果我为每个用户保存两个字段,当有更改时,我必须执行两个操作,修改关注者或下表以及用户记录中的这两个字段。我的数据库将是巨大的和非常大的数据量


哪种方法是好的和标准的?

好吧,这取决于它是为谁准备的

如果是你的用户,他们可以看到他们有多少追随者。只有当用户登录到您的服务时,我才会调用这个twitterapi

如果出于某种原因,必须为所有用户执行此操作。我认为最好的方法是执行此api调用,例如每小时一次、每秒钟一次或每天一次。这可以通过在cron中运行的脚本来实现

你真的需要追随者还是仅仅关注追随者?或者两者都有

如果两者都有,您可以请求Twitter用户的关注者,并将其限制为100(如果您的cron每分钟运行一次,则每15分钟运行一次)。然后根据数据库循环这些跟随者ID,并继续插入它们,直到匹配为止。Twitter默认返回所有最新的追随者id:s。所以这在此刻是可能的

请记住,在请求追随者时,您只能针对Twitter API对每个用户发出15个请求令牌。此限制在不同端点之间可能有所不同

值得一提的是,我假设您只获得跟随者ID。那些你一次可以得到5000英镑。如果要请求跟随者对象,则每个请求的限制仅为200


希望这有帮助:好吧,如果你想知道什么是正确的,只有一个答案

  • 用户记录中的每个单独字段都包含派生数据(可以通过查询轻松派生的数据)。因此,它构成了重复。因此,它无法正常化

  • 正常化失败的后果是,您有一个更新异常。你不再在一个地方有一个事实,你在两个地方有一个事实。每次一个事实发生变化时,每次跟随者/跟随者/用户发生变化时,您都必须更新它们。在交易中

  • 这不是针对性能问题的“权衡”,而是犯罪。当两个地方的事实“不同步”时,你的罪行就会暴露出来。您将不得不重新访问应用程序和数据库,并执行一些艰苦的劳动来进行修改。你可能要做几次。直到你消除了因果关系

  • 演出 至于数据库的负载,如果您的应用程序是认真的,并且您希望明年能够投入业务,那么就使用一个真正的SQL平台

    在商业平台上,此需求的人口或负载根本不是问题。你总是得到你所付出的,所以付出一些有价值的东西,得到一些有价值的东西


    请注意,如果您有数百万用户,这并不意味着您每个用户有数百万追随者。请注意,您的文件将被编入索引,因此您不会追踪1600万用户来统计25个关注者,您的索引将允许您在极少数页面中最多25个索引行中识别25个关注者。这种担忧在商业平台上根本不存在,它是没有平台的人的担忧。

    你知道,我根本不想使用Twitter!我只是创建了我自己的应用程序,这是一个类似twitter的服务,它有自己的数据库。我想知道哪种方法是正确的?谢谢。我不想去,也不能去企业服务部。我必须在自己的服务器上设计自己的体系结构。然后你说,如果我有很好的指数,那就没什么大不了的了?我不想有一个缓慢的服务。第一年,我可能有200万用户。@Fooder。对(a) 编辑您的问题,包括CREATETABLE命令的完整DDL,包括索引,我将给您确认或更正它们的命令。(b) 你不断重复用户数量,我必须重复每个用户数量的跟随者。@Fooder。请投票重新开始这个问题。太棒了。在问题被回答四个小时后,五个人投票决定结束这个问题,证明它不是“太宽泛”或“回答太长”。“民主”在起作用。