我將有一個生成100萬個的獨立按鍵的程序,並且每個按鍵都有它(最多4個位數)關聯的值。然後我希望能夠儘可能快地訪問這些數據,以便我可以查找關鍵字並獲得它的價值。理想情況下,每秒至少有一百萬次。是否有可能在Python中實現大量的查找表(1億個+鍵)?
假設正常的計算能力,這甚至可能嗎?我只是將它創建爲字典還是應該開始學習數據庫等?
凡是點我在正確的方向將是一個巨大的幫助。
我將有一個生成100萬個的獨立按鍵的程序,並且每個按鍵都有它(最多4個位數)關聯的值。然後我希望能夠儘可能快地訪問這些數據,以便我可以查找關鍵字並獲得它的價值。理想情況下,每秒至少有一百萬次。是否有可能在Python中實現大量的查找表(1億個+鍵)?
假設正常的計算能力,這甚至可能嗎?我只是將它創建爲字典還是應該開始學習數據庫等?
凡是點我在正確的方向將是一個巨大的幫助。
快速數學說,你不能做到這一點的內存Python中的32位系統上。 10個鍵會給你每個鍵只有30個字節,如果你有3 GB的地址空間可用。
在64位系統中,一個鍵和值的開銷將至少佔用:每次指針
sys.getsizeof(0)
給我28 64位系統)所以我們的估計是,它將至少需要7.2 GB的內存。你可以做到這一點,但你可能會得到不可接受的表現。我推薦使用像京都內閣這樣簡單的東西。
我沒有足夠的內存來測試100M,但我產生5000萬的項目字典()和0.25秒跑出百萬查找我的筆記本上。你在球場上。
import time
d = dict((k,k) for k in range(5*10**7))
time.sleep(2) # let system settle
print('start')
start = time.time()
for i in range(10**6):
x = d[i]
print(time.time() - start)
給我
start
.25
這似乎更適合於一個簡單的數據庫。 ..但可能可能(與〜足夠的RAM) – 2013-03-26 02:38:21
什麼阻止你簡單地嘗試最簡單的方法看到它適合你? – 2013-03-26 02:39:32
也許是[Berkeley DB]的工作(http://docs.python.org/2/library/bsddb.html)? – detly 2013-03-26 03:22:35