1

1億個の一意のキーを生成するプログラムを作成します。各キーには、それに関連付けられた値(最大4桁)があります。次に、そのデータにできるだけ速くアクセスできるようにして、キーを検索してその値を取得できるようにします。理想的には、少なくとも1秒間に100万回。

通常の計算能力を想定すると、これも可能ですか?辞書として作成するだけですか、それともデータベースなどについて学び始める必要がありますか?

私を正しい方向に向けるものは何でも大きな助けになるでしょう。

4

2 に答える 2

3

簡単な計算によると、32ビットシステムのPythonではメモリ内でそれを行うことはできません。10 8キーでは、3 GBのアドレス空間が使用可能な場合、キーごとに30バイトしか提供されません。

64ビットシステムでは、キーと値のオーバーヘッドは少なくとも次のようになります。

  • バケット内のポインターごとに8バイト、キーと値ごとに1つのポインター、
  • キーと値ごとにおそらく28バイト(sys.getsizeof(0)64ビットシステムでは28バイトになります)

したがって、少なくとも7.2GBのメモリが必要になると見積もっています。それは可能ですが、許容できないパフォーマンスが得られる可能性があります。京都内閣のようなシンプルなものを使うことをお勧めします。

于 2013-03-26T02:42:28.097 に答える
1

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
于 2013-03-26T04:55:35.937 に答える