A shared sheet over plain GenosDB. Rows and columns are identities whose position is a fractional key, and a cell is a node named after its row and its column: move a row and its cells go with it, insert a column and no data shifts, and two people editing different cells never collide. Open a second window: the coloured frame is the other peer's cell.
The grid you see is not written anywhere. A row nobody
inserted has no node at all — it is r3 at key 3
on every peer — so two people who type into A3 of an empty
sheet without seeing each other write the same cell and end with
one value, not six rows and two cells. A row you insert is a real node
with a random id and a key between its neighbours: two peers inserting at
the same place both survive, in one order everywhere; several such
inserts by two peers who cannot see each other may interleave, which a
sheet of records tolerates and a paragraph would not. Headers in blue are
the rows and columns that exist as nodes.
Enter commits and moves down, Tab
moves right, Esc reverts. Alt+↑↓ moves the row and
Alt+←→ the column with one put; sorting re-keys
every row and keeps its id. On the right, the keys themselves: every
row on a number line down the side and every column across the top, to
scale — a hollow dot is a name with no node behind it, a filled one has
a node. The gap beside the cell you stand on is where the next insert
mints, and the panel says how much room a float64 has left in it.
No write yet. A cell is a node named after its row and its column; a row or a column is a node with a key.