我可以将同一个数据库用于多个 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 应用程序吗?的主要内容,如果未能解决你的问题,请参考以下文章