2017-02-18 80 views
0

序言:節點JS中的最大可寫入流

我正在試驗「多租戶」平面文件數據庫系統。在啓動應用程序之前,在啓動服務器之前,每個平面文件數據庫(我稱之爲日誌)都被轉換爲內存中的大型javascript對象。從那裏應用程序開始它的服務。

應用程序運行時行爲將服務於來自許多不同數據庫(每個域一個數據庫)的請求。所有讀取僅來自內存對象。雖然任何CRUD都修改內存對象並將其流式傳輸到日誌。

問題: 如果我在內存中有N個已經從平面文件中加載的數據庫對象(假設每個平均大約有1MB),那麼我將通過N個寫入流來處理什麼樣的限制?

+0

用於什麼可寫流?你說你將數據讀入內存,所以我不瞭解可寫流的作用。這些流是否具有文件句柄,或者它們只是您自己的對內存中數據的自定義流抽象? – jfriend00

+0

這跟日誌文件沒什麼兩樣。我正在將內存中的數據庫更改傳輸到一個平面文件中......像這樣'fs.createWriteStream('log.txt',{'flags':'a'})''。我可能有1000個這樣的流打開。我沒有使用已經從日記序列化到內存的數據庫的流。日誌包含數據庫的整個歷史記錄,內存對象只包含最新狀態。我還應該提到。 – Kevin

+1

我問的原因是,如果你使用的只是內存的自定義流,那麼除了來自表示流的Javascript對象的內存之外,沒有任何系統資源被消耗,你唯一的限制就是內存。如果流後面有一個文件句柄,那麼對打開的文件句柄有系統限制,因操作系統和配置而異。 – jfriend00

回答

0

如果您使用的流爲其後的打開文件句柄,那麼您可以打開的文件句柄的數量限制可能會受打開文件句柄上的進程限制的影響,有些情況下),您如何配置該操作系統。每個打開的流也會消耗一些內存,包括流對象和與流關聯的讀/寫緩衝區。

如果您正在使用某種只讀取/寫入內存的自定義流,而不是文件,那麼將不會涉及文件句柄,而只會受到流對象及其緩衝區消耗的內存的限制。你可能有成千上萬的這些沒有問題。

一些參考職位:

Node.js and open files limit in linux

How do I change the number of open files limit in Linux?

Check the open FD limit for a given process in Linux