これはGoogle BigTable の論文からのショットです
Oracle のREDO ログのようなものを保持する代わりに、データベース内に同じデータの複数のバージョンを格納する必要があるシナリオにはどのようなものがありますか?
特にこの例について言えば、データベースに html ページの複数のバージョンを保存する必要があるのはなぜですか? とにかくすべてのバージョンがそこにあるわけではなく、それらの一部だけが存在するため(最後の5つなど)、バックアップとして機能することはできません。
これはGoogle BigTable の論文からのショットです
Oracle のREDO ログのようなものを保持する代わりに、データベース内に同じデータの複数のバージョンを格納する必要があるシナリオにはどのようなものがありますか?
特にこの例について言えば、データベースに html ページの複数のバージョンを保存する必要があるのはなぜですか? とにかくすべてのバージョンがそこにあるわけではなく、それらの一部だけが存在するため(最後の5つなど)、バックアップとして機能することはできません。
BigTable と同様の非リレーショナル ストアで認識すべきことの 1 つは、それらの一貫性モデルがまったく異なることです。
複数のノードにデータを分散するという概念を導入すると、一貫性エラーのリスクが生じます。分散データベースは、データベースをシャットダウンしたり、「復元」と見なされることを実行したりせずに、ノードがダウンしたことによる不整合から回復できることが期待されています。
ノード「A」と「B」にレコードが保存されているとします。「マルチマスター」レプリケーションでは、プライマリとコピーの概念がありません。むしろ、レコードが両方のノードで同時に更新される可能性があります (特に 2 つの間の通信が切断されている場合)。バージョニングは、結果として生じる一貫性の問題を解決するのに役立ちます。
また、これらのデータベースは「削除」を行わない傾向があります。削除済み(または期限切れなど)としてマークされた新しいバージョンを保存するだけです。同様に、「ロールバック」は、以前のレコードから新しいバージョンのレコードを作成することです。
ケース:
過去にdaaがどのように変化したかを知りたい。例: プロセスを通過する際の注文ステータスの追跡。顧客が移動した場合でも、顧客の住所を追跡します。
これはビジネス要件である場合もあれば、実際には法的要件である場合もあります。多くの場合、両方です。
状況 : データのビューを「そのまま」取得する - これは診断に非常に役立ちます (つまり、データベース全体を復元せずに、同じデータを使用してプロセスを再実行できます)。短時間でこれを行う方法については、Oracle の Flashback Query を参照してください。
ビジネス ルールが顧客によって現場でソフト コード化され、データベースに保存される状況があります。それらはいつでも変更される可能性がありますが、保存されたデータの計算に使用されます。構成をバージョン管理することで、構成を「ロールバック」し、データがどのように派生したかを理解することができます。
(各テーブルの履歴テーブルを効果的に格納する、Oracle の組み込み行バージョン管理の特定の用語を思い出せません)。
はい、バージョン管理はより多くのストレージを意味しますが、それが役立つ場所では、データが揮発することはめったにないと言えます。
特にこの例について言えば、データベースに html ページの複数のバージョンを保存する必要があるのはなぜですか?
以前のバージョンに戻したい場合。
また、監査/変更ログの変更を追跡するのにも役立ちます (元に戻すことができない場合でも、少なくとも誰がいつ何を変更したかを確認できます)。
(REDO ログに加えて) Oracle は同じデータの以前のバージョンも (UNDO テーブルスペースに) 保存することをご存知ですか? これはマルチバージョン同時実行制御と呼ばれ、ロックのない選択を可能にします (新しいデータがコミットされるのを待たずに、進行中のトランザクションによって変更されている行の前の値を選択できます)。