1億個の一意のキーを生成するプログラムを作成します。各キーには、それに関連付けられた値(最大4桁)があります。次に、そのデータにできるだけ速くアクセスできるようにして、キーを検索してその値を取得できるようにします。理想的には、少なくとも1秒間に100万回。
通常の計算能力を想定すると、これも可能ですか?辞書として作成するだけですか、それともデータベースなどについて学び始める必要がありますか?
私を正しい方向に向けるものは何でも大きな助けになるでしょう。
1億個の一意のキーを生成するプログラムを作成します。各キーには、それに関連付けられた値(最大4桁)があります。次に、そのデータにできるだけ速くアクセスできるようにして、キーを検索してその値を取得できるようにします。理想的には、少なくとも1秒間に100万回。
通常の計算能力を想定すると、これも可能ですか?辞書として作成するだけですか、それともデータベースなどについて学び始める必要がありますか?
私を正しい方向に向けるものは何でも大きな助けになるでしょう。
簡単な計算によると、32ビットシステムのPythonではメモリ内でそれを行うことはできません。10 8キーでは、3 GBのアドレス空間が使用可能な場合、キーごとに30バイトしか提供されません。
64ビットシステムでは、キーと値のオーバーヘッドは少なくとも次のようになります。
sys.getsizeof(0)
64ビットシステムでは28バイトになります)したがって、少なくとも7.2GBのメモリが必要になると見積もっています。それは可能ですが、許容できないパフォーマンスが得られる可能性があります。京都内閣のようなシンプルなものを使うことをお勧めします。
100mをテストするのに十分なRAMがありませんでしたが、5,000万個のアイテムdict()を生成し、ノートブックで.25秒で100万回のルックアップを実行しました。あなたは野球場にいます。
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