5

私の Rails アプリでは、場所の列フィールドの地理的境界をデータベースに保存したいと考えています。たとえば、ニューヨークの境界は多角形 (配列の配列) として表されます。

ポリゴンをシリアル化するようにモデルを宣言しましたが、このように保存する必要があるかどうかさえわかりません。これらのシリアル化されたポリゴンのサイズは 100,000 文字を簡単に超え、MySQLは標準の TEXT フィールドに約65,000 文字しか格納できません。

これで、MySQL にも LONGTEXT フィールドがあることがわかりました。しかし、私は自分のアプリをデータベースにとらわれないようにしたいと思っています。Railsはこれをどのように処理しますか? LONGTEXT フィールドに自動的に切り替わりますか? PostgreSQL を使い始めるとどうなりますか?

4

4 に答える 4

3

この時点で、このデータを保存する必要があるのか​​、それともこの形式でデータベースに保存する必要があるのか​​を自問することをお勧めします。

私は2つの可能な解決策を提案します:

  1. ポリゴンをファイル システムに保存し、データベースから参照します。このような大きなデータ項目は、データベースではほとんど役に立ちません。それらをテキストとしてクエリしても、実質的に無意味です。ファイルシステムはファイルの保存に適しています - それを使用してください。

  2. これらのポリゴンがデータベースにどうしても必要な場合は、正規化されたデータとして保存してください。ポリゴンと呼ばれるテーブルとポイントと呼ばれる別のテーブルを用意し、ポリゴンを逆シリアル化し、データベースの使用方法を反映する方法で保存します。

これが役に立てば幸いです。

于 2013-02-06T16:25:15.400 に答える
2

Postgresql には PostGIS というライブラリがあり、この状況で非常に役立つ可能性のある幾何学的位置と計算を処理するために私の会社で使用しています。postgresql には、配列とハッシュを許可する 2 つのデータ型もあると思います。text[]例として、テキストを別のデータ型に置き換えることができる場合のように、配列が宣言されます。ハッシュは hstore モジュールを使用して定義できます。

于 2013-02-06T16:14:07.853 に答える
2

この質問は私の質問の一部に答えます: Rails はデフォルトのバイト制限を 65535 に設定しており、手動で変更できます。

全体として、その後問題が発生するかどうかは、使用しているデータベースによって異なります。MySQL の場合、Rails は自動的に適切な *TEXT フィールドに切り替えます。MySQL は最大1GBのテキストを保存できます。

しかし、benzado と thomasfedb が言うように、データベースが使用されない可能性のある大量のメモリを割り当てないように、情報をファイルに保存する方がおそらく良いでしょう。

于 2013-02-06T16:28:20.500 に答える
1

この種のものをデータベースに保存することはできますが、外部に保存することを検討し、URLまたはその他の識別子をデータベースに配置する必要があります。

データベースにある場合は、そのテーブル内の何かにアクセスするという理由だけで、使用しないときに64Kのデータをメモリにロードしてしまう可能性があります。また、データベーステーブルよりも(Amazon S3などを使用して)読み取り専用ファイルのコレクションをスケーリングする方が簡単です。

于 2013-02-06T16:22:38.787 に答える