これがより良いフォーラムであると示唆されたとき、Stack Overflowで尋ねられた質問の再投稿。
私は、地理空間ではないが非常によく適合するデータセットをプッシュするために少し実験を試みていますが、結果はやや不安定です。データセットはゲノムデータです。たとえば、遺伝子などの要素が特定の開始座標と停止座標(X軸)を占めるDNA領域があるHuman Genomeです。Y軸を占めるDNAの複数の領域(染色体)があります。目標は、単一のY座標に沿って2つのX座標と交差するすべてのアイテム、たとえばLineString(START 1、END 2)を戻すことです。
理論は健全に思えたので、既存のMySQLベースのゲノムプロジェクトにそれをプッシュし、次のようなテーブル構造を思い付きました。
CREATE TABLE `spatial_feature` (
`spatial_feature_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`external_id` int(10) unsigned NOT NULL,
`external_type` int(3) unsigned NOT NULL,
`location` geometry NOT NULL,
PRIMARY KEY (`spatial_feature_id`),
SPATIAL KEY `sf_location_idx` (`location`)
) ENGINE=MyISAM;
external_id
このテーブルにエンコードしたエンティティの識別子を表し、このexternal_type
ソースをエンコードします。すべてが順調に見えたので、いくつかの予備データ(30,000行)を入力しましたが、これはうまくいくようです。これが300万行のマークを超えて増加すると、MySQLは空間インデックスの使用を拒否し、使用を強制されたときに遅くなりました(40秒対全テーブルスキャンを使用した5秒)。さらにデータが追加されると、インデックスの使用が開始されましたが、パフォーマンスの低下が続きました。インデックスを強制的にオフにすると、クエリは8秒になりました。私が使用しているクエリは次のようになります。
select count(*)
from spatial_feature
where MBRIntersects(GeomFromText('LineString(7420023 1, 7420023 1)'), location);
これに入力されるデータは、Y次元に沿って非常に密集しています(非常に長い道路上のすべての建物、電話ボックス、郵便ボックス、鳩の位置を記録したと考えてください)。Javaでこのデータを使用してR-Indexがどのように動作するかをテストし、フィールドの他のユーザーがそれらをフラットファイル形式に適用して成功しました。ただし、このテストの目標であるデータベースに誰もそれらを適用していません。
特定の軸に沿ってあまり分散していない空間モデルに大量のデータを追加すると、そこにいる誰かが同様の動作を見ましたか?座標の使用を逆にしても問題は解決しません。それが原因である場合、私は次のセットアップを実行しています
- MacOS 10.6.6
- MySQL 5.1.46