The isolation algorithm has two key parts: (1) how to
perform the read and write operations of isolated users
(Note that unisolated users can access only the main
database); and (2) how to do merging after an isolated user
is proven innocent. For part 1, we can enforce one-way
isolation where isolated users can read main versions if they
do not have the corresponding suspicious versions, and all
writes of isolated users must be performed on suspicious
versions. In this way, the data freshness to isolated users is
maximized without harming the main database.
The key challenge in part 2 is the inconsistency
between main versions and suspicious versions. If a
trustworthy user and an isolated user update the same object x independently, x[main] and the suspicious version will become inconsistent, and one update has to be backed out in
order to do consistent merging. In addition, [25] shows that
(1) even if they do not update the same object,
inconsistency could still be caused; and (2) the merging of
the effects of one isolated user could make another still
being isolated history invalid. These inconsistencies must
be resolved during a merging (e.g., [25] proposes a
precedence-graph based approach that can identify and
resolve all the inconsistencies).