我可以为多个 Meteor 应用程序使用同一个数据库吗?

Can I use the same DB for multiple Meteor apps?

用例:我在 app.foo.com 上构建的应用程序和在 community.foo.com 上构建的 telescope 实例在不同的应用程序服务器上。他们唯一要分享的 collection 是 users。我会给两个应用程序相同的 mongo url 和 oplog url,并确保除了 users、collection 名称在两者之间没有重叠应用。

这应该可以正常工作吗?有任何性能问题吗?

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

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

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

这是属于 API 层或单独服务的那种功能。

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

我可以推荐几个:

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

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

有些还提供让一个应用程序成为主应用程序,对用户进行身份验证,然后告诉服务谁登录了,这样您就可以从您的另一个应用程序检索数据(在 hull,我们称之为自带用户)

问题在于您必须共享 collection 个名称。

如果您使用您的数据库,您还可以避免 Telescope 突然使用您的其他应用程序在未来版本中使用的 collection 名称。

您可以做的是分享userscollection如果您愿意。

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

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 应用的用户 collection。