结论:看来 HDF5 是适合我的目的的方法。基本上 ”HDF5 是一种用于存储和管理数据的数据模型、库和文件格式。“并且旨在处理令人难以置信的大量数据。它有一个名为 python-tables 的 Python 模块。(链接在下面的答案中)
HDF5 在保存大量数据方面的效果提高了 1000%。不过,从 2 亿行中读取/修改数据是一件痛苦的事情,所以这是下一个要解决的问题。
我正在构建包含大量子目录和文件的目录树。大约有 1000 万个文件分布在十万个目录中。每个文件都位于 32 个子目录下。
我有一个 python 脚本来构建这个文件系统并读取和写入这些文件。问题是,当我达到超过一百万个文件时,读写方法变得极其缓慢。
这是我的函数,它读取文件的内容(该文件包含一个整数字符串),向其中添加一定的数字,然后将其写回原始文件。
def addInFile(path, scoreToAdd):
num = scoreToAdd
try:
shutil.copyfile(path, '/tmp/tmp.txt')
fp = open('/tmp/tmp.txt', 'r')
num += int(fp.readlines()[0])
fp.close()
except:
pass
fp = open('/tmp/tmp.txt', 'w')
fp.write(str(num))
fp.close()
shutil.copyfile('/tmp/tmp.txt', path)
- 关系数据库访问这些数据似乎太慢,因此我选择了文件系统方法。
- 我之前尝试过对这些执行 Linux 控制台命令,但速度慢得多。
- 我首先将文件复制到临时文件,然后访问/修改它,然后将其复制回来,因为我发现这比直接访问文件更快。
- 将所有文件放入 1 个目录(以 reiserfs 格式)会导致访问文件时速度过慢。
我认为速度变慢的原因是文件太多。执行此函数 1000 次的时间不到一秒..但现在达到了 1 分钟。
你建议我如何解决这个问题?我要更改目录树结构吗?
我所需要的只是快速访问这个非常大的文件池中的每个文件*
我知道这不是对您问题的直接答案,但它是对您问题的直接解决方案。
你需要使用类似的东西进行研究HDF5 http://www.hdfgroup.org/HDF5/。它专为具有数百万个单独数据点的分层数据类型而设计。
你真的很幸运,因为有很棒的 HDF5 Python 绑定,称为pytables http://www.pytables.org/。
我以非常相似的方式使用它并取得了巨大的成功。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)