Filesystems
在 ext4 文件系統的目錄中包含許多文件的後果是什麼?
我的任務是在磁碟上儲存 JSON 列表(不使用任何數據庫),我有以下選項:
- 將它們儲存在一個大文件中。
- 將它們儲存在單獨的文件中,由它們的 ID 鍵入。
我個人更喜歡第二種選擇,因為它允許通過 ID 直接定址任何 JSON,而無需接觸任何其他 JSON。但是,幾乎有 0.1 到 100 萬個 JSON 條目,我擔心對底層文件系統(在我的例子中是 ext4)可能產生的負面影響:
- 這會超過文件系統對文件數量的限制(在目錄中還是在整個文件系統中)?
- 這會導致在檢索特定 ID 時速度變慢嗎?
更具體地說,我相信目錄下的文件列表由目錄的 inode 結構維護,但我不確定它使用什麼資料結構(列表或映射)來保存文件列表。如果我使用目錄層次結構,查找是否有任何性能提升?例如,放入
0123456789.json
而root/01/0123456789.json
不是root/0123456789.json
?
在單個目錄中包含 100 萬個文件會減慢速度,但解析具有 100 萬個條目的聚合 JSON 也會如此。您最好的選擇確實是使用散列目錄,但您可能希望深入兩層,而不僅僅是一層。即,
0123456789.json
放入root/0/01/0123456789.json
和987654321.json
中root/9/98/987654321.json
。