3

inet_aton を使用して、IPv4 アドレスを「int unsigned」列タイプに格納しています。[私はこれを正しく行っていますか?また、「符号なし」を使用する必要がありますか?] この特定の列にもインデックスが付けられています。テーブル全体に同じ IP を含む何百万もの行と複数の行があるため、これらの行を検索する最速の方法は何ですか?

..または、これについて間違った方法で行っていますか?

4

3 に答える 3

2

これを行うには inet_aton を使用するのが正しい方法であるため、余分な無意味な情報を保存することはありません (任意の 3 つの数値に対して 256 を超える値を保存しても意味がありません)。unsigned int に収まる 32 ビットの数値になります。

int 列にインデックスを付けると、IP アドレスによる検索が高速になります。データベースが非常に大きくなると、この種のものを MySQL に格納するスケーリングの問題が発生し始めます。

あなたはそうしないだろうと思いますが、RDBMS に大規模でビジーなサイトの完全なログ情報を格納することは、一般に悪いこと (tm) であると認められていることを指摘しておきます。データベースが保証するリレーショナル整合性プロパティは必要なく、読み取るよりも多くのエントリを書き込みます。nosql を検討するか、代わりにフラット ファイルに追加し、必要に応じて専用プログラムを使用してログを解析します。

于 2010-10-20T17:18:00.250 に答える
1

はい、これが MySQL に IP アドレスを保存する最良の方法です。

INET_ATONのドキュメントを見ると、UNSIGNED INT 列を使用することが推奨されていることがわかります。そうしないと、127 を超える最初の oct を持つ IP アドレスは正しく保存されません。

これは、検索を行うための非常に高速な方法でもあります。MySQL は整数列を非常にうまく処理し、この列にインデックスを付け、検索で INET_ATON を使用することにより、非常に高速なクエリを実現できます。

于 2010-10-20T17:24:22.320 に答える
1

私はこれを正しく行っていますか?そして、「署名なし」を使用する必要がありますか?

はい。より高いIPアドレスがないunsignedと適切に保存されず、int(の代わりにvarchar)を使用すると最も効率的に保存されます。

これらの行を検索する最速の方法は何ですか?

検索の最適化に関しては、検索対象 (追加のテーブルなど) によって異なります。一般に、unsigned int 列にインデックスを付けると、高速なパフォーマンスが得られます。

于 2010-10-20T17:16:57.800 に答える