記事
· 2021年6月9日 4m read

GIS でのコンペに勝つには

   GIS は Geographic Information System(地理情報システム)の略です。
  これは、Caché の典型的な分野ではありませんが、 データ量の多い環境に違いありません。

主要分野には、次の 3 つがあります。

  • ビジュアルフロントエンド:
       多数の商用およびオープンソース製品がカバーする成熟した分野です。
       ここには Caché は必要ありません。

  • GIS の数学:  
      JTS(Java Topology Suite)は、すべての要件を網羅した固定標準です。Java Gateway によって、または Caché Call Out Gateway
    を使ったこの標準ライブラリの C++ インカーネーションの C によって Caché にリンク付けることができます。
      これまでのところ、Caché による付加価値はありません。

  • すべての地理オブジェクトとその属性、特に、道路地図、高速道路、会社、個人宅、鉄道、人口統計データなどの地理座標を保持しているデータベース

この分野で Caché が勝利を収めることができます。
従来の属性に基づいてデータを配信することをよく理解しているからです。 何も目新しい事ではありません。
課題は、場所の比較から始まります。 作業する地図は、境界矩形のコレクションとして表されており、
ここでのタスクは、特定の要素がその矩形内にあるかどうかを見つけ出すことです。 背後にある理論は、Rツリーとして知られています。 https://en.wikipedia.org/wiki/R-tree

 

基本的なタスクは、次の実行中の一連のクエリに適合しないすべてのポイントを分類することです。
SQL SELECT ... WHERE xp BETWEEN x1 AND x2 AND yp BETWEEN y1 AND y2 ....

このクエリを高速化するにはどうすればよいでしょうか。
- インデックス作成に浮動小数点の座標を使用しないようにし、JTS の目的で保持しておく。
- SQL計算値を代わりに使用する。 できれば整数。 
  >> どのようなマシンにおいても、整数の計算が最速
  >> メモリでは整数のフットプリントが最小。$LB(),index, ...
- 必要な精度を守る。

緯度 1° は、110~111 km
経度 1° は 11km(84°N)~111km(0°N)の緯度に応じるため、
精度の目標が約 10mt である場合、4 桁で十分となります。
一般的な GIS ソースは、6~8 桁の10 進数を提供

プロセス自体については、かなり大きなグリッドから逆ピラミッドのような要件まで反復します。

図にそれが示されています。
まったく適合しないもの(グレー)を切り捨てます。
次のサイクルでは、より高い精度と、さらに多くの候補を除外してはるかに少ないターゲット(緑)を使って反復しています。

境界の矩形から始めたため、残りの結果にはJTS を使用した最終チェックが必要ですが、インスタンスの数は大幅に少なくなっています。

速度を得るには:
- 純粋な整数計算。 この違いを初めて目にしたときは、あまりにもショックで信じることができませんでした。
- インデックスを少なく保つことで、高いバッファーヒット率を達成します。
- 反復で結果をフィルタリングします。 インデックスは大きくなりますが、チェックする要素が少なくなります。
- 生成するインデックスの数を気にしないでください。 すべて静的データであるため、圧縮し、ほとんど変更されることはありません。
- Caché が提供する自由と柔軟性をすべて利用しましょう(当時、%PARALLEL は利用できませんでした)

ところで、これらを見つけたのは、お気に入りの競合他社( カリフォルニア州レッドウッドシティの O 社)に対してベンチマークを実施している時でしたウィンク

演習:
住民が 1 人を超え、収入が $$$ を超える 100 万か所の場所のうち
(ほぼすべての場所)、高速まで 300 メートル未満の場所を見つけてください。
高速道路地図には、約 500 万個の要素(GY)がありました。

同一の VM 構成では、Cachéは 精度によって異なりますが、約 12 分から 20 分かかりました。
一方の O.Spatial は、結果なしで停止。約 3 時間が経過してからは、進行している兆しがありませんでした。

この演習の原理は、ほかのビッグデータの状況にも適用できるのではないかと思っています。

ディスカッション (0)2
続けるにはログインするか新規登録を行ってください