2

アプリケーションにユーザー保存ファイルを実装するためのこれよりも効果的な方法はありますか?

(私はSql ServerでC#/ .Netを使用しています)

私の目標:

ユーザーが作成したデータポイントを (他の構造化データと共に) 任意の拡張子の「プロジェクト ファイル」に保存できるようにしたいと考えています。

提案された方法:

  • 各データポイントを FileID 列とともにデータベースに保存します
  • ユーザーがファイルを保存するときに、すべてのデータポイントを取得します: "SELECT * ... WHERE FileID = @CurrentFileID"。
  • これらのデータポイントをすべて XML ファイルにエクスポートします。
  • これらのデータポイントをすべてデータベースから削除します。
  • XML ファイルをプロジェクト ファイルとして (またはその一部として) 保存します。
  • ユーザーがプロジェクト ファイルをロードするたびに、データを XML からデータベースにインポートします。
  • FileId = 現在のファイル ID を持つデータベースからのデータポイントを表示します。

別の方法: Sqlite を使用して、ユーザーのプロジェクトごとに個別の Sqlite データベース ファイルを作成しますか?

4

1 に答える 1

2

「最良の」答えは、いくつかの要因によって異なります。データの使用について詳細な質問をすることで、最適な実装にたどり着くことができます。

最初の質問は、現在または将来、データ ポイントを個別のフィールドとしてデータベースに格納する理由が考えられるかどうかです。

これらのデータ ポイントを消費する必要があるものとの関連で、この質問について考えてみてください。

たとえば、それらをレポートに取り込んだり、いくつかの基準に基づいて一度に一部のみをエクスポートしたりできるようにする必要がある場合は、ほとんどの場合、それらを離散値としてデータベースに保存する必要があります。

ただし、ポイントが完全なセットとしてアプリケーションでのみ使用され、毎回 XML を逆アセンブルおよび再アセンブルする必要がある場合は、完全な XML ファイルを BLOB としてデータベースに保存するだけでよい場合があります。これにより、ストレージ、バックアップ、および更新の操作が非常に簡単になりますが、将来の柔軟性も制限されます。

私は最初のアプローチ (離散フィールド) に傾倒する傾向がありますが、データの他の用途を考えるのが難しい場合は、2 番目のアプローチから簡単に始めることができます。また、離散フィールドが必要になった場合は、必要に応じて BLOB 内のデータを表形式のデータに変換するための比較的簡単な演習です。

追加の質問をすることで、回答を絞り込むことができます。

  • データの規模はどのくらいですか (数百、数千、数百万、数十億)?

  • 挿入と更新の頻度 (x/秒、分、日、年)?

  • 希望する応答時間はどのくらいですか (ミリ秒、秒、関係ありません)。

1 秒あたり数十万のポイントを挿入する必要がある場合は、データを BLOB として保存する方がよい場合があります。

ただし、数百ポイントを 1 日に数回挿入するだけでよい場合は、表形式のアプローチから始めたほうがよい場合があります。

複雑になる可能性がありますが、シナリオでデータがどのように使用されているかを調べることで、システムに適した答えにたどり着くことができるはずです。

于 2013-07-13T22:22:16.120 に答える