"design so that the in-memory storage is primary working storage, and have additionally a mechanism to ensure that any changes are persisted to recover if necessary"
"The standard high efficiency mechanism to make in-memory data persistent is journaling (writing out changes sequentially, usually in batches, to a log file of changes, ideally per-core logging to a core specific logfile) and checkpointing (asynchronously flushing the in-memory datastructure to persistent storage, and removing those journalled logs that now are no longer needed). "