9

メモリ内のデータ構造に耐久性を追加するために採用できる一般的な手法のいくつかは何ですか(つまり、プロセスがクラッシュした場合、そのデータ構造で以前に実行されたすべての操作を保持できますか?

データ構造にタプルのリストだけが含まれている場合は、それらをSQL DBに格納するだけで、耐久性が無料になります。しかし、私のデータ構造がグラフまたはツリーだった場合はどうなりますか?

私が考えることができる1つのことは、すべての操作をディスクに明示的にログに記録し(追加のみのログ)、クラッシュが発生した場合は、ログを再生して前の状態を保持することです。ログが大きくなりすぎると、圧縮ステップが発生します。これは、データベースエンジンが耐久性のために内部的に行うことだと思います(チェックポイントはこのプロセスと呼ばれるものです)?

ところで、これはデータセット全体がメモリに収まらないシナリオではないことに注意してください。

4

6 に答える 6

4

オブジェクト普及エンジンを試してみることをお勧めします。.NETの場合、PrevaylerforJavaと呼ばれる同様のエンジンの移植版であるBamboo.Prevalenceを試してみることをお勧めます

于 2008-10-03T14:25:33.120 に答える
1

私は2社の製品に「Mrjb」テクノロジーを実装しました。これは基本的に、質問で提案したものとまったく同じです:「メモリ常駐ジャーナルバックアップ」データベース、すべての変更が記録されるインメモリデータ構造それが起こるようにディスク。そして、それは私たちにとって非常にうまくいきます!

http://www.edval.biz/memory-resident-programming-object-databases

これを本番環境で使用した実世界での経験を共有できれば幸いです。イベントの正確なシーケンスを再生したり、任意の時点にロールバックしたりできるのが気に入っています。

于 2011-10-26T00:54:15.747 に答える
0

あなたが探している言葉は「シリアル化」です。

于 2008-10-03T14:12:49.107 に答える
0

XML、YAML、JSONなどを使用して、構造をシリアル化する方法を考え出すことができます。次に、それをDBに格納するか、プログラムのメイン実行ポイントの周りに1つの大きなtry/catchを配置します。次に、キャッチされない例外が発生してプログラムがクラッシュした場合は、データをシリアル化し、エラーメッセージやスタックトレースなどをログに記録することができます。

于 2008-10-03T14:15:18.007 に答える
0

はい、データを何らかの形式(xml、binaryなど)にシリアル化する必要があります。プログラミング言語によっては、これが組み込まれている場合があります。JavaにはObjectStreamsがあり、.NETにはXmlSerializerBinaryFormatterがあります。

于 2008-10-03T14:15:47.493 に答える
0

あなたの質問への答えは、ACIDデータベースシステムが行うことのようなことをすることを必要とします。したがって、最善の策は、RDBMSを使用してアプリケーションの状態を保存し、失われてはならない(アプリケーション)トランザクションがあるたびに更新することです。

于 2008-10-03T14:16:42.467 に答える