関連する 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']