関連する ISP 情報とともに IP 番号を redis に保存しようとしています。Maxmind データがあり、csv ファイルには各 ISP の開始番号と終了番号が含まれています。
SQL でクエリを実行すると、(数値に変換した後) IP が範囲内で使用可能かどうかを確認し、関連する ISP を取得できます。
すべての範囲を個々の数値に変換し、Redis ですべてのキーと値のペアを送信して、ルックアップを高速化することを考えていました。これにより、およそ 40 億のキーと値のペアが Redis ストアに作成されます。私は数億のキーと値のペアに対してこれを行いましたが、Redis で 40 億のペアに移行する際のアドバイス/提案を探しています。私が認識しなければならないパフォーマンスの問題、またはこれを改善する方法はありますか?
すべての提案に感謝します。
更新: 以下の提案のおかげで、これを機能させることができました。このためのPythonコード(迅速で汚い)をここで共有したいと思いました:
redis のインポート pymysql をインポート conn = pymysql.connect(host='localhost',user='user',passwd='password',db='foo') cur = conn.cursor() cur.execute('select startipnum,endipnum,isp from wiki.ipisp order by endipnum;') 結果 = cur.fetchall() r = redis.StrictRedis(ホスト='localhost'、ポート=6379、デシベル=0) ispctr = 1 結果の行: tempDict = {'ispname':row[2],'fromval':row[0],'toval':row[1]} 名前フィールド = ispctr r.hmset(namefield,tempDict) r.zadd('ispmaxindex',row[1],namefield) ispctr = ispctr+1 conn.close() ipstotest = ['23.23.23.23','24.96.185.10','203.59.91.235','188.66.105.50','99.98.163.93'] ipstotest の ip の場合: ipvalsList = [ip.split('.') の ipoct の場合は int(ipoct)] ipnum = (16777216*ipvalsList[0]) + (65536*ipvalsList[1]) + (256*ipvalsList[2]) + ipvalsList[3] ipnum = long(ipnum) tempVal1 = r.zrangebyscore('ispmaxindex',ipnum,float('Inf'),0,1) tempval2 = r.hgetall(tempval1[0]) print tempval2['ispname']