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 at least one copy of the slice on persistent storage (200D-208D, 700); wherein each copy of each slice contains rows of the table that belong to the slice; wherein the plurality of slices includes a particular slice that includes a particular set of rows of the table; receiving a request to read a particular row that belongs to the particular set of rows as of a particular snapshot time; responding to the request by: locating a tail of a particular chronological entry chain that corresponds to the particular row; wherein the particular chronological entry chain: is stored in a particular copy of the particular slice; and includes a plurality of entries for the particular row; wherein the plurality of entries are linked in chronological order based on times at which updates reflected in the respective entries were made to the row; based on times at which updates reflected in the entries were made to the particular row, determining which values from the plurality of entries belong to the particular snapshot time; and returning one or more values, obtained from the particular chronological entry chain, that belong to a snapshot defined by the particular snapshot time, wherein the particular snapshot time is any specified snapshot time which is not older than the oldest version of the particular row stored in the particular chronological entry chain. 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 at least one copy of the slice on persistent storage (200D-208D, 700); wherein each copy of each slice contains rows of the table that belong to the slice; wherein the plurality of slices includes a particular slice that includes a particular set of rows of the table; receiving a request to read a particular row that belongs to the particular set of rows as of a particular snapshot time; responding to the request by: locating a tail of a particular chronological entry chain that corresponds to the particular row; wherein the particular chronological entry chain: is stored in a particular copy of the particular slice; and includes a plurality of entries for the particular row; wherein the plurality of entries are linked in chronological order based on times at which updates reflected in the respective entries were made to the row; based on times at which updates reflected in the entries were made to the particular row, determining which values from the plurality of entries belong to the particular snapshot time; and returning one or more values, obtained from the particular chronological entry chain, that belong to a snapshot defined by the particular snapshot time, wherein the particular snapshot time is any specified snapshot time which is not older than the oldest version of the particular row stored in the particular chronological entry chain. locating a tail of a particular chronological entry chain that corresponds to the particular row; wherein the particular chronological entry chain: is stored in a particular copy of the particular slice; and includes a plurality of entries for the particular row; is stored in a particular copy of the particular slice; and includes a plurality of entries for the particular row; wherein the plurality of entries are linked in chronological order based on times at which updates reflected in the respective entries were made to the row; based on times at which updates reflected in the entries were made to the particular row, determining which values from the plurality of entries belong to the particular snapshot time; and returning one or more values, obtained from the particular chronological entry chain, that belong to a snapshot defined by the particular snapshot time, wherein the particular snapshot time is any specified snapshot time which is not older than the oldest version of the particular row stored in the particular chronological entry chain.