2016-01-24 50 views
2

當我啓動meteor實例時,我當前使用env變量 「MONGO_URL」:「mongodb:// localhost:27017/dbName」爲我的流星應用程序分配一個mongodb。流星:爲每個用戶使用不同的數據庫

因此,所有的數據被寫入到一個名爲「DBNAME」蒙戈數據庫。 我正在尋找一種方法來爲每個客戶登錄時單獨設置dbName,以便將他們的數據分離到不同的數據庫中。

+0

爲什麼要將客戶數據分爲不同的數據庫? –

+0

@BrettMcLain因爲我的客戶本身就是企業。然後,他們將能夠在其指定的數據庫中創建自己的用戶。在提供B2B解決方案時運行獨立的數據庫通常是一種很好的做法。一個好處是,如果我的一位客戶需要從備份中恢復數據,則不會有其他用戶受到影響。 – Chris

回答

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

這將允許您在蒙戈網址定義數據庫名稱,但將需要額外的工作公平位來重新定義客戶的集合以客戶爲基礎。

+0

實際上鍊接的文章中提到的解決方案: VAR數據庫=新MongoInternals.RemoteCollectionDriver( 「」); MyCollection = new Mongo.Collection(「collection_name」,{_driver:database}); 這就要求改變DB畢竟收藏的相當長的一段重構和重新初始化,但它應該在理論上 – Chris

+0

@克里斯我看到了,但沒想到它實際工作的工作。我希望它適合你!如果它與您的解決方案一起使用,請發回gere。 –

0

這裏的另一種方法,這將使你的生活永遠簡單:

  1. 在mysite.com創建沒有賬戶通用站點
  2. 當他們登錄在mysite.com,弄清楚它們實際上屬於什麼網站並重定向到customerName.mysite.com並在每個站點記錄他們在那裏
  3. 運行流星配置不同蒙戈的一個單獨的實例

nginx的MI ght幫助你完成上述任務。

它總體上是好的做法提供B2B 解決方案時,單獨運行的DB。

這是見仁見智的問題,在很大程度上取決於平臺。許多SaaS提供商會爭論這一點。

+0

其實我使用單DB辦法此刻我的SaaS,但我最近有一個客戶希望他們的數據逆轉了前幾天的狀態的情況下,這是一個噩夢要做到這一點,而不會影響其他人的數據... 。運行多個流星實例可能是最簡單的解決方案,但是當您擁有很多不同的客戶並且流量很少時,這種方法變得不切實際。 – Chris

相關問題