10kのテキストデータを保存する方法はいくつかありますが、それが受け入れられるかどうかは、他に何を保存する必要があるか、およびそれをどのように使用するかによって異なります。
任意の大きなデータ(特にバイナリデータ)を保存する必要がある場合は、S3ファイルポインターが魅力的です。SimpleDBがこのシナリオで追加する価値は、SimpleDBに保存しているファイルメタデータに対してクエリを実行する機能です。
10kに制限されたテキストデータの場合、SimpleDBに直接保存することをお勧めします。1つのアイテムに簡単に収まりますが、複数の属性に分散させる必要があります。これを行うには、基本的に2つの方法があり、それぞれにいくつかの欠点があります。
1つの方法は、より柔軟で検索しやすい方法ですが、データに触れる必要があります。データを約1000バイトのチャンクに分割し、各チャンクを属性値として複数値属性に格納します。複数値の属性には順序付けが課されていないため、順序付けのために各チャンクの前に番号を付ける必要があります(例:01)
すべてのテキストが1つの属性に格納されているという事実により、述語内の1つの属性名でクエリを簡単に実行できます。1kから200+kまでの任意の場所で各アイテムに異なるサイズのテキストを追加でき、適切に処理されます。ただし、先頭に追加された行番号がクエリに対して正の値になる可能性があることに注意する必要があります(たとえば、01
すべてのアイテムを検索している場合は、そのクエリに一致します)。
SimpleDB内にテキストを保存する2番目の方法では、テキストチャンク内に任意の順序データを配置する必要はありません。各テキストチャンクを異なる名前の属性に配置することにより、順序付けを行います。たとえば、属性名を使用できます:desc01
desc02
...。desc10
次に、各チャンクを適切な属性に配置します。両方の方法で全文検索を実行することはできますが、多くの述語を指定する必要があり、SimpleDBが属性ごとに個別のインデックスを検索することになるため、この方法では検索が遅くなります。
このタイプの回避策は、データベース内でこのタイプの低レベルの詳細を処理することに慣れているため、ハックと考えるのは簡単かもしれません。SimpleDBは、ファーストクラスの機能として可用性を提供する手段として、この種のものをデータベースからクライアントにプッシュするように特別に設計されています。
リレーショナルデータベースがテキストを1,000個のチャンクに分割して、実装の詳細としてディスクに保存していることがわかった場合、それはハックのようには見えません。問題は、SimpleDBクライアントの現在の状態では、このタイプのデータフォーマットを自分で多く実装する必要があるということです。これは、スマートクライアントで理想的に処理されるタイプのものです。まだ無料で利用できるスマートクライアントはありません。