2

900 万の IP のリストがあり、一連のハッシュ テーブルを使用して、特定の IP がそのリストに含まれているかどうかを返す定数時間関数を作成できます。PHPでできますか?もしそうなら、どのように?

4

5 に答える 5

4

これはブルーム フィルターの理想的なアプリケーションのように思えます。できるだけ早くそれを行うのに役立つリンクが提供されていることを確認してください。

  1. http://github.com/mj/php-bloomfilter
  2. http://code.google.com/p/php-bloom-filter/
于 2009-10-09T20:28:40.927 に答える
2

この質問で興味深いのは、あなたが行ける方向の数です。

データのセットが大きく、クエリの数が比較的少ないという理由だけで、キャッシュが最適なオプションであるかどうかはわかりません。ここにいくつかのアイデアがあります。

1) RAM ディスクを構築します。mysql データベース テーブルをリンクして、ramdisk パーティションを使用します。私はこれを試したことはありませんが、試してみると楽しいでしょう。

2) 一般に、Linux には非常に高速なファイル システムがあります。レコードをファイルに分割する構造化ファイル システムを構築し、file_get_contents() または file_exists() を呼び出すだけです。もちろん、このソリューションではファイル システムを構築して維持する必要がありますが、これもまた楽しいものです。rsync は、ライブ ファイルシステムを最新の状態に保つのに役立つ場合があります。

例:

/002/209/001/299.txt

<?
$file = $this->build_file_from_ip($_GET['ip']);
if(file_exists($file)) {
    // Execute your code.
}
?>
于 2009-10-09T21:04:31.920 に答える
2

ファイルを sqlite に読み込むオプションがある場合は、インデックスの恩恵を受けてルックアップを高速化できますか?

それ以外の場合、memcached はオプションですが、純粋な php ルックアップで実行した場合に存在のチェックがどのように行われるかわかりません (私の推測ではかなり遅くなります)。

于 2009-10-09T20:40:40.533 に答える
2

おそらく memcache に入れるのが最善/最速の方法だと思います。

于 2009-10-09T20:14:09.770 に答える
1

Redisのような NoSql ソリューションを試しましたか? データセット全体がメモリで管理されます。

ここにいくつかのベンチマークがあります。

于 2010-01-03T15:32:27.327 に答える