2010-11-30 10 views
2

Azure Tableエンティティに配列を格納することを検討しています。現在のところ、サポートされている唯一のタイプのアレイは、64K長に制限されたバイト配列です。サイズは十分ですが、long、double、timestampの配列をエンティティに格納したいと思います。Azureテーブルストレージエンティティ(非バイト)の配列

私は明らかに要求されたタイプに複数のバイトをキャストできますが、それを達成するためのベストプラクティスがあるかどうかは疑問でした。

明確にするために、これらは、単一のキーに関連付けられた固定長アレイ(例えば、1000個のセル)である。

答えて

3

私は既に言及した方法以外にこれを行う良い方法を考えようとしてきました。私は迷っています。私が思いつくことができる最も簡単な解決策は、配列を取得し、バイナリをシリアル化し、バイナリ配列のプロパティに格納することです。

  1. ネイティブにそれを格納することが重要な場合は、別の子テーブルにこの情報を保つことができる(私はAzureのテーブルには、技術的な関係を持っていない知っているが、私が思い付くが、却下しました

    その他のオプションそれはあなたがこのタイプのものを表現することはできません)。これは、オリジナルよりもかなり遅くなるという欠点があります。

  2. 配列をとり、XMLをシリアル化して文字列プロパティに格納します。これは、サードパーティのデータエクスプローラツールを使用しているときに配列の内容を確認でき、配列の内容と完全に一致するものを探す(非効率的な)クエリを実行できることを意味します。
  3. Lokad Cloud fat entitiesを使用してデータを保存します。これは本質的にオブジェクト全体であり、バイナリをシリアル化し、結果をテーブルエンティティのプロパティ間で64kbのブロックに分割します。これはあなたが経験しているような問題を解決しますが、このフレームワークをサポートするツールを使用してのみデータにアクセスすることができます。
+0

コードをLokad.Cloudから取り出し、必要に応じて再利用することができます。 –

3

保存するキー値コレクションがあれば、Azure BLOBもチェックできます。 1つのBLOBあたり最大25M時間値ポイントの配列を効率的に格納できます(データセット内のランダムアクセスを使用)。

+0

私は私のリストを編集していたときに私はこれをしたいと思う、私はテーブルにこだわっていると思う。(バイナリ/ XMLは関係ありません)シリアル化し、オブジェクト全体をキーで保存することは可能です。大きな欠点は、大量のブロブを管理するための優れたツールサポートがなく、キーを使用してクエリを実行することだけに限られていることです。 – knightpfhor

+0

ペアのテーブル行を使用してデータをサプリメントできます。 –

2

オブジェクトをBLOBストレージに保存し、取得するために複数の「キー」が必要な場合は、ルックアップするキーと参照を格納する2つまたはそれ以上のazureテーブルを作成することができます正確なブロブ項目に変換します。

+0

これは良い選択ですが、もう少し作業はしますが、全体のコストを低く抑えながら柔軟性を高めることができます。 – maulik13

0

なぜ値をCSV文字列として保存しないのですか?

+0

サイズの制限。 http://stackoverflow.com/questions/8950693/about-azure-table-storage-row-1mb-limit-how-it-counts-for-utf8-codeを参照してください。 –

4

私は、配列、列挙型、大規模データ、シリアル化、パブリックプロパティとプライベートプロパティ、フィールドなどをサポートするAzureテーブルストレージクライアント、Lucifure Stashを作成しました。

http://www.lucifure.comまたはNuGetから入手できます。

0

あなたは、.NET、JavaScriptのシリアライザを使用してJSON文字列として、あなたの配列をシリアル化できます。 http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

このクラスはあなたがシリアライズされたとき、あなたの配列が64Kを超えないことを確認するために使用することができ、「MaxJsonLength」プロパティを持っていますそれら。また、同じクラスを使用して、格納されたオブジェクトを逆シリアル化することもできます。