私はredisに関連するISP情報とともにIP番号を格納しようとしています。私はMaxmindのデータを持っており、csvファイルには各ISPの開始番号と終了番号が入っています。Redisでは40億以上のキー値ペアがありますか?
SQLでクエリを実行しているときに、範囲内で使用できるようにIPをチェックして、関連するISPを取得できます。
私はすべての範囲を個別の数値に変換し、高速検索のためにRedisですべてのキー値のペアを送信することを考えていました。 これはおよそ40億のキー値ペアをRedisストアにもたらします。 私は数億のキーバリューのペアでこれを行ってきましたが、私はRedisで40億ペアに移動する際にアドバイスや提案を探しています。 パフォーマンスに関する問題を認識する必要がありますか、これを改善する方法はありますか?
ありがとうございます。
更新:下記の提案のおかげで、私はこの問題を解決できました。 思想は、私はここで、このための(間に合わせ)Pythonのコードを共有したい:
import redis import 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;') result = cur.fetchall() r = redis.StrictRedis(host='localhost', port=6379, db=0) ispctr = 1 for row in result: tempDict = {'ispname':row[2],'fromval':row[0],'toval':row[1]} namefield = 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'] for ip in ipstotest: ipvalsList = [int(ipoct) for ipoct in ip.split('.')] 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']
本当に役に立つリンク。これらをさらに探求します。ありがとう、ディディエ。 – harshsinghal