質問

Azure Tableエンティティにアレイを保管しようとしています。現在、ネイティブにサポートされているアレイの唯一のタイプは、長さ64kに制限されたバイトアレイです。サイズは十分ですが、エンティティにロング、ダブル、タイムスタンプの配列を保存したいと思います。

私は明らかに要求されたタイプに複数のバイトを自分でキャストすることができますが、それを達成するための最良の実践があるかどうか疑問に思っていました。

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

役に立ちましたか?

解決

私はあなたがすでに言及した方法以外にこれを行う良い方法を考えようとしてきました、そして私は途方に暮れています。私が思いつくことができる最も単純なソリューションは、配列を取り、バイナリシリアル化し、バイナリ配列プロパティに保存することです。

私が思いついたが却下した他のオプション:

  1. ネイティブに保存することが重要な場合、この情報を別の子テーブルに保持できます(Azureテーブルには技術的に関係がないことは知っていますが、このタイプのものを表現できないという意味ではありません)。この欠点は、オリジナルよりもかなり遅くなるということです。
  2. 配列を取り、XMLシリアル化して、文字列プロパティに保存します。これは、サードパーティのデータエクスプローラーツールを使用するときに配列の内容を見ることができ、アレイの内容で正確な一致を探す(非効率的な)クエリを実行できることを意味します。
  3. 使用する Lokad Cloud脂肪エンティティ データを保存します。これは本質的にあなたがオブジェクト全体を取り、バイナリはそれをシリアル化し、結果をテーブルエンティティのプロパティ全体で64kbブロックに分割します。これは、あなたが経験しているような問題を解決しますが、このフレームワークをサポートするツールを使用してデータにのみアクセスできます。

他のヒント

Azure Table Storageクライアント(Lucifure Stashと呼ばれるAzure Table Storageクライアント)を作成しました。これは、アレイ、列挙、大規模なデータ、シリアル化、公共および私有地などをサポートしています。

で入手できます http://www.lucifure.com またはヌゲットから。

保存するキーと価値のあるコレクションがある場合は、 Azure Blobsをご覧ください. 。シングルブロブごとに最大25mの時間値ポイントの配列をかなり効率的に保存できます(データセット内にランダムアクセスがあります)。

オブジェクトをBlobストレージに保存することを選択し、それを取得するために複数の「キー」が必要な場合は、調べたいキーを保存し、正確なブロブへの参照を保存するAzureテーブルまたはNを作成するだけです。アイテム。

値をCSV文字列として保存してみませんか?

.NET JavaScript Serializerを使用して、ArrayをJSON文字列としてシリアル化できます。http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

このクラスには、アレイがシリアル化されているときに64Kを超えないように使用できる「maxjsonlength」プロパティがあります。また、同じクラスを使用して、保存されたオブジェクトをゆるくすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top