【问题标题】:Where to store public user state in Meteor?Meteor 在哪里存储公共用户状态?
【发布时间】:2013-06-26 11:17:46
【问题描述】:

假设我有聊天室作为 Meteor 应用程序的一部分,并且在每个聊天室中,用户应该看到聊天室中还有谁,以及所有其他聊天室中的用户数量。

我应该将每个用户所在的聊天室存储在哪里?应该是

  • 在提供的Meteor.users 集合中,作为每个用户下的属性?
  • Chatrooms 集合中,作为每个聊天室中的用户列表?
  • 什么是非规范化数据的正确方法,以便用户无需推送所有这些用户记录即可查看其他聊天室中的人数?

一个相关问题:我什么时候应该将东西存储在 Meteor.users() 中,而不是包含用户 ID 和房间文档的单独集合,例如 ChatroomParticipants?即:

{ user: "foo", room: "room 1" }
{ user: "bar", room: "room 2" }

此外,有没有办法进行设置,以便用户可以从多个窗口登录到同一个应用程序并处于不同的房间?也就是说,特定用户的呈现不依赖于使所有内容在会话之间发生变化的某些全局状态。

【问题讨论】:

    标签: collections meteor state denormalization


    【解决方案1】:

    在这种情况下,你应该让它写在Meteor.users 文档上。您将读/写集中在一个文档中的次数越少越好,因此它不会成为瓶颈。看看meteor-presence 是如何在高级用法中实现的。

    【讨论】:

    • 您能否提供一个参考,说明为什么集中在一个文档上会更糟糕?
    • 另外,使用Meteor.users 和单独的包含用户记录的ChatroomParticipants 集合和他们对应的聊天室有什么区别吗?
    • 我曾经看过一个谷歌视频/幻灯片,解释如何在 GAE 数据存储(他们的可扩展 NoSQL)上做一个博客,但我找不到它。第二个问题是:你可以两者都做,但你不需要。知道在哪里找到东西会更加困难,因为您有多个集合。想象一下,将来您将为用户提供更多 2 个属性。您要创建更多两个单独的集合吗?希望这是有道理的,因为我不知道如何在这里解释。
    • 问题是,如果我将每个用户的聊天室存储在 users 集合中,我无法通过简单的查询来获取每个聊天室中的用户数。至少,与索引ChatroomParticipants 中的几个字段相比,它似乎效率很低。
    • 是的,这是真的。也许最好在meteor-talk或irc频道上问。
    猜你喜欢
    • 2022-08-15
    • 2021-09-27
    • 2012-04-07
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    相关资源
    最近更新 更多