2012-07-19 36 views

回答

5

嗯,這是所有關於API。

QueryStream允許使用ReadStream的API,這樣才能體會QueryStream,您需要了解更多關於ReadStream/WriteStream

有許多優點:

  • 可以處理大量的數據,這些數據你會在同一時間內獲得儘可能「塊」,所以存儲器包含一個項目(可以一個數據庫文件, DB行,從文件的單行等)
  • 您可以暫停/恢復流(S)
  • 可以通過管道讀 - >寫的很容易

的想法是,它給你一個unif用於讀寫操作的API

要回答你的問題:「我能做些什麼,與他們」:

你可以做任何事情,有或無的node.js的流API,但它肯定使得它更清晰,更容易當有某種標準的使用。

此外,node.js的流是基於事件(基於EventEmitter),因此它有助於解耦。


編輯:

這是更多關於流的方面。在Mongoose的情況下,一個塊包含一個文檔。

爲了澄清API的優勢:

的node.js的http.ServerResponse是可寫流,這意味着你應該能夠在單線上串流Mongoose的結果集到瀏覽器:

// 'res' is the http response from your route's callback. 
Posts.find().stream().pipe(res); 

問題是,如果你正在寫http.ServerResponse,文件或其他任何東西都沒關係。只要它實現了一個可寫的流,它應該可以在沒有改變的情況下工作。


希望我說得更清楚。

+0

嗨,所以如果我理解你正確的QueryStream將是一個好主意,如果我在mongodb中存儲視頻,並希望將它們流到客戶端。我可以暫停/恢復並選擇,也不必等到從db加載的所有內容,而是使用字符串數據的普通文檔。在那裏,我只有統一的API作爲好處,還是有其他的優點?或者我可以使用QueryStream來處理類似消息系統的東西(沒有二進制文件,buffs)? – bodokaiser 2012-07-20 07:28:51

+0

@kyogron您不必使用'QueryStream'來避免將完整的結果集加載到內存中,使用query.each()也會對其進行流式處理,但不會將其與流式API混淆。擁有標準的API使得編程更加明顯和可插入。 QueryStream確實是一個流,但每個塊代表一個(整個)文檔。另外,MongoDB(當前)每個文檔有16MB的限制。如果您打算將視頻存儲在MongoDB中,則需要將每個文件分割成多個文檔,但您要查找的內容已經存在,請查看「GridFS」。你能澄清消息傳遞的例子嗎? – samitny 2012-07-20 18:24:25

+0

@kyogron另外,我在答案中增加了一個API優勢的例子。 – samitny 2012-07-20 20:52:37

相關問題