处理文件太大而无法存储在内存中?

时间:2012-11-08 17:04:25

标签: python sqlite large-files dbm

我有一个20 GB的文件,如下所示:

Read name, Start position, Direction, Sequence

请注意,读取名称不一定是唯一的。

E.g。我的文件片段看起来像

Read1, 40009348, +, AGTTTTCGTA
Read2, 40009349, -, AGCCCTTCGG
Read1, 50994530, -, AGTTTTCGTA

我希望能够以允许我

的方式存储这些行
  1. 根据第二个值
  2. 对文件进行排序
  3. 遍历已排序的文件
  4. 似乎可以使用数据库。

    文档似乎暗示dbm不能用于对文件进行排序并对其进行迭代。

    因此,我想知道SQLite3能否做到1)和2)。我知道我将能够使用SQL查询对文件进行排序,并使用sqlite3迭代结果集。但是,如果不在4GB RAM计算机上耗尽内存,我能够做到这一点吗?

2 个答案:

答案 0 :(得分:8)

SQLite is able同时执行1)和2)。

我建议您尝试并报告遇到的任何问题。

  

如果默认页面大小为1024字节,则SQLite数据库的大小限制为2 TB(2 41 字节)。即使它可以处理更大的数据库,SQLite也会将整个数据库存储在一个磁盘文件中,并且许多文件系统将文件的最大大小限制为小于此值。因此,如果您正在考虑如此规模的数据库,您最好考虑使用客户端/服务器数据库引擎,将其内容分布在多个磁盘文件中,也可能跨多个卷。

答案 1 :(得分:2)

请参阅this question有关大型SQLlite数据库的信息。

重要的一点:

  

我尝试在一个只有一个的sqlite文件中插入多行   表。当文件大约7GB时(对不起,我不能具体说明   行数)插入时间过长。我曾经估计过   我插入所有数据的测试需要24小时左右,但确实如此   48小时后仍未完成。

使用的样本是〜50GB的数据,但未提及系统规格。