年の初めに、
「IPによる国の定義」という記事を公開しまし
た。アルゴリズムの速度をテストします。ここでは、私の「バイク」が高速であることで知られています。 よくある質問の1つは、IPで都市を決定する機能でした。
そして数か月後、「楽しみのため」が独立したプロジェクトに成長するにつれて、プロジェクトが始まりました。
Sypex Geoプロジェクト専用の別のサイトがオープンしました。ここでは、最新バージョンのAPIとデータベースをダウンロードしたり、ドキュメントを熟知したりできます。
IPによる都市の正しい定義をすばやくテストしたい人のために
、デモページへのリンクがあります 。 そして、habrakatの下で、いくつかの技術的な詳細を説明し、少しのテストの結果を示します。
Sypex Geo 2.1フォーマット
前回の記事が公開されて以来、Sypex Geo形式(略してSxGeo)が最適化され、データベースに2つのディレクトリ(都市と地域)を含める機能が追加されました。
新しい形式を作成するとき、次の優先順位が設定されました。
- 高速
- 低リソース消費
- オープン性(データベースとAPIのバイナリファイル形式の仕様はオープンです)
- 普遍性(任意のデータセットでデータベースを作成する機能)
この形式では、異なるエンコードでデータを保存できます。 ベータ版を終了すると、データベースをMySQLからバイナリデータベースファイルに変換するスクリプトが公開されます。
次の情報がデータベースに保存されます。
- 国ID
- ISO 3166-1国コード(2文字)
- FIPSリージョンコード10-4(2文字)
- 地域名(オプション)
- 市区町村
- 緯度
- 経度
- タイムゾーン(オプション)
このリストは、必要に応じて変更および/または拡張できます。
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
性能試験
そして、デザートについては、パフォーマンスの比較テストを少し行います。 相手はGeoLite APIとGeobaza APIです。 すべてのテスト参加者は、独自の形式のバイナリデータベースを使用し、PHPのAPIを使用します。 テストは、Win 7(Linuxでは割合が保持されます)、PHP 5.2.17で行われます。
2つのモード(通常モードとメモリキャッシュあり)で各APIを10回実行した後の結果は、平均化と数十に丸められます。 実行ごとに50,000個のランダムIPアドレスの配列が作成され、各アルゴリズムがループで検索します。
提案や希望は大歓迎です。 また、APIを他の言語に移植し、Apacheとnginxのモジュールを作成するための支援を求めています。