After discussion with Victor by using DM, I decided to provide high-level API instead of low-level APIs.
- gdbm.open(filename, snapshots=(foo, bar)) will do everything at once. Regards, Dong-hee 2022년 1월 21일 (금) 오후 12:52, Dong-hee Na <donghee...@python.org>님이 작성: > For more readable code: > https://gist.github.com/corona10/d4fe0b6367ea6865e37b4369a7d60912 > > 2022년 1월 21일 (금) 오후 12:50, Dong-hee Na <donghee...@python.org>님이 작성: > >> I exchanged a mail for investigating details. >> >> Before getting started, please remind the following fact. >> - The latest snapshot is always valid, even if corruption has not >> occurred. >> >> > Why is a separated script needed? / A single script cannot >> automatically detect a corrupted database and load the latest snapshot? >> >> So, the author said a separate script is never needed, >> if the user reads from the latest snapshot file, it will always be >> recovered. >> so the user code will be like this. >> >> import dbm.gnu as dbm >> >> # skip check code that all files are exists, origin, even_snapshot, >> odd_snapshot >> >> >> if origin is None: >> >> db = dbm.open(origin, 'nx') # For extension format >> >> db.gdbm_failure_atomic(even_snapshot, odd_snapshot) # For snapshot >> declaration >> >> else: >> >> latest_snapshot = dbm.gdbm_latest_snapshot(even_snapshot odd_snapshot) >> >> db = dbm.open(latest_snapshot, 'r') # Open the latest valid >> snapshot >> >> for k, v in zip('abcdef', 'ghijkl'): >> db[k] = v >> >> db.sync() >> db.close() >> >> >> > How is different from simply copying the whole database file? >> >> >> Under the hood, the gdbm crash-tolerance mechanism *does* (logically) copy >> the whole database file, but it does so efficiently, using "reflink" >> copies, so the amount of physical storage resources used is minimal. >> >> You may good to read this paper: >> https://dl.acm.org/doi/pdf/10.1145/3487019.3487353 >> >> >> Warm Regards, >> >> Dong-hee >> >> >> 2022년 1월 18일 (화) 오후 10:54, Victor Stinner <vstin...@python.org>님이 작성: >> >>> How does someone know if a database is corrupted? Why is a separated >>> script needed? >>> >>> A single script cannot automatically detect a corrupted database and >>> load the latest snapshot? >>> >>> How is different from simply copying the whole database file? >>> >>> Victor >>> -- >>> Night gathers, and now my watch begins. It shall not end until my death. >>> >>
_______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/PFEG4XFU3WICTVCPV5IYKOAONNU2NLPZ/ Code of Conduct: http://python.org/psf/codeofconduct/