2012-01-21 5 views
11

は、最初に引用できるようにします:エンティティのプロパティのすべてのAzureテーブルストレージロー1MB制限について、UTF8コードはどのようにカウントされますか?

コンバインドサイズは1MBを超えることはできません。 msdn

私の質問から は、(ROW /エンティティのための)です:すべてがデータをXMLedされているので、1メガバイトのために、何の1MBですので、ASCII文字数、またはUTF8チャーの1メガバイト、または何かの1メガバイトそれ以外は?

サンプル

Row1: PartitionKey="A', RowKey="A", Data="A" 
Row2: PartitionKey="A', RowKey="A", Data="A" (this is a UTF8 unicode A) 

は、行1と行2と同じ(長さ)のサイズ、またはRow2.Length=Row1.Length+1ますか?

+0

私の答えRow2.Length = Row1.Length + 1 –

答えて

12

例の「データ」などの単一の列は64 KBのバイナリデータに制限され、1行は1 MBのデータに制限されます。文字列はUTF8形式のバイナリにエンコードされているので、文字列のバイト数が制限されます。列に64 KBを超えるデータを格納する場合は、Lokad(https://github.com/Lokad/lokad-cloud-storage/blob/master/Source/Lokad.Cloud.Storage/Azure/FatEntity.cs)を使用してFAT Entityなどのテクニックを使用できます。このテクニックはかなりシンプルです。文字列をバイナリにエンコードし、バイナリを複数の列に分割するだけです。次に、テーブルから文字列を読みたい場合は、再び列を再結合し、バイナリを文字列に変換し直します。

+0

ASCIIコードなら1Mの文字を保存できますが、UTF8コードは半分しか保存できませんか? –

+3

UTF8エンコーディングは、ASCIIエンコーディングのサイズの2倍である必要はありません。あなたのキャラクターが0から128までのASCII範囲にある場合、エンコードは同じサイズになります。 UTF8がどのようにコード化されているかを調べる必要があります。 – RyanFishman

+0

アジアの文字を保存すると、純粋な英語の半分しか保存できません。右 –

関連する問題