···9494- [X] Optimize CommitBuffer to use unversioned shard map with pre-computed tlogs and tags
9595 - CommitBuffer reductions on bench_rw went from 85 million down to 25 million!
9696 - Txn/s went from about 24.8k to about 25.8k! (obviously CommitBuffer is not the bottleneck)
9797+- [X] Clear keys from MemKV using mutation log instead of full scan
9898+ - Txn/s went from 26k to 29k! Apparently storage flush was slowing things down.
97999810099101### Construct
···6677 alias Hobbes.Structs.RangeResult
8899+ @type t :: :ets.table
1010+911 @spec new :: :ets.table
1012 def new do
1113 :ets.new(:mem_kv, [:ordered_set, :private])
···236238237239 _ ->
238240 acc
241241+ end
242242+ end
243243+244244+ @spec remove_key_at_version(t, non_neg_integer, binary) :: :ok
245245+ def remove_key_at_version(table, version, key) do
246246+ :ets.delete(table, {key, version})
247247+ :ok
248248+ end
249249+250250+ @spec remove_range_at_version(t, non_neg_integer, binary, binary) :: :ok
251251+ def remove_range_at_version(table, version, start_key, end_key) do
252252+ :ets.delete(table, {start_key, version})
253253+ do_scan_remove(table, version, end_key, {start_key, :infinity})
254254+ :ok
255255+ end
256256+257257+ defp do_scan_remove(table, version, end_key, prev) do
258258+ case :ets.next(table, prev) do
259259+ {k, v} = full_key ->
260260+ case k < end_key do
261261+ true ->
262262+ cond do
263263+ v < version ->
264264+ # This is a new key, try to skip to version
265265+ # TODO: if we always flush in order is this unreachable?
266266+ do_scan_remove(table, version, end_key, {k, version - 1})
267267+ v == version ->
268268+ # This is the version, delete it
269269+ :ets.delete(table, full_key)
270270+ # Skip straight to the next key
271271+ do_scan_remove(table, version, end_key, {k, :infinity})
272272+ true ->
273273+ # v > version
274274+ # Skip straight to the next key
275275+ do_scan_remove(table, version, end_key, {k, :infinity})
276276+ end
277277+278278+ false -> :ok
279279+ end
280280+281281+ :"$end_of_table" -> :ok
239282 end
240283 end
241284