g0m*_*m3z 1 python file-io dictionary
我正在开展一个项目,在这个项目中,我将大量数据抓取并重新组织到结果文本文件中.以前我使用字典来存储临时数据,但随着数据量的增加,进程因内存使用速度变慢而字典变得无用.
由于处理速度在我的情况下并不那么重要,我正在尝试将字典替换为文件,但我不确定如何轻松地将文件指针移动到适当的位置并读取所需的数据.在字典中,我可以轻松地参考任何数据.我想在文件中实现相同的目标.
我正在考虑使用mmap并编写我自己的函数来将文件指针移动到我想要的位置.Python是否有内置或第三方模块用于此类操作?
欢迎任何其他理论方法.
我想你现在正在尝试重塑一个键值数据库.
也许最简单的方法是检查sqlite3模块是否能满足您的需求.使用现成的数据库比滚动自己更容易!
当然,sqlite3不是键值DB(表面上),所以如果你需要更简单的东西,看看LMDB及其Python绑定:http://lmdb.readthedocs.org/en/release/
它的重量轻,速度快.它可能接近实现您想要的最快方式.
应该注意的是,没有最佳键值数据库这样的东西.有几个方面需要考虑.至少:
例如,我上面建议的LMDB在读密集型任务中表现非常好,而不是在写密集型任务中.它提供事务,按键排序保持密钥,并且防崩溃(受底层文件系统限制).但是,如果您需要经常编写数据库,LMDB可能不是最佳选择.
另一方面,SQLite不是完成这项任务的完美选择 - 理论上讲.实际上,它内置于标准的Python发行版中,因此易于使用.它可以提供足够的性能,因此可能是最佳选择.
那里有许多高质量的数据库.如果不提及它们,我不会试图给人的印象是,这个答案中提到的数据库是唯一的好选择.大多数数据库管理员都有很好的理由存在它们.虽然有一些有点过时,但大多数在应用领域都有自己的甜点.
这个领域在不断变化.有两个全新的数据库可供使用,旧数据库系统也会更新.阅读旧基准时应牢记这一点.此外,所使用的硬件类型也有其影响; 具有SSD磁盘,云计算实例和具有HDD的传统计算机的计算机在性能方面表现完全不同.