@Ian T. Smallがファイルタイプの違いにうまく対処したと思います。
@Aniket に対する @Shaharyar の応答を考慮して、私たちが持っている限られた範囲の情報を考慮して、解決策として DBMS の会話に追加したかっただけです。
データセットは増えますか? エントリはどのように「多くのフィールド」を構成しますか?
r-dbms (リレーショナル) が大規模なデータ セットに対する潜在的なソリューションであることに同意します。次の質問は、大規模なデータ セットとは何かです。
@Shaharyarが多くのフィールドを言うとき、
私は10または100のフィールドについて話しているのですか?
=> 10 ~ 20 個のフィールドでは、r-DBMS のオーバーヘッド (インストール サイズ、CRUD コードなど) は必要ありません。オブジェクトの XML シリアル化は、はるかに単純です。
=>不確定な数のフィールドがある場合(つまり、時間の経過とともにフィールド数が増加する場合)、ACID準拠が必要な場合、または何百ものフィールドがある場合、@Aniketスポットオンと言えます。
@Matt の NoSQL の提案も素晴らしいです。高スループット (数秒ごとの更新に必要なスループットよりもはるかに高い) と簡素化されたシリアライゼーション/デシリアライゼーションを提供します。
ここで見られる唯一の欠点は、アプリケーションのサイズ/構成です。(軽量で構成が簡単なMongoDBでも、DBMS機能とドライバーに数十MBが追加されます。高速で簡単な配布を目的とした1MB未満の小さなアプリケーションには理想的ではありません。)ああ、@ Shaharyar、ACIDコンプライアンスが必要な場合はお願いします最初にデータベースを確認してください。たとえば、Mongo はそれを提供していません。データが失われるとは言いませんが、保証はありません。
もう 1 つのオプション - DBMS
を使用せずにスループットを向上 最後の提案として、少しコードが必要です (具体的には、バッファーとして機能するオブジェクト)。
1. データ セットが
小さい (100 ではなく 10 である)
2. フィールドの数が固定されている
3. ACID 準拠の要件がない
4. トランザクション負荷の増加が懸念される (つまり、1 秒あたりの更新数
が多い)また、変更をデータストア オブジェクトにキャッシュし、プログラムの終了時にフラッシュするか、「n」秒/分などごとに時間を指定してフラッシュすることもできます。
@Ian T. Small の投稿によると、.Net フレームワークに組み込まれたネイティブ XML クラスのシリアル化を使用します。
以下は単純化しすぎた疑似コードですが、アイデアが得られるはずです。
public class FieldContainer
{
bool ChangeMade
Timer timer = new Timer(5minutes)
private OnTimerTick(...)
{
If (ChangeMade)
UpdateXMLFlatFile()
}
}