【问题标题】:Can I use the same DB for multiple Meteor apps?我可以将同一个数据库用于多个 Meteor 应用程序吗?
【发布时间】:2015-03-24 00:35:35
【问题描述】:

用例:我在app.foo.com 上构建的应用程序,以及community.foo.com 上的望远镜实例,在不同的应用程序服务器上。他们共享的唯一集合是users。我会为这两个应用程序提供相同的 mongo url 和 oplog url,并确保除了 users 之外,两个应用程序之间的集合名称没有重叠。

这应该可以吗?任何性能问题?

【问题讨论】:

标签: meteor meteor-accounts telescope


【解决方案1】:

这完全没有问题。例如,有一个面向用户的应用程序和一个管理应用程序是一个常见的用例,它们都使用相同的数据库。

【讨论】:

  • 是的。没问题。您可以像往常一样发布和订阅。 mongo oplog 将使所有应用程序保持同步。
【解决方案2】:

这不应该在数据库级别完成:

当这两个应用程序中的任何一个发展时,它们可能会破坏自己或另一个。

这是属于 API 层或单独服务的那种特性。

这样,您就拥有一个用户身份服务来处理身份验证(甚至是跨域)和基本用户数据,并将每个应用特定的用户信息留在您的生态系统中它自己的一部分。没有崩溃的风险。

我可以推荐几个:

  • Firebase
  • 解析
  • Hull.io(免责声明:我是创始人)
  • Auth0
  • 登录半径

其中大部分都有客户端库,您可以使用这些库来处理身份验证并将当前登录的用户 ID 传回您的应用。

有些还提供让一个应用成为主应用,对用户进行身份验证,然后告诉服务谁已登录,这样您就可以从其他应用中检索数据(在船体上,我们称之为自带用户)

【讨论】:

    【解决方案3】:

    这样做的问题是您必须共享集合名称。

    如果您使用自己的数据库,那么您也会因为 Telescope 突然使用您的其他应用在未来版本中使用的集合名称而受到保障。

    您可以做的是根据需要分享users 集合。

    服务器端代码(客户端不需要)

    Accounts.connection = DDP.connect("https://<telescope app url>");
    
    Meteor.users = new Mongo.Collection("users", {
        _preventAutopublish: true,
        connection: Accounts.connection
    });
    

    或者更直接(如果您允许 OAuth 登录,则不推荐)

    var database = new MongoInternals.RemoteCollectionDriver("<mongo url of telescope app>");
    Meteor.users = new Mongo.Collection("users", { _driver: database });
    

    所以这个应用现在使用 Telescope 应用的用户集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 2013-04-07
      • 2016-03-19
      相关资源
      最近更新 更多