大量不断改变大小的小文件如何存储?

理由
举报 取消

我的需求:我需要储存大量的小文件(比如许多股票的价格数据,每只股票的数据放在一个文件中),但是每天都需要向这些文件中增加一些新的数据。请问这时候我应该怎么处理呢?如果只通过windows系统默认的读出文件、增加数据再储存文件,会不会造成磁盘中大量的小扇区被浪费?假设这几千个文件原先是连续存在一片扇区的,每个文件增加数据之后原先的位置就存不下了,就会被存到新的扇区,这样没问题吗?

2017年10月10日 10 条回复 1575 次浏览

发起人:Robot 管理大师

回复 ( 10 )

  1. 郭ii
    理由
    举报 取消

    这不应该直接写到数据库嘛……

  2. 叛逆者
    理由
    举报 取消

    显然应该用数据库啊

  3. 洋耗子
    理由
    举报 取消

    如果只是尾部追加(append)的话,基本上不需要做什么额外的优化,操作系统已经可以做到很高的性能了。存储模型可以参考bitcask等。

    如果还需要各种随机的增删改查的话,那可以考虑用B+树的形式存储。或者干脆直接用sqlite/bdb等嵌入式文件数据库。

  4. 张喆
    理由
    举报 取消

    确实应该用数据库。

  5. 桂能
    理由
    举报 取消

    你这个数据量又不大,随便怎么存,碎片就碎片呗,存了再说,存不下你写个程序merge一下,压缩掉。

  6. vczh
    理由
    举报 取消

    如果大量的小文件都小于512个字节,那你就什么都不用管了,NTFS有优化。

  7. 徐勇
    理由
    举报 取消

    什么是大量?如你所比如的几千?还是百万级,千万级?数亿?真是几千,几万,这个不算大量吧,真如你所说的股票数据,你没说更新频率啊。如大家讲的用数据库,当然你几千个文件每几秒更新一次,个人感觉用RRD也可以

  8. XZiar
    理由
    举报 取消

    尾部追加的话应该只是会在其他地方申请扇区啊。

    ntfs的mtf对小文件的确是有优化的。或者你去整理整理磁盘碎片也行。

    不过如果数量真的多,而且需要同时打开大量的话,还是用数据库吧,或者自己写进一个大文件?毕竟每打开一个文件读取windows还会缓冲一部分数据,数量多了大概也是很可观的

  9. 用户头像
    理由
    举报 取消

    看数据大小。看样子你这单个数据应该没有硬盘上一个簇大所以take easy

我来回答

Captcha 点击图片更换验证码