大量不斷改變大小的小文件如何存儲?

我的需求:

我需要儲存大量的小文件(比如許多股票的價格數據,每隻股票的數據放在一個文件中),但是每天都需要向這些文件中增加一些新的數據。

請問這時候我應該怎麼處理呢?如果只通過windows系統默認的讀出文件、增加數據再儲存文件,會不會造成磁碟中大量的小扇區被浪費?

假設這幾千個文件原先是連續存在一片扇區的,每個文件增加數據之後原先的位置就存不下了,就會被存到新的扇區,這樣沒問題嗎?


確實應該用資料庫。


顯然應該用資料庫啊


如果只是尾部追加(append)的話,基本上不需要做什麼額外的優化,操作系統已經可以做到很高的性能了。存儲模型可以參考bitcask等。

如果還需要各種隨機的增刪改查的話,那可以考慮用B+樹的形式存儲。或者乾脆直接用sqlite/bdb等嵌入式文件資料庫。


你這個數據量又不大,隨便怎麼存,碎片就碎片唄,存了再說,存不下你寫個程序merge一下,壓縮掉。


這不應該直接寫到資料庫嘛……


如果大量的小文件都小於512個位元組,那你就什麼都不用管了,NTFS有優化。


尾部追加的話應該只是會在其他地方申請扇區啊。

ntfs的mtf對小文件的確是有優化的。或者你去整理整理磁碟碎片也行。

不過如果數量真的多,而且需要同時打開大量的話,還是用資料庫吧,或者自己寫進一個大文件?畢竟每打開一個文件讀取windows還會緩衝一部分數據,數量多了大概也是很可觀的


用阿里雲的表格存儲啊。然後把你的精力放在業務和產品上


什麼是大量?如你所比如的幾千?還是百萬級,千萬級?數億?真是幾千,幾萬,這個不算大量吧,真如你所說的股票數據,你沒說更新頻率啊。如大家講的用資料庫,當然你幾千個文件每幾秒更新一次,個人感覺用RRD也可以


用資料庫,建一張表就行,很方便查找和修改。


加緩存啊


看數據大小。看樣子你這單個數據應該沒有硬碟上一個簇大所以take easy


如果只談技術實現不談技術細節…我覺得直接用資料庫比較好…

或者用FUSE自己寫一個用戶態文件系統,底層的存儲交給資料庫。


推薦閱讀:

大容量U盤有什麼玩法?
動態磁碟有什麼弊端(與基本磁碟相比)?
如何縮短筆記本開機時間?
為什麼我的VersionHelpers.h里找不到IsWindows10OrGreater()方法?
win10為什麼不能選擇關掉自動更新?

TAG:MicrosoftWindows | 計算機 | 文件系統 | 計算機科學 | 大數據 |