[groonga-dev,01991] Groongaのgeo_in_circle関数を利用した場合に、特定の位置を中心とした場合にIndexが効いていないように見える件

アーカイブの一覧に戻る

(Takatomo Okitsu) 沖津 貴智 takat****@dena*****
2013年 12月 12日 (木) 12:09:26 JST


DeNA沖津と申します。

先日はGroongaを囲む夕べで発表の機会をいただきまして大変ありがとうございました。

今回のメールの件ですが、Groongaの位置情報周りで1点バグと思われる挙動を見つけたので、その報告になります。
先日からGroogaの検索結果がタイムアウトとなる事象が頻繁に発生し、こちらで解析を行ったところ、geo_in_circle関数を利用し、特定の位置を中心として検索をかけた場合、Indexが効かなくなる?(検索が非常に遅い?)ケースが見つかりました。

条件は以下です。

【条件】
・geo_in_circleで指定する中心点が、緯度経度ともにマイナスを指定(主に南米あたり)
・検索距離は数千キロを指定
・アメリカ本土に検索対象が1万以上存在

クエリ例)※URLエンコードは解除してます
http://localhost:10041/d/select?timeout=3&filter=geo_in_circle(location,
"-3.527589x-65.383117", 8693854.5)&&_key != 14601&table=Users&limit=0

いろいろ調べてみたのですが、どうも緯度経度がどちらもマイナスになる(もしくはマイナスではないがゼロに近い)場合にほぼ確実に遅くなり、逆にそれ以外の条件では高速に結果が帰ってきます。
そのため、上記の特定の条件化において、Groongaで適切にIndexが効かなくなるケースがあるんじゃないかと想定しております。
※本メールの最後に、検索が遅くなる場合の中心点と距離の一覧を抽出してますのでご確認ください。これはProduction環境で実際にgrepしたログになります。

ちなみにgroongaのテーブルは以下のようにcreateしております。

table_create Users TABLE_HASH_KEY UInt64
column_create Users location COLUMN_SCALAR WGS84GeoPoint
table_create Locations TABLE_PAT_KEY WGS84GeoPoint
column_create Locations user COLUMN_INDEX Users location

こちら現時点では仕様ということになりますでしょうか?
よろしくお願いいたします。

"-7.225604x-87.743987", 5356131.5
"-13.094386x-46.872537", 7662465
"-9.087766x-48.267936", 7903861
"-9.087766x-48.267936", 7903861
"-11.268297x-37.864660", 7779980.5
"-32.031505x-119.250050", 6232282.5
"-0.749369x-40.792674", 5032409
"-6.209148x-38.348014", 4995530.5
"-7.856399x-40.757182", 8508321.5
"-1.075289x19.008430", 8782859.5
"-1.075289x19.008430", 8782859.5
"-28.091706x-107.072791", 6666033
"-32.870017x-118.147006", 6171141
"-12.572479x-88.615764", 8154287
"-6.774840x-49.875250", 7760528.5
"-6.774840x-49.875250", 7760528.5
"-6.774840x-49.875250", 7760528.5
"-5.846667x-77.874039", 5951344
"-32.870017x-95.898565", 6171141
"-14.635023x-64.461546", 6316520.5
"-14.635023x-64.461546", 6316520.5
"-1.661192x-28.229759", 5030267.5
"-5.716156x-44.059654", 8614394
"-3.706769x-59.399358", 8720933
"-3.913205x-59.547410", 8702041.5
"-0.682361x15.188348", 7788740.5
"-1.406467x10.244968", 7784673
"-1.406467x10.244968", 7784673
"-1.406467x10.244968", 7784673
"-16.607686x-116.308042", 6116757.5
"-19.201199x-58.812839", 5986643
"-21.227760x-55.628333", 5875354
"-1.507020x32.270350", 7842196
"-4.412904x18.670634", 8693696
"-13.735496x-50.675058", 8055373
"-13.735496x-50.675058", 8055373
"-14.223485x-43.819589", 8012863
"-8.329263x-121.464850", 8112802.5
"-28.008192x-113.365043", 5523201.5
"-8.177475x-114.353770", 7156145
"-3.538826x-117.049516", 8361106
"-2.755979x-123.943805", 7125045.5
"-7.817576x-56.003795", 8432977
"-7.817576x-56.003795", 8432977
"-12.082652x-65.464470", 6006358.5
"-4.927749x-74.869902", 8584238.5
"-13.379720x-60.396152", 5874249.5
"-8.384652x-64.001595", 7158369
"-3.527589x-65.383117", 8693854.5
"-8.824173x-97.258814", 8416175.5
"-3.648302x-72.744169", 5140891.5
"-3.648302x-72.744169", 5140891.5
"-16.042521x-93.019107", 5608199.5




groonga-dev メーリングリストの案内
アーカイブの一覧に戻る