MySQLでもジオメトラー(3)
最初に、GISとは関係ないけどメモ
MySQL以外のDBにあるのかどうかは知らないが、MySQLにはテーブルにも型がある
この型によって機能やシステムが変わってくる。デフォルトの型はMyISAM
この機能はデフォルトだけあって、ご存じの通り
では、ほかの型に何があるか
・MERGE
これはクエリー発行の度に動的に情報関係に位置移動が起こる様子
検索目的のみのDBに対してなら、これが有効なのかもしれない。最新更新数件の表示など、検索件数を記録せずとも上位数件のみの習得にすればokなのだから
・ISAM
MyISAMの劣化型
この型の特性はMyISAMの特性でもあるが、ISAMはMyISAMに比べてデメリットな点がある
MySQL5で削除予定の型であり、公式ではMyISAMへの移行を呼び掛けている
・HEAP
読んで字の如く。ハッシュを100%利用する高速テーブル
MySQLのクラッシュでデータ喪失&復元不可能になる恐怖コンボ持ちだが、ハッシュだけあって早い
また、データ型や演算子等様々な制限がある。後、ハッシュなのでメモリ食いでもある。大規模DBのインデックスに有用だろう
・InnoDB
安定した性能を保証する(らしい)テーブル型。復活処理も色々充実してるみたい
大規模なデータ群を保持運営する設計であり、それに特化したシステム
1TBを超えるデータを格納ながら、1秒間に平均800件の挿入/更新が可能と歌う。もはや化け物じゃないか…
場合によっては商用ライセンスを購入しないと運営できない型だったりする
・BerkeleyDB
通称BDB
こちらは別会社が提供している形式
クラッシュへの強い耐性があり、ロールバック処理も対応。ただし、パッチを適応しないとMySQLに利用できない形式
こっからMySQLでのGIS話
どこぞの記述で見つけたのだが、GISクエリはMyISAMでしか利用できないとか…そんな訳無いだろうが、要確認
一応、ポイント、ライン、ポリゴン、マルチライン、マルチポイントがサポートされている様子。しかしこれはPostGISとPostgreSQLのジオメトリと幾何学の関係な様な予感がビンビンと。こっちも要確認とする
話は変わるが、このサポートする概念が非常に面白い
Curveという形式は一次元を表しているそうだ。このCurveの上に位置するのがLineStringらしい。面白い話だ
Surfaceは二次元。上にはPolygonが存在している
以上の二つにも「MultiCurve」の様なジオメトリコレクションがある
PostGISではジオメトリコレクションを単一データと偽ればジオメトリカラムに情報を突っ込めた
MySQLではどうだろう。とりあえず、MySQLでは単一情報を扱う汎用カラムのGEOMETRYと複数個の情報を扱う汎用カラムのGEOMETRYCOLLECTIONが存在している。素直にGEOMETRYCOLLECTIONで組めと俺は自分に言いたいorz
んでもって最後にジオメトリインポートの構文(テスト前。机上の空論ともいう)
mysqlimport [options] database textfile1 [textfile2 ...]
がテキストファイルを読み込んで、指定したテーブルに放り込む構文
だから
CREATE TABLE testDB (ID int(9) PRIMARY KEY NOT NULL,geom GEOMETRY);
として
mysqlimport -s --localhost testDB impfile.txt
とするとokか?
impfile.txtの中身は
*------------------------------------------------* | 1 | 0101000000000000000000F03F000000000000F03F | *------------------------------------------------*
とかジオメトリまんまだと成功するのではないだろうか
ちなみに、通常通りクエリーから入力する場合は
INSERT INTO testDB (ID,geom) VALUES (2,GeomFromText('POINT(1 1)'));
とかだろう