【问题标题】:meteor: use different database for each user流星:为每个用户使用不同的数据库
【发布时间】:2016-04-30 19:44:15
【问题描述】:

我目前使用 env 变量将 mongodb 分配给我的流星应用程序 "MONGO_URL": "mongodb://localhost:27017/dbName" 当我启动流星实例时。

所以所有数据都被写入名为“dbName”的 mongo 数据库。 我正在寻找一种在登录时为每个客户单独设置 dbName 的方法,以便将他们的数据分离到不同的数据库中。

【问题讨论】:

  • 为什么要将客户数据分离到不同的数据库中?
  • @BrettMcLain 因为我的客户本身就是企业。然后,他们将能够在指定的数据库中创建自己的用户。在提供 B2B 解决方案时,运行单独的数据库通常是一种很好的做法。一个优点是,如果我的一位客户需要从备份中恢复他们的数据,其他用户不会受到影响。

标签: mongodb meteor


【解决方案1】:

这通常不受支持,因为这是在启动时定义的。但是,这个线程提供了一个可能的解决方案:

https://forums.meteor.com/t/switch-database-while-meteor-is-running/4361/6

var database = new MongoInternals.RemoteCollectionDriver("<mongo url>"); 

MyCollection = new Mongo.Collection("collection_name", { _driver: database });

这将允许您在 mongo url 中定义数据库名称,但需要相当多的额外工作来逐个客户重新定义您的集合。

【讨论】:

  • 实际上链接的文章提到了一个解决方案: var database = new MongoInternals.RemoteCollectionDriver(""); MyCollection = new Mongo.Collection("collection_name", { _driver: database });这需要在更改数据库后对所有集合进行相当多的重构和重新初始化,但理论上它应该可以工作
  • @Chris 我看到了,但不认为它真的有效。我希望它对你有用!如果它与您的解决方案一起使用,请回帖。
【解决方案2】:

这是另一种让您的生活永远更轻松的方法:

  1. 在 mysite.com 上创建一个没有帐户的通用网站
  2. 当他们登录 mysite.com 时,找出他们实际属于哪个站点并将他们重定向到 customerName.mysite.com 并在那里登录
  3. 为每个站点上的不同 mongo 运行单独的 Meteor 实例

nginx 可能会帮助您解决上述问题。

在提供 B2B 时运行单独的数据库通常是一种很好的做法 解决方案。

这是一个很大程度上取决于平台的意见问题。许多 SaaS 提供商会争论这一点。

【讨论】:

  • 我现在确实为我的 SaaS 使用了单一数据库方法,但我最近遇到了一个客户希望他们的数据恢复到前几天状态的案例,如果没有这样做是一场噩梦影响其他人的数据....运行多个流星实例可能是最简单的解决方案,但当您有许多不同的客户且个人流量很少时变得不切实际。
猜你喜欢
  • 1970-01-01
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
相关资源
最近更新 更多