5

車両の座標が GPS によって記録されるアプリケーションを構築しています。最初に、次のようないくつかの機能を実装したいと考えています。

  • 車両のリアルタイム追跡
  • 車両の履歴追跡
  • 顧客記録のための場所とエリアの保持

データベースとアプリケーションの設計をどこから始めるかについて、いくつかのガイドラインが必要です。ベスト プラクティスからヒント、経験に至るまで、すべてが正しい軌道に乗るのに本当に役立ちます。

  • ジオメトリの ORM にどのように取り組むでしょうか? 例: 場所はクラス SpatialPoint に変換され、領域はクラス SpatialPolygon に変換されます。
  • 車両から送られる大量のデータ ストリームを正常に保つにはどうすればよいですか? 最新のポイントを (リアルタイム データ用に) 保持するテーブルを考えており、このデータをバッチ解析して、履歴の目的で別のテーブルのポリラインに変換します (車両の従業員シフトごとに 1 行)。
  • Mysql はおそらくこれに最適な選択ではありませんが、Solr をインデックスとして位置情報ベースの迅速な検索に使用することを計画しています。どの車両が顧客Xに最も近いかなど、リアルタイムの距離計算を行う必要がありますが、何か考えはありますか?
4

3 に答える 3

4

私はあなたを少し助けることができます.mysqlは間違いなく最良の選択です.私は何度もあなたと同じ道をたどってきました.mysqlの空間拡張は素晴らしいです.事実、500万行以上の空間データを持つテーブルでも驚くほど高速です.それはすべて索引にあります。空間拡張は、ほとんど使用されていない、最もよく保持されている mysql の秘密の 1 つです ;)

ORM、この tbh はスキップすることをお勧めします。大量のデータがある場合、これらのクラスのすべてのインスタンスによってアプリケーションが強制終了されます。データを処理するための単純な配列構造を使用してください。

RE 大規模なデータ ストリームは、ライブで消費して 10 エントリごとに保存するか、すべてを 1 つのテーブルに格納するかのいずれかです。テーブルのインデックス方法により速度に影響はありませんが、サイズに関する考慮事項は考慮に値する場合があります。

PHP からの代替手段として、postgresql で postgis を試すこともできますが、私は常に、使いやすさ、ネイティブ サポート、および全体的な速度のために mysql を好みました。

幸運を!

于 2010-07-02T00:52:33.747 に答える
3

はい、Solr の使用もお勧めします。現在のリリースは 1.4 です。この問題には非常にうまく機能します。

  1. ORM - PHP を Solr に結び付けるには、Doctrine ORM を備えた sfSolrPlugin が必要な場合があります。LucidWorks の記事を参照してください。Building a search application in 15 person-days

  2. リアルタイムのインデックス更新- これは Solr の次のリリースで提供される予定です。私は Solr 1.5 を信じています。SVN から取得できます。

  3. 地理空間検索- Spatial Search Plugin for Apache Solrを使用しています。Gs 機能は、Solr 1.5 に含まれている可能性があります。プラグインを使用せずに、gs の基本的なサポートが既にいくつかあると思います。

于 2010-07-06T19:38:18.703 に答える
0

「乗り物からの大量ポイントの扱い方・貯め方」について:

私は非常によく似たプロジェクトに取り組んでいます。私は2つのテーブルを維持することでこの問題を解決しました(MySQLを使用していますが、これは他のDBにも当てはまります):

  • 1 つはオブジェクト (車両、ユーザーなど) を追跡するためのものです。

    このテーブルはオブジェクト ID を主キーとして持ち、主キーの制約に違反する更新は、このキーに格納されているデータを更新します。これは、「ON DUPLICATE KEY UPDATE」で簡単に実現できます。これにより、追跡のためのルックアップが非常に高速になり、位置データ/オブジェクトのインスタンスが 1 つだけ保持されます。また、古いデータのレコードを削除するためのサーバー側ロジックも実装しました (更新が受信されない場合、一定の時間が経過した後、これらのデータを削除する必要があります)。

  • 1 つは履歴/検索用

    このテーブルには、オブジェクト ID とタイムスタンプが複合主キーとして含まれます。テーブルはタイムスタンプ列で分割できます。

オブジェクトの場所を更新すると、両方のテーブルに挿入されます。

これが役立つことを願っています。

于 2012-06-14T08:33:52.403 に答える