A method comprising: assigning rows of a table to a plurality of slices; wherein each row of the table is assigned to a single slice of the plurality of slices; for each slice of the plurality of slices, storing a plurality of duplicas; wherein each duplica of each slice contains rows of the table that belong to the slice; wherein, for each slice of the plurality of slices, storing the plurality of duplicas includes: storing a primary duplica in one persistent storage (200D, 202D, 204D, 206D, 208D) of a plurality of persistent storages (200D, 202D, 204D, 206D, 208D); and storing one or more secondary duplicas in one or more persistent storages (200D, 202D, 204D, 206D, 208D) of the plurality of persistent storages (200D, 202D, 204D, 206D, 208D); wherein each persistent storage (200D, 202D, 204D, 206D, 208D) of the plurality of persistent storages (200D, 202D, 204D, 206D, 208D) is local to and directly accessible only by a single engine instance (200B, 202B, 204B, 206B, 208B) of a plurality of engine instances (200B, 202B, 204B, 206B, 208B); wherein each engine instance (200B, 202B, 204B, 206B, 208B) of the plurality of engine instances (200B, 202B, 204B, 206B, 208B) includes logic for accessing rows stored in the table; wherein the plurality of persistent storages (200D, 202D, 204D, 206D, 208D) includes a first persistent storage and a second persistent storage; wherein the first persistent storage stores the primary duplica for a particular slice that includes data for a particular row of the table; wherein the second persistent storage stores a particular secondary duplica for the particular slice; receiving a request to perform a transaction that affects data in the particular row of the table; initiating execution of the transaction at a first engine instance that is local to the first persistent storage; in response to the first engine instance ceasing to function prior to committing the transaction: establishing the particular secondary duplica on the second persistent storage as a new primary duplica for the particular slice; and causing the transaction to be resumed and committed by a second engine instance that is local to the second persistent storage, wherein causing the transaction to be resumed by the second engine instance includes causing the second engine instance to perform only portions of the transaction that the first engine instance did not report as successfully executed. assigning rows of a table to a plurality of slices; wherein each row of the table is assigned to a single slice of the plurality of slices; for each slice of the plurality of slices, storing a plurality of duplicas; wherein each duplica of each slice contains rows of the table that belong to the slice; wherein, for each slice of the plurality of slices, storing the plurality of duplicas includes: storing a primary duplica in one persistent storage (200D, 202D, 204D, 206D, 208D) of a plurality of persistent storages (200D, 202D, 204D, 206D, 208D); and storing one or more secondary duplicas in one or more persistent storages (200D, 202D, 204D, 206D, 208D) of the plurality of persistent storages (200D, 202D, 204D, 206D, 208D); storing a primary duplica in one persistent storage (200D, 202D, 204D, 206D, 208D) of a plurality of persistent storages (200D, 202D, 204D, 206D, 208D); and storing one or more secondary duplicas in one or more persistent storages (200D, 202D, 204D, 206D, 208D) of the plurality of persistent storages (200D, 202D, 204D, 206D, 208D); wherein each persistent storage (200D, 202D, 204D, 206D, 208D) of the plurality of persistent storages (200D, 202D, 204D, 206D, 208D) is local to and directly accessible only by a single engine instance (200B, 202B, 204B, 206B, 208B) of a plurality of engine instances (200B, 202B, 204B, 206B, 208B); wherein each engine instance (200B, 202B, 204B, 206B, 208B) of the plurality of engine instances (200B, 202B, 204B, 206B, 208B) includes logic for accessing rows stored in the table; wherein the plurality of persistent storages (200D, 202D, 204D, 206D, 208D) includes a first persistent storage and a second persistent storage; wherein the first persistent storage stores the primary duplica for a particular slice that includes data for a particular row of the table; wherein the second persistent storage stores a particular secondary duplica for the particular slice; receiving a request to perform a transaction that affects data in the particular row of the table; initiating execution of the transaction at a first engine instance that is local to the first persistent storage; in response to the first engine instance ceasing to function prior to committing the transaction: establishing the particular secondary duplica on the second persistent storage as a new primary duplica for the particular slice; and causing the transaction to be resumed and committed by a second engine instance that is local to the second persistent storage, wherein causing the transaction to be resumed by the second engine instance includes causing the second engine instance to perform only portions of the transaction that the first engine instance did not report as successfully executed. establishing the particular secondary duplica on the second persistent storage as a new primary duplica for the particular slice; and causing the transaction to be resumed and committed by a second engine instance that is local to the second persistent storage, wherein causing the transaction to be resumed by the second engine instance includes causing the second engine instance to perform only portions of the transaction that the first engine instance did not report as successfully executed.