1

几个月来,我一直在研究一个连接到 twitter 流 API 并寻找字谜的 python 脚本。

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

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

使用 UNIQUE 可以获得多少性能提升?有没有办法在不使用 SELECT 语句的情况下检查包含?理想情况下,我猜散列应该是主键。包含检查当前与获取分离;提取是定期分批执行的,以提高性能。

基本上我需要一个解决方案,让我可以进行大量的包含检查(可能高达 50/s,在可能有 25m 行的数据库上)并定期进行批量提取,但仅此而已。例如,我不需要经常删除。

这对于磁盘上的 sqlite 存储似乎可行吗?A :memory: sqlite 存储?另一个数据库解决方案?如果不使用本机 python 数据结构,我是否无法获得这种性能?如果是这样,我会坚持我目前的总体策略,并花费我的精力来提出一个更有效的哈希系统。

4

1 回答 1

0

使用集合有什么问题?您的应用程序是否消耗太多内存?

使用数据库的性能永远不会像使用内存中的 Python 数据结构那样好,但是数据库索引肯定会每秒为您提供 50 次查找。您至少可以预期每秒有数千次选择。

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

提高 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);
于 2013-07-08T21:37:13.220 回答