1

protobuf-net を使用して、次のシリアル化されたデータ構造を保存および取得できるかどうかを把握しようとしています。

私は毎日、サイズが 16 バイトの約 200,000 個のオブジェクトを持っています (オブジェクトには、1 つの long 型と 2 つの浮動型の値、8 バイトと 2 * 4 バイトが含まれます) をバイナリ ファイルに保存したいと考えています。このようなオブジェクトの取得は、丸 1 日で完了します。たとえば、2012 年 4 月 1 日から 2012 年 4 月 6 日までの間のオブジェクトをリクエストしたい場合、4 月 1 日から 4 月 2 日...4 月 6 日まで読み込まれる必要があります。1 つの要件アクセスはランダムである必要があるということです。つまり、ファイルには 2010 年から 2012 年 6 月までのデータが含まれている可能性がありますが、2012 年 4 月 1 日から 4 月 6 日までの要素のみを取得したい場合があります。最初からすべての要素を読み取る必要はありません。

私は現在、DateTimeTick の順序で連続したバイト配列としてデータを保存していますが、新しい日がいつ開始または終了するかは関係ありません。protbuf-net を使用して、データを IEnumerable として終日の「ブロブ」としてストリーミングできれば、それは素晴らしいことです。それは可能ですか?protobuf-net でシリアル化された毎日の IEnumerable または List を保存することを考えていましたが、後で特定のリストにランダムにアクセスする方法がわかりませんか? アイデアや提案はありますか?ありがとう

4

1 に答える 1

1

これはprotobuf-netの典型的な使用例ではありません。そのように使用することは可能だと思いますが、そうしようとするのは私の本能ではありません。重要な要件が日ごとに分割することである場合、複数のファイルを使用することは当然の選択です。または、既存のファイル形式を微調整して、(1 日ごとに) 日付スタンプとその日のデータのサイズを含めFileStreamます.Position

protobuf-netには、ストリーミング API とスキップ API、またはコア シリアライザーを使用したくない場合は生の「リーダー」API がありますが、これが大いに役立つかどうかはわかりません。

率直に言って、(現在のプロセスでは)各チャンクは固定サイズであるため、バイナリ検索(おそらく開始位置に線形補間を使用)を使用して、適切な時間を探すこともできます。

于 2012-06-08T06:15:28.110 に答える