一連の protobuf-net オブジェクトをデータベース セルに長さのプレフィックス付き protobuf-net オブジェクトの Byte[] として保存しています。
//retrieve existing protobufs from database and convert to Byte[]
object q = sql_agent_cmd.ExecuteScalar();
older-pbfs = (Byte[])q;
// serialize the new pbf to add into MemoryStream m
//now write p and the new pbf-net Byte[] into a memory stream and retrieve the sum
var s = new System.IO.MemoryStream();
s.Write(older-pbfs, 0, older-pbfs.Length);
s.Write(m.GetBuffer(), 0, m.ToArray().Length); // append new bytes at the end of old
Byte[] sum-pbfs = s.ToArray();
//sum-pbfs = old pbfs + new pbf. Insert sum-pbfs into database
これはうまくいきます。私の懸念は、データベースがわずかに破損した場合にどうなるかです。どのバイトが長さのプレフィックスであるかを知ることができなくなり、セルの内容全体を破棄する必要があります。ある種の pbf オブジェクト終了インジケータ (テキスト ファイルで使用される \n または EOF インジケータのようなもの) も使用することをお勧めします。これにより、レコードが破損した場合でも、他のレコードは回復可能になります。
もしそうなら、各 pbf の最後に記録終了インジケータを追加するための推奨される方法は何ですか?
Visual Studio 2010 で protobuf-netv2 と C# を使用します。
ありがとうマニッシュ