Sypex Geo-IPで都市をすばやく見つける

年の初めに、 「IPによる国の定義」という記事を公開しました。アルゴリズムの速度をテストします。ここでは、私の「バイク」が高速であることで知られています。 よくある質問の1つは、IPで都市を決定する機能でした。



そして数か月後、「楽しみのため」が独立したプロジェクトに成長するにつれて、プロジェクトが始まりました。

Sypex Geoプロジェクト専用の別のサイトがオープンしました。ここでは、最新バージョンのAPIとデータベースをダウンロードしたり、ドキュメントを熟知したりできます。



IPによる都市の正しい定義をすばやくテストしたい人のために、デモページへのリンクがあります 。 そして、habrakatの下で、いくつかの技術的な詳細を説明し、少しのテストの結果を示します。



Sypex Geo 2.1フォーマット



前回の記事が公開されて以来、Sypex Geo形式(略してSxGeo)が最適化され、データベースに2つのディレクトリ(都市と地域)を含める機能が追加されました。



新しい形式を作成するとき、次の優先順位が設定されました。



この形式では、異なるエンコードでデータを保存できます。 ベータ版を終了すると、データベースをMySQLからバイナリデータベースファイルに変換するスクリプトが公開されます。



次の情報がデータベースに保存されます。



このリストは、必要に応じて変更および/または拡張できます。 SxGeo 2.1形式の詳細について 、Webサイトをご覧ください。



自分のデータベース



MaxMindの人気のあるジオロケーションシステムGeoLite Cityをよく知った後、独自のデータベースを作成することにしました。 問題は、GeoLite Cityには、多くの不正確さ、ゴミ、重複都市、範囲の過度の断片化、および旧ソ連の都市に関する問題があることです(たとえば、都市の代わりに、会社名またはWhoisからの責任者の名前が取られました)。



現時点では、ベースはGeoLite Cityに基づいていますが、すでに完全に再設計されたロシア、ウクライナ、ベラルーシのカバレッジが含まれています。 その他の国、主にCISおよびヨーロッパは、徐々に指定されます。 Sypex Geo Cityデータベースには、タイムゾーンだけでなく、UTF-8(まだ翻訳されていない名前)のロシア語での都市と地域の名前が含まれています。



さらに、SxGeo 2.1形式に変換された他のデータベースがサイトで利用可能です。



使用する



Sypex Geo APIの使用は可能な限り簡単です。

1.  SxGeo.php  SxGeoCity.dat (  )   2.   SxGeo.php   ,   include("SxGeo.php"); 3.   SxGeo //$SxGeo = new SxGeo(); //   ,   SxGeo.dat $SxGeo = new SxGeo('SxGeoCity.dat', SXGEO_BATCH | SXGEO_MEMORY); //    4.   (SxGeo City, GeoLite City, IpGeoBase) $SxGeo->get($ip); (   ,      ) // $SxGeo->getCityFull($ip); (      )
      
      





性能試験



そして、デザートについては、パフォーマンスの比較テストを少し行います。 相手はGeoLite APIとGeobaza APIです。 すべてのテスト参加者は、独自の形式のバイナリデータベースを使用し、PHPのAPIを使用します。 テストは、Win 7(Linuxでは割合が保持されます)、PHP 5.2.17で行われます。



2つのモード(通常モードとメモリキャッシュあり)で各APIを10回実行した後の結果は、平均化と数十に丸められます。 実行ごとに50,000個のランダムIPアドレスの配列が作成され、各アルゴリズムがループで検索します。





提案や希望は大歓迎です。 また、APIを他の言語に移植し、Apacheとnginxのモジュールを作成するための支援を求めています。



All Articles