Filesystems

在 ext4 文件系統的目錄中包含許多文件的後果是什麼?

  • November 23, 2016

我的任務是在磁碟上儲存 JSON 列表(不使用任何數據庫),我有以下選項:

  • 將它們儲存在一個大文件中。
  • 將它們儲存在單獨的文件中,由它們的 ID 鍵入。

我個人更喜歡第二種選擇,因為它允許通過 ID 直接定址任何 JSON,而無需接觸任何其他 JSON。但是,幾乎有 0.1 到 100 萬個 JSON 條目,我擔心對底層文件系統(在我的例子中是 ext4)可能產生的負面影響:

  • 這會超過文件系統對文件數量的限制(在目錄中還是在整個文件系統中)?
  • 這會導致在檢索特定 ID 時速度變慢嗎?

更具體地說,我相信目錄下的文件列表由目錄的 inode 結構維護,但我不確定它使用什麼資料結構(列表或映射)來保存文件列表。如果我使用目錄層次結構,查找是否有任何性能提升?例如,放入0123456789.jsonroot/01/0123456789.json不是root/0123456789.json

在單個目錄中包含 100 萬個文件會減慢速度,但解析具有 100 萬個條目的聚合 JSON 也會如此。您最好的選擇確實是使用散列目錄,但您可能希望深入兩層,而不僅僅是一層。即,0123456789.json放入root/0/01/0123456789.json987654321.jsonroot/9/98/987654321.json

引用自:https://unix.stackexchange.com/questions/325288