1

Ip 範囲を別のテーブルの場所 ID にリンクするデータベースがあります。非常に大きいため、エアロスパイクを使用して新しいソリューションを作成しようとしています。

私たちが思いついた解決策は、間隔を使用することです。このようなもの:

キー: 1000000 (IP アドレスの int64) Bin1: デフォルト:1 (特定のブロックの開始位置 ID)

Bin2: 1234567:2 (ロケーション ID が変更されるブロックの最初の IP):(locationID)

Bin3: 1345678:3 (ロケーション ID が変更されるブロック内の 2 番目の IP):(locationID)

この方法を使用すると、行の量とサーバーの処理時間を削減しながら、数学的に IP からロケーション ID を取得できます。

自分のアイデアをテストしたいのですが、現在のシステムの変換に問題があります。

ロケーション ID が関連付けられた範囲 (0 ~ 160000 など) を持つデータベースがあります。

範囲テーブルには 9,297,631 行あります。

私が作成した C# スクリプトは、次の SQL を実行します。

SELECT * FROM dbo.GeoIPRanges 
where (startIpNum BETWEEN 300000000 AND 300000100)
OR (endIpNum BETWEEN 300000000 AND 300000100)
OR (startIpNum <= 300000000 AND endIpNum >= 300000100)

呼び出しごとに約 4 秒かかります。上記の数値は一例です。それらが 100 のブロックになっていることがわかります。最大 IP 量は 4,294,967,295 です。これを 100 個のブロックで実行すると、それぞれ約 4 秒の 42,949,672 回の呼び出しが発生します。これには非常に長い時間がかかります。情報をエアロスパイクに必要な形式にフォーマットするのにかかる処理時間はごくわずかです。

このすべての情報を知っているので、これをスピードアップする方法についてのアイデアはありますか?

4

2 に答える 2

1

Aerospike-loader ツールがあります。データを csv ファイル形式でダンプできる場合、ローダーはデータを aerospike にロードできます。複数の CSV ファイルを並行して読み取り、データを aerospike に並行してロードできます。内部ベンチマークでは、適切なハードウェアで、1 秒あたり最大 200,000 レコードをロードできました。詳細については、ドキュメントと例を参照してください。

于 2014-05-06T08:44:41.280 に答える