我一直在使用python脚本上工作几个月,该脚本连接到twitter流API并搜索字谜。
来源位于github。这很简单;当我收到一条新推文时,我将其删除为字母字符,并按字母顺序对该字符串进行排序。这用作哈希。
当前哈希存储在python集中,因为检查(在磁盘上)数据库花费的时间太长。但是:我也没有在哈希键上使用UNIQUE。
使用UNIQUE可以获得多少性能提升?有没有办法在不使用SELECT语句的情况下检查包含?理想情况下,我猜哈希值应该是PRIMARY KEY。包含检查目前与提取分开;提取是定期分批进行的,以提高性能。
基本上我需要一个解决方案,允许我进行吨包含检查(可能高达50 / s,可能有25米行的数据库)并定期批量提取,但不是很多其他。例如,我不需要经常删除。
对于磁盘上的sqlite存储,这看起来是否可行? - 答:内存:sqlite商店?另一个DB解决方案我不能在没有使用原生python数据结构的情况下获得这种性能吗?如果是这样的话,我会坚持使用我目前的总体策略,并且用更高效的散列系统来消耗能量。
答案 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);