JSON
Nine fields over a thousand rows. Past eight rows a slice of all-scalar records is transposed into a table — one key per column rather than one per field per row — and each column then goes through the block codec, which stores id and updated as the step between rows instead of the value. 2.8x against the JSON, with the schema sent once.