流星:为每个用户使用不同的数据库

问题描述:

当我启动meteor实例时,我当前使用env变量 “MONGO_URL”:“mongodb:// localhost:27017/dbName”为我的流星应用程序分配一个mongodb。流星:为每个用户使用不同的数据库

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

+0

为什么要将客户数据分为不同的数据库? –

+0

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

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

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 }); 

这将允许您在蒙戈网址定义数据库名称,但将需要额外的工作公平位来重新定义客户的集合以客户为基础。

+0

实际上链接的文章中提到的解决方案: VAR数据库=新MongoInternals.RemoteCollectionDriver( “”); MyCollection = new Mongo.Collection(“collection_name”,{_driver:database}); 这就要求改变DB毕竟收藏的相当长的一段重构和重新初始化,但它应该在理论上 – Chris

+0

@克里斯我看到了,但没想到它实际工作的工作。我希望它适合你!如果它与您的解决方案一起使用,请发回gere。 –

这里的另一种方法,这将使你的生活永远简单:

  1. 在mysite.com创建没有账户通用站点
  2. 当他们登录在mysite.com,弄清楚它们实际上属于什么网站并重定向到customerName.mysite.com并在每个站点记录他们在那里
  3. 运行流星配置不同蒙戈的一个单独的实例

nginx的MI ght帮助你完成上述任务。

它总体上是好的做法提供B2B 解决方案时,单独运行的DB。

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

+0

其实我使用单DB办法此刻我的SaaS,但我最近有一个客户希望他们的数据逆转了前几天的状态的情况下,这是一个噩梦要做到这一点,而不会影响其他人的数据... 。运行多个流星实例可能是最简单的解决方案,但是当您拥有很多不同的客户并且流量很少时,这种方法变得不切实际。 – Chris