python +非常大的sqlite数据库的性能改进

时间:2013-07-08 21:09:28

标签: python performance sqlite

我一直在使用python脚本上工作几个月,该脚本连接到twitter流API并搜索字谜。

来源位于github。这很简单;当我收到一条新推文时,我将其删除为字母字符,并按字母顺序对该字符串进行排序。这用作哈希。

当前哈希存储在python集中,因为检查(在磁盘上)数据库花费的时间太长。但是:我也没有在哈希键上使用UNIQUE。

使用UNIQUE可以获得多少性能提升?有没有办法在不使用SELECT语句的情况下检查包含?理想情况下,我猜哈希值应该是PRIMARY KEY。包含检查目前与提取分开;提取是定期分批进行的,以提高性能。

基本上我需要一个解决方案,允许我进行包含检查(可能高达50 / s,可能有25米行的数据库)并定期批量提取,但不是很多其他。例如,我不需要经常删除。

对于磁盘上的sqlite存储,这看起来是否可行? - 答:内存:sqlite商店?另一个DB解决方案我不能在没有使用原生python数据结构的情况下获得这种性能吗?如果是这样的话,我会坚持使用我目前的总体策略,并且用更高效的散列系统来消耗能量。

1 个答案:

答案 0 :(得分:0)

使用套装有什么问题?你的应用程序消耗了太多内存吗?

使用内存中的python数据结构时,使用数据库永远不会获得良好的性能,但数据库索引肯定会每秒进行50次查找。至少每秒可以预期数千次选择。

在此处阅读有关SQLite性能的更多信息:

Improve INSERT-per-second performance of SQLite?

如果您决定使用数据库,则可以使用以下内容进行查找:

SELECT count(*) as exists FROM anagrams WHERE letters='abc' LIMIT 1;

您不需要唯一索引。只需创建一个常规索引(http://www.sqlite.org/lang_createindex.html):

CREATE INDEX letters_anagrams ON anagrams (letters);