後でまで待つことは、何かを信頼できるものにするための戦略ではありません。実際、あなたは完全に反対の方向に行かなければなりません。永続化する必要があるものを見つけたらすぐに、それを永続化するためのアクションを実行する必要があります。実際、信頼性を高めたい場合は、最初に、変更をコミットしようとしているときに発生する可能性のある障害から回復するために必要な手順をディスクに書き込む必要があります。疑似パイソン:
class A:
def __init__(self, filename, sources):
self.recover()
# gather info from file
# info is updated during lifetime of the object
def update_info(self, info):
# append 'info' to recovery_log
# recovery_log.flush()
# write 'info' to file
# file.flush()
# append 'info-SUCCESS' to recover_log
# recovery_log.flush()
def recover(self):
# open recovery_log
# skip to last 'info-SUCCESS'
# read 'info' from recover_log
# write 'info' to file
# file.flush()
# append 'info-SUCCESS' to recover_log
# recovery_log.flush()
重要な点は、recover()
毎回発生flush()
することと、次のステップが発生する前にデータがディスクに確実に出力されるように、すべてのステップの後にが続くことです。もう1つの重要なことは、リカバリログ自体で追加のみが発生することです。ログ内のデータが破損する可能性があるような方法で上書きされるものはありません。