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

Posted

技术标签:

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

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

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

【问题讨论】:

Can I get multiple different Meteor apps running reactively off the same MongoDB instance?的可能重复 @DavidWeldon,我不认为这是重复的,他只是希望共享数据库的一部分。 【参考方案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 应用的用户集合。

【讨论】:

以上是关于我可以将同一个数据库用于多个 Meteor 应用程序吗?的主要内容,如果未能解决你的问题,请参考以下文章

将 Meteor Cordova 构建的应用程序连接到本地服务器和数据库

在 Meteor 的测验应用程序中显示提示

Meteor 如何使用多个 .less 文件

Meteor如何使用多个.less文件

Meteor 在哪里存储它的数据?

Meteor 如何执行数据库迁移?