簡體   English   中英

python +大型sqlite數據庫的性能改進

[英]performance improvements for python + very large sqlite database

我一直在研究和關閉連接到Twitter流API的python腳本並搜尋字謎的python腳本。

來源在github上 這很簡單; 當我收到一條新推文時,將其剝離為字母字符,然后按字母順序對該字符串進行排序。 這用作哈希。

當前,哈希存儲在python集中,因為檢查(在磁盤上)數據庫花費的時間太長。 但是:我也沒有在哈希鍵上使用UNIQUE。

使用UNIQUE,我可以獲得多少性能改進? 有沒有一種方法可以在不使用SELECT語句的情況下檢查包含性? 理想情況下,我認為哈希應該是PRIMARY KEY。 包含檢查目前與獲取分開; 批量提取會定期執行,以提高性能。

基本上,我需要一個解決方案,使我能夠進行大量的包含檢查(在可能具有25m行的數據庫上,可能達到50 / s)並進行常規的批量提取,但除此之外沒有太多其他方法。 例如,我不需要經常刪除。

這對於磁盤上的sqlite存儲似乎可行嗎? A:記憶:sqlite商店? 另一個數據庫解決方案? 我是否不使用本機python數據結構就無法獲得這種性能? 如果是這樣,我只會堅持目前的總體策略,並花我的精力來建立一個更有效的哈希系統。

使用集合有什么問題? 您的應用程序是否占用過多內存?

使用數據庫永遠無法獲得與使用內存中python數據結構一樣好的性能,但是數據庫索引肯定會每秒提供50次查詢。 您至少可以期待每秒數千次選擇。

在此處閱讀有關SQLite性能的更多信息:

提高SQLite每秒INSERT的性能?

如果決定使用數據庫,則可以使用以下方法進行查找:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM