我通過mongoosejs ODM的文檔看了一下,發現如下: http://mongoosejs.com/docs/querystream.htmlMongoose.js:什麼是QueryStreams
是幹什麼用的呢?我能用他們做什麼?
我不知道,如果它們被用於流媒體文件或動態地更新查詢...
問候
我通過mongoosejs ODM的文檔看了一下,發現如下: http://mongoosejs.com/docs/querystream.htmlMongoose.js:什麼是QueryStreams
是幹什麼用的呢?我能用他們做什麼?
我不知道,如果它們被用於流媒體文件或動態地更新查詢...
問候
嗯,這是所有關於API。
QueryStream
允許使用ReadStream
的API,這樣才能體會QueryStream
,您需要了解更多關於ReadStream
/WriteStream
。
有許多優點:
的想法是,它給你一個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
,文件或其他任何東西都沒關係。只要它實現了一個可寫的流,它應該可以在沒有改變的情況下工作。
希望我說得更清楚。
嗨,所以如果我理解你正確的QueryStream將是一個好主意,如果我在mongodb中存儲視頻,並希望將它們流到客戶端。我可以暫停/恢復並選擇,也不必等到從db加載的所有內容,而是使用字符串數據的普通文檔。在那裏,我只有統一的API作爲好處,還是有其他的優點?或者我可以使用QueryStream來處理類似消息系統的東西(沒有二進制文件,buffs)? – bodokaiser 2012-07-20 07:28:51
@kyogron您不必使用'QueryStream'來避免將完整的結果集加載到內存中,使用query.each()也會對其進行流式處理,但不會將其與流式API混淆。擁有標準的API使得編程更加明顯和可插入。 QueryStream確實是一個流,但每個塊代表一個(整個)文檔。另外,MongoDB(當前)每個文檔有16MB的限制。如果您打算將視頻存儲在MongoDB中,則需要將每個文件分割成多個文檔,但您要查找的內容已經存在,請查看「GridFS」。你能澄清消息傳遞的例子嗎? – samitny 2012-07-20 18:24:25
@kyogron另外,我在答案中增加了一個API優勢的例子。 – samitny 2012-07-20 20:52:37