Commit Graph
16 Commits
Author SHA1 Message Date
Erica Fischer 4b8574aa87 A few more cases to populate the hash in addpool 2024-02-02 14:12:34 -08:00
Erica Fischer 5383bb2062 Eliminate repeated hashing of the same string 2024-02-02 13:40:08 -08:00
Erica Fischer 711a757895 Stick a hash search on the front of the tree search in addpool 2024-02-02 13:28:39 -08:00
Erica Fischer f2127fec97 Reduce thrashing during feature ingestion and tiling (#56)
* Remove the concept of "separate metadata"

This was an extra level of attribute indirection (features point
to metadata records which point to key and value strings) which was
intended to reduce the size of temporary storage for features with
large numbers of attributes that were also spread across large numbers
of tiles at maxzoom.

For other kinds of features, the extra indirection slowed things down
instead, and, especially when maxzoom guessing was being used, many more
features were having their metadata externalized than could actually
benefit from it.

* Shave a few bytes off temporary files by using more unsigned integers

* Flush stderr after logging progress

* Revert "Shave a few bytes off temporary files by using more unsigned integers"

This reverts commit eef29084ec.

* Limit the size of the string pools and trees to fit in memory

* Add missing #include

* Move the string pool and search tree from mmap to allocated memory

* Sort in allocated rather than mapped memory too

* Also use pread instead of mapping to read in the data to sort

* When the pool gets too big, switch to just the file, not memory

* Switch string pool from memory to disk when memory is 10% full

* Add to-memory versions of the serialization functions

* Crashy work in progress toward compression

* Fix the pointer bug that was causing the crash

* Serialize features into memory rather than straight to disk

* Compress individual features in the temporary files

* Don't need to store the length of the geometry

* Remove per-feature compression; move minzoom back into the object

* Start adding a stream compressor object

* Track file position within fwrite_check()

* Add compressed stream writer functions

* Pull the writing of the serialized feature out to the callers

* Starting toward compression again from a different point

* Hook up more compression functions

* Remove unused code from the other day

* Make enough deflate calls to flush out all the buffered data

* Start on decompression

* Tile number is uncompressed, tile content is compressed

* Work on alternating compressed and uncompressed in decompression

* Closer, but still doesn't work

* Sort of works

* Works until we get to concatenated tiles

* More attempts that don't work

* One bug down

* It made a tileset!

* Handle nonzero initial zooms

* Fix seeking within compressed feature streams

* Tests pass!

* Remove debug spew

* Oops: remember to delete the temporary files so they don't hang around

* Test that fails with the current compression code

* Properly account for bytes read while closing the compressed stream

* Limit the number of warnings about bad label points

* A little more armor when closing decompression

* This time for sure

* A different, less fragile, test that failed previously with compression

* Move feature stream compression to its own file

* Remove now-unused code to deserialize from a file

* Forgot to add the new files

* Remove a little debugging logging

* Add a couple of comments on what it means to be within decompression

* Fix indentation

* Update changelog. Remove stray debugging comment.
2023-02-14 12:47:40 -08:00
Erica Fischer af1a7ed7ae Once features can't possibly fit in a tile, stop trying (#9)
* Stop adding features to a tile if it can't possibly work

* Add --integer and --fraction options to tippecanoe-decode

* Carry the strategies field from tileset metadata through tile-join

* Update changelog

* Assign different codes to different kinds of error exits
2022-09-23 20:01:13 -04:00
Eric Fischer c77c2a2b1e Fix compiler complaints about arithmetic overflow in hashing 2017-09-07 12:04:32 -07:00
Eric Fischer 93920d06e1 Slightly lower average traversal using a hash for comparison 2017-09-06 17:10:10 -07:00
Eric Fischer 764a8ac17c Use 32-bit offsets in the string pool search tree to reduce its size 2017-09-06 15:26:19 -07:00
Eric Fischer 0f8b32c69f Limit the depth of the search in the string pool.
Use a better comparison function. (Attributes often have a common
prefix but rarely have a common suffix.)
2017-09-06 13:06:08 -07:00
Eric Fischer adc70341ad Use std::set to track the layer-wide feature attribute types.
Track them during parsing, not tiling.  Remove the old string pool code.
2016-04-28 14:59:58 -07:00
Eric Fischer 40a6b7b37a Another attempt to ensure that string hashing can't overflow 2016-04-28 11:52:16 -07:00
Eric Fischer 5490f3e15f Fix numeric overflow 2016-04-28 11:52:09 -07:00
Eric Fischer 3662f1a66b Split main program functions apart from GeoJSON parsing 2016-04-27 14:59:20 -07:00
Eric Fischer 65253cba50 Drag header files into C++ 2016-04-27 14:00:14 -07:00
Eric Fischer 7b0bb9a443 Drag the main function and GeoJSON parsing into C++ 2016-04-27 13:54:00 -07:00
Eric Fischer 3f3a341c0a Drag constant pool handling into C++ 2016-04-27 12:44:46 -07:00