2013-10-24 44 views
0

我們有一個基於Meteor的系統,它基本上輪詢來自第三方REST API的數據,循環檢索數據,插入或更新每個記錄到Meteor集合中。將來自第三方的JSON數據「鏡像」到Meteor Collection的最佳方法

但後來它打我:從第三方的數據中刪除條目時會發生什麼?

  • 可以說插入/更新數據,然後遍歷集合並找出哪一個不在提取的數據中。誠然,這是一種做法。

  • 另一種方法是清除集合,並重寫所有的數據。

但有成千上萬的條目(目前在1500+條記錄中,可能會爆炸),兩者似乎都非常緩慢且CPU消耗。

將數據從JS對象鏡像到Meteor/Mongo集合的最優化過程是什麼,這樣從數據中刪除的項目也會在集合上被刪除?

我認爲代碼在這裏是無關緊要的,因爲這可能適用於其他語言可以做類似的壯舉。

+0

可以給我們一些像數據大小,一致性要求,訪問模式的背景嗎?現在看來你可以用某種內存數據庫而不是MongoDB做得更好。 – zero323

+0

當你說「通過集合循環」你的意思是查詢?或者是你已經淘汰的第三個選項? – user728291

+1

你想在這裏實現什麼目標?我認爲如果你想使用第三方數據作爲Meteor collection,你最好把它保存在內存中並且僞造收集行爲。順便說一句,流星以約5秒的時間間隔輪詢Mongo,所以在這裏1秒是有點矯枉過正。 –

回答

1

對於這種用法,嘗試使用更優化的東西。流星傢伙正在使用流星作爲一種複製品mongodb來獲取/設置數據。

目前有Smart-Collections使用mongodb的oplog來顯着提升性能。它可以在不考慮具體情況的情況下適用於所有場景。有benchmarks顯示這一點。

當Meteor 1.0出來時,我認爲他們會優化他們自己的mongodb驅動程序。

我認爲這可能有助於成千上萬的條目。如果您每秒鐘更改數千個文檔,則需要更接近MongoDB。 Meteor採用了許多緩存技術,這些技術對於這一點並不是太理想。我認爲它每5秒輪詢一次數據庫來刷新它的緩存。

智能類別:http://meteorhacks.com/introducing-smart-collections.html

請不要讓知道,如果有幫助,我想知道如果在這種情況下非常有用。

如果這樣不起作用,由於所有內容都存儲在內存中,所以redis也可能會有所幫助。不確定你的用例是什麼,但是如果你不需要持久性,redis會比mongo更多的性能。

相關問題