2013-04-06 108 views
0

流星能夠保持高性能,同時服務於多個不同的用戶?流星多租戶功能

舉例來說,如果我宣佈了下述出版物,允許用戶只能檢索自己的文檔:

Meteor.publish("UserList", function() { 
    return Documents.find({user: this.userId}); 
}); 

而且想象成千上萬的用戶從本出版物餵養,每一個爲自己的文檔。當一個文件被更新時會發生什麼?也就是說,所有的用戶都被告知他們的名單可能已經改變了?服務器是否爲所有可能的用戶執行查詢並只通知那些重要的用戶? Meteor如何在這種情況下保持性能?

或者有沒有更好的方法來實現Meteor的多租戶?

回答

1

在這種情況下,只有訂閱了該發佈功能的用戶才能獲得更新。

流星將發送集合到該特定訂閱的任何更改。用戶沒有被告知文檔可能已經改變,他們只是簡單地發送數據更改。 DDP有一種'crud'告訴客戶該做什麼,即刪除,更新,插入..

如果您的Documents.find以上,該特定用戶將只發送他們的更新和其他用戶贏得根本沒有通知。

因爲在0.5.7中有一些變化,所以我不是100%確定的,但是對於通過DDP的每個連接都會有訂閱,每個都有自己的查詢(即使查詢與其他訂閱相同) 。它看起來很快就會在trello上實現緩存:https://trello.com/card/improve-server-side-performance-of-subscriptions/508721606e02bb9d570016ae/10

DDP仍處於pre1版本,但我想這將在路上進一步優化,特別是對於不太可能的查詢每個訂閱(IE的Documents.find()代替Document.find({user:this.userId})

有關DDP協議全規格獨特看看:https://github.com/meteor/meteor/blob/master/packages/livedata/DDP.md