<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://articles.9j.nz/categories/</loc><lastmod>2026-10-21T09:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/categories/datafusion/</loc><lastmod>2026-10-21T09:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/datafusion/</loc><lastmod>2026-10-21T09:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/design/</loc><lastmod>2026-10-21T09:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/internals/</loc><lastmod>2026-10-21T09:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/</loc><lastmod>2026-10-21T09:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/optimizer/</loc><lastmod>2026-10-21T09:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/performance/</loc><lastmod>2026-10-21T09:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/</loc><lastmod>2026-10-21T09:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/the-contract-every-datafusion-operator-signs/</loc><lastmod>2026-10-21T09:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/a-tour-of-datafusions-physical-operators/</loc><lastmod>2026-10-21T09:17:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/execution/</loc><lastmod>2026-10-21T09:17:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/overview/</loc><lastmod>2026-10-21T09:17:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/configuration/</loc><lastmod>2026-10-21T09:09:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/the-datafusion-performance-cheat-sheet/</loc><lastmod>2026-10-21T09:09:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/tuning/</loc><lastmod>2026-10-21T09:09:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/parquet/</loc><lastmod>2026-10-21T09:01:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-writes-parquet-row-groups-without-re-reading/</loc><lastmod>2026-10-21T09:01:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/a-tour-of-polars-internals-the-twelve-ideas/</loc><lastmod>2026-10-21T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/architecture/</loc><lastmod>2026-10-21T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/categories/polars/</loc><lastmod>2026-10-21T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/polars/</loc><lastmod>2026-10-21T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/functions/</loc><lastmod>2026-10-21T08:53:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-uses-function-signatures-and-volatility-to-plan-better/</loc><lastmod>2026-10-21T08:53:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/memory/</loc><lastmod>2026-10-21T08:50:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-spills-to-disk-when-it-runs-out-of-memory/</loc><lastmod>2026-10-21T08:50:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/streaming/</loc><lastmod>2026-10-21T08:50:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-uses-cooperative-budgets-to-avoid-backpressure-deadlocks/</loc><lastmod>2026-10-21T08:45:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/joins/</loc><lastmod>2026-10-21T08:40:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-publishes-a-joins-build-side-as-a-runtime-filter/</loc><lastmod>2026-10-21T08:40:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/perfect-hash-join/</loc><lastmod>2026-10-21T08:37:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-turns-a-hash-join-into-a-plain-array-lookup/</loc><lastmod>2026-10-21T08:37:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/concurrency/</loc><lastmod>2026-10-21T08:30:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-runs-queries-on-rayons-global-thread-pool/</loc><lastmod>2026-10-21T08:30:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/dynamic-filters/</loc><lastmod>2026-10-21T08:29:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-turns-a-hash-join-build-side-into-a-probe-side-filter/</loc><lastmod>2026-10-21T08:29:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-turns-a-between-predicate-into-a-scalar-interval/</loc><lastmod>2026-10-21T08:21:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/planning/</loc><lastmod>2026-10-21T08:21:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/arrow/</loc><lastmod>2026-10-21T08:20:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-shares-data-with-python-over-the-arrow-c-data-interface/</loc><lastmod>2026-10-21T08:20:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/python/</loc><lastmod>2026-10-21T08:20:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-translates-sql-predicates-into-parquet-filters/</loc><lastmod>2026-10-21T08:13:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-releases-the-gil-before-it-does-any-real-work/</loc><lastmod>2026-10-21T08:10:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-tracks-semi-join-matches-in-a-bitset/</loc><lastmod>2026-10-21T08:05:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/simd/</loc><lastmod>2026-10-21T08:05:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/sort-merge-join/</loc><lastmod>2026-10-21T08:05:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/group-by/</loc><lastmod>2026-10-21T08:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-estimates-cardinality-with-hyperloglog/</loc><lastmod>2026-10-21T08:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-tracks-memory-with-raii-reservations/</loc><lastmod>2026-10-21T07:57:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-finds-the-top-k-with-a-bounded-heap/</loc><lastmod>2026-10-21T07:50:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-swaps-join-sides-and-filters-after-the-hash-lookup/</loc><lastmod>2026-10-21T07:49:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/file-scan/</loc><lastmod>2026-10-21T07:41:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/partitioning/</loc><lastmod>2026-10-21T07:41:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-splits-file-groups-by-their-statistics/</loc><lastmod>2026-10-21T07:41:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-sorts-floats-the-way-nobody-wants-them-sorted/</loc><lastmod>2026-10-21T07:40:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/sorting/</loc><lastmod>2026-10-21T07:40:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-splits-an-aggregate-into-a-mergeable-accumulator/</loc><lastmod>2026-10-21T07:33:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-parses-json-without-building-a-dom/</loc><lastmod>2026-10-21T07:30:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/strings/</loc><lastmod>2026-10-21T07:30:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-spills-a-shuffle-when-a-partition-does-not-fit/</loc><lastmod>2026-10-21T07:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-parses-csv-with-memchr-and-simdutf8/</loc><lastmod>2026-10-21T07:20:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-spills-a-hash-aggregation-to-disk/</loc><lastmod>2026-10-21T07:17:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-prunes-parquet-row-groups-with-page-index-stats/</loc><lastmod>2026-10-21T07:10:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-sorts-only-what-is-not-already-sorted/</loc><lastmod>2026-10-21T07:09:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-slices-one-batch-into-many-shuffle-partitions/</loc><lastmod>2026-10-21T07:01:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-does-interval-joins-with-a-sort-and-a-sweep/</loc><lastmod>2026-10-21T07:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/aggregation/</loc><lastmod>2026-10-21T06:53:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-skips-the-hash-table-when-the-input-is-already-sorted/</loc><lastmod>2026-10-21T06:53:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-joins-two-tables-with-a-piecewise-merge-join/</loc><lastmod>2026-10-21T06:50:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/distributed/</loc><lastmod>2026-10-21T06:45:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/proto/</loc><lastmod>2026-10-21T06:45:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-ships-a-physical-plan-to-another-machine/</loc><lastmod>2026-10-21T06:45:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-encodes-group-keys-as-rows-to-make-hashing-cheap/</loc><lastmod>2026-10-21T06:40:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-runs-async-udfs-per-batch-not-per-row/</loc><lastmod>2026-10-21T06:37:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/runtime/</loc><lastmod>2026-10-21T06:37:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-aggregates-faster-when-the-keys-are-sorted/</loc><lastmod>2026-10-21T06:30:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-rewrites-plan-trees-in-place-with-copy-on-write/</loc><lastmod>2026-10-21T06:29:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/rust/</loc><lastmod>2026-10-21T06:29:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-rewrites-count-distinct-into-two-passes/</loc><lastmod>2026-10-21T06:21:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-groups-columns-so-one-pass-feeds-many-aggregations/</loc><lastmod>2026-10-21T06:20:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-represents-nulls-as-bitmaps-and-skips-the-work/</loc><lastmod>2026-10-21T06:13:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-reorders-columns-to-avoid-running-out-of-memory/</loc><lastmod>2026-10-21T06:10:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-replaces-count-star-with-sum-one/</loc><lastmod>2026-10-21T06:05:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/lazy/</loc><lastmod>2026-10-21T06:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-evaluates-expressions-in-an-arena/</loc><lastmod>2026-10-21T06:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-replaces-a-projection-with-an-index-instead-of-materializing-it/</loc><lastmod>2026-10-21T05:57:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-writes-parquet-from-a-streaming-pipeline/</loc><lastmod>2026-10-21T05:50:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-reads-files-in-morsels-so-no-worker-idles/</loc><lastmod>2026-10-21T05:49:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/parallelism/</loc><lastmod>2026-10-21T05:49:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-range-partitions-a-shuffle-instead-of-hashing-it/</loc><lastmod>2026-10-21T05:41:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/shuffle/</loc><lastmod>2026-10-21T05:41:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-shuffles-hash-partitions-between-streaming-stages/</loc><lastmod>2026-10-21T05:40:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-pushes-filters-through-joins-without-breaking-null-semantics/</loc><lastmod>2026-10-21T05:33:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-splits-a-streaming-query-into-morsels/</loc><lastmod>2026-10-21T05:30:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-pushes-a-limit-into-the-scan/</loc><lastmod>2026-10-21T05:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/limit/</loc><lastmod>2026-10-21T05:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-eliminates-common-subexpressions-by-fingerprint/</loc><lastmod>2026-10-21T05:20:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-prunes-partitions-without-touching-the-data/</loc><lastmod>2026-10-21T05:17:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-simplifies-the-expression-tree-before-running/</loc><lastmod>2026-10-21T05:10:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-prunes-parquet-row-groups-with-zone-maps/</loc><lastmod>2026-10-21T05:09:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-prunes-parquet-row-groups-mid-scan/</loc><lastmod>2026-10-21T05:01:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-pushes-predicates-into-the-parquet-scanner/</loc><lastmod>2026-10-21T05:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-prunes-join-probes-with-a-key-range-bitmap/</loc><lastmod>2026-10-21T04:53:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-compares-strings-without-allocating/</loc><lastmod>2026-10-21T04:50:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-proves-your-data-is-already-sorted/</loc><lastmod>2026-10-21T04:45:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/caching/</loc><lastmod>2026-10-21T04:40:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/categorical/</loc><lastmod>2026-10-21T04:40:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-encodes-categories-with-a-global-string-cache/</loc><lastmod>2026-10-21T04:40:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-proves-a-predicate-can-only-match-certain-values/</loc><lastmod>2026-10-21T04:37:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/intervals/</loc><lastmod>2026-10-21T04:37:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/pruning/</loc><lastmod>2026-10-21T04:37:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-chunks-columns-to-create-parallel-work/</loc><lastmod>2026-10-21T04:30:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-prepares-a-hash-join-build-for-reuse/</loc><lastmod>2026-10-21T04:29:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-picks-a-join-algorithm-from-estimated-cardinalities/</loc><lastmod>2026-10-21T04:21:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-shares-columns-with-arc-instead-of-copying/</loc><lastmod>2026-10-21T04:20:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/abi/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/aes/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/algorithms/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/allocator/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/assembly/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/atomics/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/automata/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/benchmarking/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/bounds-checks/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/build/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/cgo/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/channels/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/compatibility/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/compiler/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/containers/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/context/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/crypto/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/defer/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/devirtualization/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/dns/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/encoding/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-enters-the-system-call/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/epoll/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/errors/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-decides-what-escapes-to-the-heap/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/escape-analysis/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/ffi/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/finalizers/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/garbage-collection/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/garbage-collector/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/generics/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/categories/go/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/go/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-channels-work-under-the-hood/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-grows-goroutine-stacks/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-passes-arguments-in-registers/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-preempts-goroutines/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-devirtualizes-interface-calls/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-atomics-implement-the-memory-model/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-caches-builds/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-implements-defer-and-panic/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-encodes-errors/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-traces-goroutines/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-gets-simd-without-writing-assembly/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-implements-generics/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-greentea-gc-marks-spans/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-http-transport-pools-connections/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-gc-write-barriers-protect-concurrent-mutation/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-inlines-functions/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-implements-interfaces/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-linker-prunes-dead-code/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-implements-maps-with-swiss-tables/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-allocates-memory-with-size-classes/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-netpoll-handles-blocking-io/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-uses-arenas/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-frees-memory-with-the-page-allocator/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-resolves-dns-in-pure-go/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-regexp-picks-an-engine/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-scheduler-steals-work-between-cores/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-slices-share-backing-arrays/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-sweeps-freed-spans/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-mutexes-and-rwmutexes-work/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-implements-time-timers/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/godebug/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-lets-you-tune-the-runtime/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-grows-heap-with-memory-limits/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/green-tea/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/hash-table/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/hashing/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-cgo-works/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-registers-allocate-ssa/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-copies-strings-efficiently/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-removes-bounds-checks/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-searches-strings-with-simd/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-handles-signals-and-context-cancellation/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-hashes-strings-and-keys-fast/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-sorts-slices-with-pdqsort/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-benchmarks-work/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-profiles-cpu-with-signals/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-cryptography-uses-hardware-instructions/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-paces-its-garbage-collector/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-copies-files-without-copying/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-parses-json-fast/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-race-detector-works/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-reflects-at-runtime/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-select-picks-a-random-ready-case/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-generates-unicode-tables/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/idiomatic-go/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/inlining/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/interfaces/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/io/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/iterators/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/json/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/linker/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/linkname/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/maps/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/memory-model/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/mutex/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/net/http/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/networking/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/pacing/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/panic/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/pgo/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/preemption/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/profiling/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/race-detector/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-implements-range-over-func/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/reflection/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/regexp/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/register-allocation/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/resolvers/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-cleans-up-objects-with-addcleanup/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/scheduler/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/scheduling/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/security/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/select/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/signals/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/slices/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/ssa/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/stacks/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/stdlib/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/sweeper/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/sync/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-sync-map-works/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-sync-pool-uses-per-p-caches/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/syscalls/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/testing/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/threadsanitizer/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/timers/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/toolchain/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/tracing/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/unicode/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-deduplicates-strings-with-weak-pointers/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/unsafe/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-implements-unsafe-and-linkname/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/utf-8/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/virtual-memory/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-implements-weak-pointers/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/weak-pointers/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-go-randomizes-map-iteration/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/write-barrier/</loc><lastmod>2026-10-21T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-passes-runtime-facts-between-operators/</loc><lastmod>2026-10-21T04:13:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-stores-short-strings-inline-in-16-bytes/</loc><lastmod>2026-10-21T04:10:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-packs-columns-into-one-row-format-for-hashing/</loc><lastmod>2026-10-21T04:05:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-polars-buffers-are-immutable-and-refcounted/</loc><lastmod>2026-10-21T04:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-model-checks-its-join-concurrency/</loc><lastmod>2026-10-21T03:57:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/memory-ordering/</loc><lastmod>2026-10-21T03:57:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-merges-tiny-batches-so-vectorization-can-work/</loc><lastmod>2026-10-21T03:49:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-merges-more-sorted-runs-than-it-can-hold/</loc><lastmod>2026-10-21T03:41:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/spilling/</loc><lastmod>2026-10-21T03:41:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-measures-where-a-query-spent-its-time/</loc><lastmod>2026-10-21T03:33:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-lists-object-store-directories-in-parallel/</loc><lastmod>2026-10-21T03:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-keeps-its-hash-join-build-side-in-order/</loc><lastmod>2026-10-21T03:17:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-keeps-cpu-bound-work-off-the-async-runtime/</loc><lastmod>2026-10-21T03:09:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-joins-from-both-sides-with-a-symmetric-hash-join/</loc><lastmod>2026-10-21T03:01:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-implements-not-in-three-valued-logic-in-a-join/</loc><lastmod>2026-10-21T02:53:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/not-in/</loc><lastmod>2026-10-21T02:53:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/nulls/</loc><lastmod>2026-10-21T02:53:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/asof-join/</loc><lastmod>2026-10-21T02:45:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-implements-an-asof-join-as-a-merge-scan/</loc><lastmod>2026-10-21T02:45:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-groups-dictionary-encoded-columns-by-index/</loc><lastmod>2026-10-21T02:37:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-folds-constants-at-plan-time/</loc><lastmod>2026-10-21T02:29:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-folds-a-projection-into-the-join/</loc><lastmod>2026-10-21T02:21:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/projection/</loc><lastmod>2026-10-21T02:21:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-evaluates-window-frames-over-preserved-sort-order/</loc><lastmod>2026-10-21T02:13:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-evaluates-in-lists-without-a-hash-table/</loc><lastmod>2026-10-21T02:05:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-evaluates-arguments-once-per-batch-not-per-row/</loc><lastmod>2026-10-21T01:57:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-does-topk-per-partition-without-sorting/</loc><lastmod>2026-10-21T01:49:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/topk/</loc><lastmod>2026-10-21T01:49:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/window-functions/</loc><lastmod>2026-10-21T01:49:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-does-late-materialization-for-parquet-filters/</loc><lastmod>2026-10-21T01:41:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-detects-that-the-optimizer-reached-a-fixed-point/</loc><lastmod>2026-10-21T01:33:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-decorrelates-a-correlated-subquery-into-a-join/</loc><lastmod>2026-10-21T01:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/subqueries/</loc><lastmod>2026-10-21T01:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-declares-that-an-operator-needs-partitioned-input/</loc><lastmod>2026-10-21T01:17:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-decides-between-sorting-in-place-and-merging/</loc><lastmod>2026-10-21T01:09:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/constant-folding/</loc><lastmod>2026-10-21T01:01:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-constant-folds-expressions-against-a-dummy-batch/</loc><lastmod>2026-10-21T01:01:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-computes-topk-with-a-bounded-heap-instead-of-a-sort/</loc><lastmod>2026-10-21T00:53:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-computes-hyperloglog-over-hashed-values/</loc><lastmod>2026-10-21T00:45:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-computes-approximate-quantiles-with-a-mergeable-t-digest/</loc><lastmod>2026-10-21T00:37:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-compiles-expressions-into-direct-arrow-kernel-calls/</loc><lastmod>2026-10-21T00:29:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/correctness/</loc><lastmod>2026-10-21T00:21:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-checks-that-its-own-optimizer-did-not-break-the-plan/</loc><lastmod>2026-10-21T00:21:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-builds-a-partitioned-hash-table-for-joins/</loc><lastmod>2026-10-21T00:13:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-datafusion-accumulates-multi-column-group-keys-columnarly/</loc><lastmod>2026-10-21T00:05:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/categories/clickhouse/</loc><lastmod>2026-10-20T20:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/clickhouse/</loc><lastmod>2026-10-20T20:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-charges-memory-through-a-hierarchy-of-trackers/</loc><lastmod>2026-10-20T20:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/memory-tracking/</loc><lastmod>2026-10-20T20:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-turns-an-out-of-memory-into-an-exception/</loc><lastmod>2026-10-20T18:57:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/oom/</loc><lastmod>2026-10-20T18:57:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-intercepts-every-allocation-to-charge-it/</loc><lastmod>2026-10-20T17:54:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/jemalloc/</loc><lastmod>2026-10-20T17:54:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-batches-memory-accounting-per-thread/</loc><lastmod>2026-10-20T16:51:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/ast/</loc><lastmod>2026-10-20T15:48:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-shares-one-ast-between-threads/</loc><lastmod>2026-10-20T15:48:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/parser/</loc><lastmod>2026-10-20T15:48:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-tokenizes-sql-with-a-hand-written-lexer/</loc><lastmod>2026-10-20T14:45:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/lexer/</loc><lastmod>2026-10-20T14:45:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-parses-sql-with-a-backtracking-parser/</loc><lastmod>2026-10-20T13:42:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-resolves-identifiers-while-it-parses/</loc><lastmod>2026-10-20T12:39:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/query-parameters/</loc><lastmod>2026-10-20T12:39:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-keeps-aggregate-state-in-an-arena/</loc><lastmod>2026-10-20T11:36:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-composes-aggregate-functions-with-suffix-combinators/</loc><lastmod>2026-10-20T10:33:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-approximates-topk-with-space-saving/</loc><lastmod>2026-10-20T09:30:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/</loc><lastmod>2026-10-20T09:02:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/async/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/bool/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/buffer-protocol/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/bytearray/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/bytes/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/capsule/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/cell/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/code/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/collections/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/complex/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/coroutine/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/cpython/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-async-generator-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-bool-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-method-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-bytearray-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-bytes-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-cell-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-code-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-complex-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-coroutine-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-descriptor-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-dict-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-ellipsis-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-enumerate-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-exceptions-are-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-float-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-frame-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-function-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-generator-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-int-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-iterator-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-lazyimport-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-list-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-memoryview-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-module-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-nonetype-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-notimplemented-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-object-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-odict-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-picklebuf-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-capsule-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-range-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-sentinel-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-set-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-namespace-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-slice-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-str-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-structseq-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-super-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-template-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-tuple-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-type-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-genericalias-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-typevar-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-union-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-weakref-is-implemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/descriptor/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/dict/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/ellipsis/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/enumerate/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/exceptions/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/float/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/frame/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/frames/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/function/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/generator/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/generators/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/genericalias/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/import/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/int/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/categories/internals/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/iterator/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/lazy-import/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/list/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/memoryview/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/metaclass/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/method/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/module/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/mro/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/namespace/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/none/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/nonetype/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/notimplemented/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/object/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/ordereddict/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/pickle/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/postgres/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-stores-a-row/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/property/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/categories/python/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/range/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/reversed/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/sentinel/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/set/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/slice/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/storage/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/str/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/structseq/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/super/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/template/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/tuple/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/type/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/typevar/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/typing/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/union/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/weakref/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/zip/</loc><lastmod>2026-10-20T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-sums-floats-with-kahan-compensation/</loc><lastmod>2026-10-20T08:27:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/numerics/</loc><lastmod>2026-10-20T08:27:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-keeps-a-column-compressed-until-something-reads-it/</loc><lastmod>2026-10-20T07:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/compression/</loc><lastmod>2026-10-20T07:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-stores-vectors-as-bit-planes/</loc><lastmod>2026-10-20T06:22:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/vector-search/</loc><lastmod>2026-10-20T06:22:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-replicates-a-column-with-an-index-instead-of-copying-it/</loc><lastmod>2026-10-20T05:19:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/join/</loc><lastmod>2026-10-20T05:19:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-hashes-map-keys-into-buckets/</loc><lastmod>2026-10-20T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/map/</loc><lastmod>2026-10-20T04:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/arithmetic/</loc><lastmod>2026-10-20T03:13:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-does-decimal-arithmetic/</loc><lastmod>2026-10-20T03:13:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/decimal/</loc><lastmod>2026-10-20T03:13:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/types/</loc><lastmod>2026-10-20T03:13:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-rebuilds-a-vector-from-bit-planes/</loc><lastmod>2026-10-20T02:10:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-puts-the-time-zone-in-the-type-not-the-value/</loc><lastmod>2026-10-20T01:07:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/datetime/</loc><lastmod>2026-10-20T01:07:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/timezone/</loc><lastmod>2026-10-20T01:07:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-stores-a-parts-metadata-in-plain-text-files/</loc><lastmod>2026-10-20T00:04:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/mergetree/</loc><lastmod>2026-10-20T00:04:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-names-a-part-after-its-partition-and-block-range/</loc><lastmod>2026-10-19T23:01:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-system-tables-are-storages-with-a-source/</loc><lastmod>2026-10-19T21:58:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/query-planning/</loc><lastmod>2026-10-19T21:58:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/system-tables/</loc><lastmod>2026-10-19T21:58:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-fuzzer-drifts-its-query-grammar/</loc><lastmod>2026-10-19T20:55:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/fuzzing/</loc><lastmod>2026-10-19T20:55:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/cli/</loc><lastmod>2026-10-19T19:53:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-client-splits-a-script-into-queries/</loc><lastmod>2026-10-19T19:53:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/parsing/</loc><lastmod>2026-10-19T19:53:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-flushes-the-query-log-into-a-real-mergetree/</loc><lastmod>2026-10-19T18:50:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/observability/</loc><lastmod>2026-10-19T18:50:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-client-cancels-a-query-without-losing-sync/</loc><lastmod>2026-10-19T17:47:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/protocol/</loc><lastmod>2026-10-19T17:47:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-splits-json-into-typed-paths-and-shared-data/</loc><lastmod>2026-10-19T16:44:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-fuzzes-itself-with-query-oracles/</loc><lastmod>2026-10-19T15:41:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-chooses-what-goes-into-prewhere/</loc><lastmod>2026-10-19T14:38:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/prewhere/</loc><lastmod>2026-10-19T14:38:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-reorders-joins-with-a-query-graph/</loc><lastmod>2026-10-19T13:35:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/cardinality/</loc><lastmod>2026-10-19T12:32:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-estimates-join-cardinality-from-ndv/</loc><lastmod>2026-10-19T12:32:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/statistics/</loc><lastmod>2026-10-19T12:32:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-searches-join-orders-with-dynamic-programming/</loc><lastmod>2026-10-19T11:29:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/dynamic-programming/</loc><lastmod>2026-10-19T11:29:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/bit-tricks/</loc><lastmod>2026-10-19T10:26:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-packs-a-hyperloglog-rank-into-five-bits/</loc><lastmod>2026-10-19T10:26:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-recycles-small-objects-through-size-class-free-lists/</loc><lastmod>2026-10-19T09:23:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/data-structures/</loc><lastmod>2026-10-19T09:23:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-lru-cache-keeps-its-order-in-a-linked-list/</loc><lastmod>2026-10-19T08:20:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-slru-cache-protects-hot-entries-from-a-scan/</loc><lastmod>2026-10-19T07:18:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-short-circuits-and-or-with-a-mask/</loc><lastmod>2026-10-19T06:15:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/short-circuit/</loc><lastmod>2026-10-19T06:15:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-rewrites-the-query-before-it-plans-it/</loc><lastmod>2026-10-19T05:12:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/optimization/</loc><lastmod>2026-10-19T05:12:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/query-plan/</loc><lastmod>2026-10-19T05:12:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-builds-an-actions-dag-once-and-runs-it-per-block/</loc><lastmod>2026-10-19T04:09:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-pushes-order-by-into-the-storage-read/</loc><lastmod>2026-10-19T03:06:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-logs-store-rows-in-append-only-files-with-a-marks-index/</loc><lastmod>2026-10-19T02:03:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/log/</loc><lastmod>2026-10-19T02:03:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/storage-engines/</loc><lastmod>2026-10-19T02:03:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-kafka-commits-offsets-after-the-block-is-written/</loc><lastmod>2026-10-19T01:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/kafka/</loc><lastmod>2026-10-19T01:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/buffer/</loc><lastmod>2026-10-18T23:57:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-buffers-writes-in-ram-and-flushes-in-the-background/</loc><lastmod>2026-10-18T23:57:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-keeper-carries-a-tree-digest-in-every-raft-log-entry/</loc><lastmod>2026-10-18T22:54:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/keeper/</loc><lastmod>2026-10-18T22:54:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/raft/</loc><lastmod>2026-10-18T22:54:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/zookeeper/</loc><lastmod>2026-10-18T22:54:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-runs-distributed-ddl-through-a-zookeeper-queue/</loc><lastmod>2026-10-18T21:51:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/ddl/</loc><lastmod>2026-10-18T21:51:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/batching/</loc><lastmod>2026-10-18T20:48:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-batches-async-inserts-in-a-per-key-queue/</loc><lastmod>2026-10-18T20:48:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/insert/</loc><lastmod>2026-10-18T20:48:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-picks-a-projection-to-read/</loc><lastmod>2026-10-18T19:46:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/projections/</loc><lastmod>2026-10-18T19:46:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-recompresses-a-part-when-its-ttl-expires/</loc><lastmod>2026-10-18T18:43:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/ttl/</loc><lastmod>2026-10-18T18:43:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-deletes-expired-ttl-rows-only-when-parts-merge/</loc><lastmod>2026-10-18T17:40:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-injects-row-level-security-as-a-filter/</loc><lastmod>2026-10-18T16:37:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/query-planner/</loc><lastmod>2026-10-18T16:37:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/row-policies/</loc><lastmod>2026-10-18T16:37:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-splits-a-session-context-from-a-query-context/</loc><lastmod>2026-10-18T15:34:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/settings/</loc><lastmod>2026-10-18T15:34:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-maps-an-insert-onto-the-tables-schema/</loc><lastmod>2026-10-18T14:31:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/pipeline/</loc><lastmod>2026-10-18T14:31:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/schema/</loc><lastmod>2026-10-18T14:31:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-generates-an-unbounded-number-stream/</loc><lastmod>2026-10-18T13:28:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/table-functions/</loc><lastmod>2026-10-18T13:28:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/aggregatingmergetree/</loc><lastmod>2026-10-18T12:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/summingmergetree/</loc><lastmod>2026-10-18T12:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-mergetree-summing-and-aggregating-engines-collapse-rows/</loc><lastmod>2026-10-18T12:25:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/backups/</loc><lastmod>2026-10-18T11:22:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-incremental-backups-store-only-a-files-tail/</loc><lastmod>2026-10-18T11:22:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/incremental/</loc><lastmod>2026-10-18T11:22:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-coordinates-a-cluster-wide-backup-with-zookeeper/</loc><lastmod>2026-10-18T10:19:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-compiles-a-date-format-string-into-a-program/</loc><lastmod>2026-10-18T09:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/dates/</loc><lastmod>2026-10-18T09:16:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-runs-regular-expressions-four-different-ways/</loc><lastmod>2026-10-18T08:13:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/jit/</loc><lastmod>2026-10-18T08:13:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-parses-urls-with-a-hand-written-state-machine/</loc><lastmod>2026-10-18T07:11:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-resolves-a-scalar-function-call/</loc><lastmod>2026-10-18T06:08:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/sql/</loc><lastmod>2026-10-18T06:08:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-deduplicates-retried-inserts-with-a-content-hash/</loc><lastmod>2026-10-18T05:05:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/deduplication/</loc><lastmod>2026-10-18T05:05:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/replication/</loc><lastmod>2026-10-18T05:05:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/final/</loc><lastmod>2026-10-18T04:02:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/replacingmergetree/</loc><lastmod>2026-10-18T04:02:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-replacingmergetree-collapses-duplicates/</loc><lastmod>2026-10-18T04:02:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/bloom-filter/</loc><lastmod>2026-10-18T02:59:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-bloom-filter-skip-index-prunes-granules/</loc><lastmod>2026-10-18T02:59:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/indexes/</loc><lastmod>2026-10-18T02:59:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-deletes-rows-with-a-row-exists-mask/</loc><lastmod>2026-10-18T01:56:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/deletes/</loc><lastmod>2026-10-18T01:56:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/mutations/</loc><lastmod>2026-10-18T01:56:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-computes-window-frames-incrementally/</loc><lastmod>2026-10-18T00:53:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-merge-join-walks-two-sorted-streams/</loc><lastmod>2026-10-17T23:50:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/merge-join/</loc><lastmod>2026-10-17T23:50:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-hash-join-stores-the-right-table-as-64-bit-row-words/</loc><lastmod>2026-10-17T22:47:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/hash-tables/</loc><lastmod>2026-10-17T22:47:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-caches-remote-objects-as-local-file-segments/</loc><lastmod>2026-10-17T21:44:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/object-storage/</loc><lastmod>2026-10-17T21:44:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-encrypts-files-at-rest-with-a-64-byte-header/</loc><lastmod>2026-10-17T20:41:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/disks/</loc><lastmod>2026-10-17T20:41:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/encryption/</loc><lastmod>2026-10-17T20:41:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-makes-a-mergetree-part-visible-with-one-rename/</loc><lastmod>2026-10-17T19:39:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/durability/</loc><lastmod>2026-10-17T19:39:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-thread-pool-wakes-threads-and-counts-events/</loc><lastmod>2026-10-17T18:36:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/thread-pool/</loc><lastmod>2026-10-17T18:36:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-throttles-io-with-a-token-bucket/</loc><lastmod>2026-10-17T17:33:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/throttling/</loc><lastmod>2026-10-17T17:33:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-spreads-parts-across-disks-with-a-storage-policy/</loc><lastmod>2026-10-17T16:30:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-limits-query-concurrency-with-cpu-slots/</loc><lastmod>2026-10-17T15:27:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-runs-union-distinct-and-intersect-except/</loc><lastmod>2026-10-17T14:24:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/distinct/</loc><lastmod>2026-10-17T14:24:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/set-operations/</loc><lastmod>2026-10-17T14:24:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-rewrites-a-distributed-query-for-every-shard/</loc><lastmod>2026-10-17T13:21:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-replicates-mergetree-with-a-log-and-hash-dedup/</loc><lastmod>2026-10-17T12:18:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-native-protocol-interleaves-results-and-cancellation/</loc><lastmod>2026-10-17T11:15:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-parses-csv-in-parallel/</loc><lastmod>2026-10-17T10:12:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/csv/</loc><lastmod>2026-10-17T10:12:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-writes-the-native-format-column-at-a-time/</loc><lastmod>2026-10-17T09:09:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/formats/</loc><lastmod>2026-10-17T09:09:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/serialization/</loc><lastmod>2026-10-17T09:09:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-buffers-io-with-a-pos-end-invariant/</loc><lastmod>2026-10-17T08:06:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-compresses-columns-with-codec-pipelines/</loc><lastmod>2026-10-17T07:04:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/codecs/</loc><lastmod>2026-10-17T07:04:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-stores-dictionaries-in-sharded-hash-tables/</loc><lastmod>2026-10-17T06:01:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/dictionaries/</loc><lastmod>2026-10-17T06:01:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-batches-distributed-inserts-into-files/</loc><lastmod>2026-10-17T04:58:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/reliability/</loc><lastmod>2026-10-17T04:58:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-caches-query-condition-granule-verdicts/</loc><lastmod>2026-10-17T03:55:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/merge-tree/</loc><lastmod>2026-10-17T03:55:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/storage-engine/</loc><lastmod>2026-10-17T03:55:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-lowcardinality-saves-memory-with-one-dictionary/</loc><lastmod>2026-10-17T02:52:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-skips-granules-with-marks-and-bit-packed-indexes/</loc><lastmod>2026-10-17T01:49:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-evaluates-in-with-hash-sets/</loc><lastmod>2026-10-17T00:46:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-sorts-in-parallel-and-merges-sorted-streams/</loc><lastmod>2026-10-16T23:43:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/background-jobs/</loc><lastmod>2026-10-16T22:40:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-chooses-which-parts-to-merge/</loc><lastmod>2026-10-16T22:40:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-stores-a-column-in-a-padded-pod-array/</loc><lastmod>2026-10-16T21:37:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-sparse-column-stores-only-non-default-rows/</loc><lastmod>2026-10-16T20:34:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-variant-column-uses-a-discriminator-byte/</loc><lastmod>2026-10-16T19:32:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-splits-group-by-into-256-buckets-for-parallel-merges/</loc><lastmod>2026-10-16T18:29:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-runs-a-query-pipeline-with-ports-and-status/</loc><lastmod>2026-10-16T17:26:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/query-execution/</loc><lastmod>2026-10-16T17:26:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-plans-distributed-queries-with-cascades/</loc><lastmod>2026-10-16T16:23:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-parallelizes-a-query-pipeline-across-threads/</loc><lastmod>2026-10-16T15:20:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-packs-short-strings-into-hash-table-keys/</loc><lastmod>2026-10-16T14:17:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-optimizes-aggregation-in-order/</loc><lastmod>2026-10-16T13:14:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-merges-columns-one-at-a-time-vertical-merge/</loc><lastmod>2026-10-16T12:11:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-marks-empty-hash-table-cells-with-zeroed-memory/</loc><lastmod>2026-10-16T11:08:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-estimates-distinct-counts-by-thinning-a-hash-table/</loc><lastmod>2026-10-16T10:05:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/probabilistic/</loc><lastmod>2026-10-16T10:05:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-caches-query-results-in-memory-and-on-disk/</loc><lastmod>2026-10-16T09:02:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-garbage-collector-works/</loc><lastmod>2026-10-16T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-clickhouse-jit-compiles-expressions-with-llvm/</loc><lastmod>2026-10-16T08:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/llvm/</loc><lastmod>2026-10-16T08:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/python-3.15/</loc><lastmod>2026-10-15T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/whats-new-in-python-3-15/</loc><lastmod>2026-10-15T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-time-and-timetz-in-c/</loc><lastmod>2026-10-12T10:21:30+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/time/</loc><lastmod>2026-10-12T10:21:30+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/timetz/</loc><lastmod>2026-10-12T10:21:30+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/input/</loc><lastmod>2026-10-11T10:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/categories/tmux/</loc><lastmod>2026-10-11T10:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/tmux/</loc><lastmod>2026-10-11T10:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-tmux-parses-escape-sequences-fast/</loc><lastmod>2026-10-11T10:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/executor/</loc><lastmod>2026-10-11T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-speeds-up-hash-joins/</loc><lastmod>2026-10-11T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/numeric/</loc><lastmod>2026-10-08T10:09:37+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-numeric-in-c/</loc><lastmod>2026-10-08T10:09:37+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/layout/</loc><lastmod>2026-10-06T11:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-tmux-splits-the-terminal-into-panes/</loc><lastmod>2026-10-06T11:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-waits-for-locks/</loc><lastmod>2026-10-06T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-timestamp-and-timestamptz-in-c/</loc><lastmod>2026-10-06T06:17:33+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/timestamp/</loc><lastmod>2026-10-06T06:17:33+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/timestamptz/</loc><lastmod>2026-10-06T06:17:33+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-bool-in-c/</loc><lastmod>2026-10-04T04:06:31+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-locks-buffers-without-lwlocks/</loc><lastmod>2026-10-02T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/sanitisation/</loc><lastmod>2026-10-02T08:30:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-tmux-sanitises-window-names-against-injection/</loc><lastmod>2026-10-02T08:30:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/oid/</loc><lastmod>2026-10-01T08:19:40+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/oid8/</loc><lastmod>2026-10-01T08:19:40+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-oid-in-c/</loc><lastmod>2026-10-01T08:19:40+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/terminal/</loc><lastmod>2026-09-28T15:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/why-tmux-needs-its-own-terminal-emulator/</loc><lastmod>2026-09-28T15:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/float4/</loc><lastmod>2026-09-22T06:53:25+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/float8/</loc><lastmod>2026-09-22T06:53:25+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-float4-and-float8-in-c/</loc><lastmod>2026-09-22T06:53:25+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/control-mode/</loc><lastmod>2026-09-19T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-allocates-memory-fast/</loc><lastmod>2026-09-19T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-tmux-control-mode-is-an-unauthenticated-command-channel/</loc><lastmod>2026-09-19T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/pty/</loc><lastmod>2026-09-12T16:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-tmux-runs-real-ptys-for-every-pane/</loc><lastmod>2026-09-12T16:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-groups-commits/</loc><lastmod>2026-09-12T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/wal/</loc><lastmod>2026-09-12T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/bit/</loc><lastmod>2026-09-08T08:34:05+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-bit-and-varbit-in-c/</loc><lastmod>2026-09-08T08:34:05+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/varbit/</loc><lastmod>2026-09-08T08:34:05+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/interval/</loc><lastmod>2026-09-07T01:55:11+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-interval-in-c/</loc><lastmod>2026-09-07T01:55:11+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/bytea/</loc><lastmod>2026-09-05T17:41:12+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-bytea-in-c/</loc><lastmod>2026-09-05T17:41:12+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-tmux-batches-terminal-output/</loc><lastmod>2026-09-05T13:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/tty/</loc><lastmod>2026-09-05T13:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-computes-page-checksums-fast/</loc><lastmod>2026-09-05T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/int2/</loc><lastmod>2026-09-03T15:13:13+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/int4/</loc><lastmod>2026-09-03T15:13:13+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/int8/</loc><lastmod>2026-09-03T15:13:13+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-integer-types-in-c/</loc><lastmod>2026-09-03T15:13:13+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/btree/</loc><lastmod>2026-09-01T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/index/</loc><lastmod>2026-09-01T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-deduplicates-btree-entries/</loc><lastmod>2026-09-01T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/multirange/</loc><lastmod>2026-08-31T11:06:16+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-multirange-types-in-c/</loc><lastmod>2026-08-31T11:06:16+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-tmux-works-around-terminal-bugs/</loc><lastmod>2026-08-30T12:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/workarounds/</loc><lastmod>2026-08-30T12:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-does-async-io-with-io-uring/</loc><lastmod>2026-08-27T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/redraw/</loc><lastmod>2026-08-21T14:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-tmux-redraws-only-what-changed/</loc><lastmod>2026-08-21T14:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/macaddr/</loc><lastmod>2026-08-21T07:34:39+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/macaddr8/</loc><lastmod>2026-08-21T07:34:39+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-macaddr-and-macaddr8-in-c/</loc><lastmod>2026-08-21T07:34:39+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/char/</loc><lastmod>2026-08-20T11:01:41+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/name/</loc><lastmod>2026-08-20T11:01:41+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-char-and-name-in-c/</loc><lastmod>2026-08-20T11:01:41+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-hashes-lookups/</loc><lastmod>2026-08-19T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/ipc/</loc><lastmod>2026-08-14T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-uses-simd-for-fast-string-scanning/</loc><lastmod>2026-08-14T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/why-tmux-is-a-server-and-not-a-terminal-program/</loc><lastmod>2026-08-14T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/daterange/</loc><lastmod>2026-08-13T21:37:21+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/int4range/</loc><lastmod>2026-08-13T21:37:21+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-range-types-in-c/</loc><lastmod>2026-08-13T21:37:21+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/bpchar/</loc><lastmod>2026-08-10T15:27:20+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-text-varchar-and-bpchar-in-c/</loc><lastmod>2026-08-10T15:27:20+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/text/</loc><lastmod>2026-08-10T15:27:20+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/varchar/</loc><lastmod>2026-08-10T15:27:20+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/geometric/</loc><lastmod>2026-08-09T18:27:02+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/point/</loc><lastmod>2026-08-09T18:27:02+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/polygon/</loc><lastmod>2026-08-09T18:27:02+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-geometric-types-in-c/</loc><lastmod>2026-08-09T18:27:02+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-locks-tables-fast/</loc><lastmod>2026-08-06T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-tmux-secures-its-unix-socket/</loc><lastmod>2026-08-04T10:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/unix/</loc><lastmod>2026-08-04T10:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/jsonpath/</loc><lastmod>2026-08-04T08:55:15+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-jsonpath-in-c/</loc><lastmod>2026-08-04T08:55:15+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/jsonb/</loc><lastmod>2026-07-28T22:45:02+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-json-and-jsonb-in-c/</loc><lastmod>2026-07-28T22:45:02+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-defers-tuple-deformation/</loc><lastmod>2026-07-28T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-tmux-format-expansion-runs-shell-commands/</loc><lastmod>2026-07-27T11:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/date/</loc><lastmod>2026-07-27T01:19:06+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-date-in-c/</loc><lastmod>2026-07-27T01:19:06+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-sorts-rows-fast/</loc><lastmod>2026-07-25T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/sort/</loc><lastmod>2026-07-25T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/cidr/</loc><lastmod>2026-07-24T02:35:53+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/inet/</loc><lastmod>2026-07-24T02:35:53+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgres-implements-inet-and-cidr-in-c/</loc><lastmod>2026-07-24T02:35:53+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-postgresql-skip-scans-btree-indexes/</loc><lastmod>2026-07-22T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-tmux-stores-grid-cells-in-five-bytes/</loc><lastmod>2026-07-22T08:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-caches-small-integers/</loc><lastmod>2026-05-02T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/integers/</loc><lastmod>2026-05-02T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-reuses-objects-with-free-lists/</loc><lastmod>2026-03-14T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/calls/</loc><lastmod>2026-03-02T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-makes-python-calls-fast-with-vectorcall/</loc><lastmod>2026-03-02T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-interns-strings/</loc><lastmod>2026-01-22T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-allocates-small-objects-with-pymalloc/</loc><lastmod>2025-11-11T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/tags/bytecode/</loc><lastmod>2025-08-05T09:00:00+00:00</lastmod></url><url><loc>https://articles.9j.nz/posts/how-cpython-specializes-bytecode-with-inline-caches/</loc><lastmod>2025-08-05T09:00:00+00:00</lastmod></url></urlset>