2017-04-05 8 views
0

私は多くの車(2000年頃)と私のDB(mongoと一緒に働く)にいくつかのポリゴンを持っているプロジェクトに取り組んでいます。mongoDB - 多くの場所の入り口/出口ポリゴンイベントをチェックする最良の方法は何ですか?

多種多様なポリゴン(都市、国、交差点など)がありますが、その場合は4つのタイプがあります。

毎分、私は車両の新しい場所を取得し、現在の国、都市、交差点(または最後の交差点)をクライアント側のテーブルに表示する必要があります。私が本当に知りたいのは、車両がポリゴンを出入りするときだけです。

現在のポリゴンに車両の特定の場所を照会することは可能ですが、2000台の車両には現在の4つのポリゴンタイプを取得する必要があります。

毎分8000(!!!)のDBのクエリです。

私がしたいことをする最もよい方法は何ですか? ありがとう:)

答えて

0

私は、飛行するまで車両が都市/国を頻繁に変更することができないため、より良い解決策があると思います。私はあなたが車両位置データを取得するとき、私はちょうど保存された車両のドキュメントからcurr_cityをフェッチし、今{id, location_cordinates, curr_city, curr_country}

としての私の車のスキーマを選択します{id, name, boundary, near_city}.のようなスキーマを持つことができ、国の内部schema-

Country={ 
     id: ObjectId or String, 
     name: String, 
     cities: [<array of city subdocuments>], 
     near_country: [<array of IDs of neighbour countries>], 
     boundary: location boundary for city <city would be polygon or your choice of geoType> 
} 

市のサブドキュメントの下に検討していますし、場所がまだcurr_cityの中にあるかどうかを確認してください。問題がなければ、場所がnear_cityの中にあるかどうかを確認するだけです。

車両の動きによって都市や国が変化する場合は、最新のデータで車両を更新する必要があります。

このようにして、DBのクエリを最小限に抑えます。すべてがDBで行われないため、いくつかのコードが必要になります。

ここで私はいくつかの仮定をとっている車両のlike-

  • 場所は、車両のドキュメントに保存されます。あなたのケースではない場合は、それを削除してください。あなたは、GPSなどの場所から場所を取得している可能性があり、必要に応じて格納する必要はありません。
  • 交差部分を理解できませんでした。トランジションか交差か?通常、国には州があり、州には都市があります。都市名は、州の中または州をまたいで複製することができます。しかし、都市はただ一つの州の一部になるでしょう。そうでない場合は、同じ都市を複数の国に配置し、これらの都市を処理するためのコードロジックを入れるだけです。
  • 都市に近づいている間、国境にあり、近くに都市があるかもしれない都市を考慮する必要があります。

私はあなたの問題を理解し、解決策があなたに役立つことを願っています。さらなる情報が得られればさらに助けてくれると嬉しいです。

関連する問題