
Nice! Condensed:
- “shredding” is copying fields out of the json objects into their own columns so you can query them fast without parsing every json object
- the first thing they tried was “static shredding” where they do this for a hardcoded list of fields
- the new nice thing is “dynamic shredding” where they pick which fields to copy out based on observed usage patterns, at the time they build the parquet files.
score 1 · canonical
If you’re constructing a bloom filter but not querying it yet, I think you can split that across many threads without contended locks or atomics, by having each thread have its own private bitmap and setting bits in that. Then when all threads have finished inserting items, you bitwise OR together all the bitmaps.
Add another bitmap for events that are showing up during process start and bitwise OR that in at the end, too.
Alternatively if you happen to have two bitmaps and no opportune time to merge them, you could keep querying both and returning 1 where either bitmap has a 1.
score 1 · canonical