--- /dev/null
+m.{153,155} Admiral, 3580s
+
+using only cols 2,3 (buy)
+
+changes in price,qty by island, commod, stall
+ 295 rows out of 4281
+changes in total qty by island, commod, price
+ 540 rows out of 2106
+
+stall "Couchablanca" adds lots of offers (100ish), lots else
+
+----------------------------------------
+
+m.{151,153} Admiral, 38s
+
+using only cols 2,3 (buy)
+
+changes in price,qty by island, commod, stall
+ 2 rows out of 4179
+
+two stocks changed at one stall
+
+
+m.{149,151} Admiral, 84s
+
+no changes
+
+----------------------------------------
+
+m.{020,145} Turtle, 271944s
+
+by stall
+ 391 / 1056 53 stall changes, 128 commod changes, if sorted
+by price
+ 334 / 797
+
+----------------------------------------
+
+m.{117,145} Turtle, 47797s
+
+by stall
+ 130 / 1023
+by price
+ 135 / 757
+
+
+========================================
+
+very few price changes, mostly qty changes
+
+
+====================
+
+files
+ ARCHIVE.%{ocean}.lock.par never removed
+ ARCHIVE.%{ocean}.ocean.par updated by rename
+ ARCHIVE.%{ocean}s.%{isle}s.main.par updated by rename
+ ARCHIVE.%{ocean}s.%{isle}s.log.par appended, length in main
+ ARCHIVE.%{ocean}s.%{isle}s.z%d.par create/write, length in main
+ ocean file is always updated first so lockfree readers should open
+ main, then ocean
+
+integers are in LE byte order
+vuint is one or more bytes with 7 bits each, BE first; top bit is "more bytes"
+
+format for an ocean file
+ magic Frame uint8*4 59a72671
+
+ for each commodity:
+ starting with commodity 0x0001 as zero is reserved for sentinels
+ commodity name uint16 name length
+ uint8*length name bytes
+
+format for a main file
+ magic Frame uint8*4 59a72672
+ number of z files Frame uint32
+ length of log file in bytes Frame uint32
+
+ single uncompressed diff
+ representing the change from nothing to
+ the most recent uploaded data
+
+format for a log or z file
+
+ magic Frame uint8*4 59a72673
+
+ series of diffs most recent last
+
+ for a log file, there may be some trailing garbage
+ not referred to in main file (see "length of log file")
+
+ for a z file, the file length is definitive and the last
+ entry is always valid if the file is referred to in the main
+ file, but any z file not mentioned in the main file is
+ garbage
+
+format for a diff
+ Each diff records a change "going backwards", ie you apply the
+ diff to a more recent state to get an earlier state; the metadata
+ corresponds to the earlier state; diffs at the physical end, ie
+ logical start, of the file, contain information without previous
+ context (ie start from empty, no offers)
+
+ diff format version Plain uint8 constant 0x01
+
+ timestamp delta
+ (amount by which this timestamp
+ is later than the previous upload in this file,
+ or later than 0 if there is no previous pload in this file)
+ Plain vuint time_t
+
+ for each payload stream, ie:
+ for Meta, Stall, Commod, Price, Qty:
+ in an uncompressed diff:
+ uncompressed data Plain some number of bytes
+ the uncompressed data is in the order shown below
+ in a compressed diff:
+ compressed length Plain vuint
+ compressed data Plain that number of bytes
+ the compressed data for each stream forms a continuous
+ compression stream within each file, starting with
+ the last diff in the file and then running backwards
+
+ diff length (reverse pointer) Frame uint32
+ includes length of exactly the
+ data sections marked "Plain"
+
+format inside the payload streams
+ uncompressed streams, literally in this order
+ compressed streams: read each substream in order, but ordering
+ between substreams with a diff is semantic but not physical
+
+ metadata excluding
+ ocean, island, timestamp Meta uint16 metadata length
+ Meta uint8*length metadata
+
+ for each stall
+
+ stall name Stall uint16 name length
+ Stall uint8*length name
+
+ for each commod which has changed price
+ including ones which have been added
+
+ commodid Commod uint16 commodity id
+
+ buy price delta Price uint16
+ sell price delta Price uint16
+ in case of added offers, previous price
+ is taken to be best price from previous upload
+ at this island, or 0 if previously no offers
+
+ sentinel commodid Commod uint16 constant 0x0000
+
+ for each commod which has changed qty
+ including ones which have been added or removed
+
+ commodid Commod uint16 commodity id
+ buy qty delta Qty uint16
+ sell qty delta Qty uint16
+
+ sentinel commodid Commod uint16 constant 0x0000
+
+ sentinel stall name Stall uint16 constant 0x0000