{
    "version": "https://jsonfeed.org/version/1",
    "title": "ObsessionDB Blog",
    "home_page_url": "https://evren.so/obsessiondb/blog",
    "feed_url": "https://evren.so/obsessiondb/feed.json",
    "description": "Data, infra, benchmarks, and tooling for ClickHouse performance and managed database infrastructure.",
    "icon": "https://evren.so/obsessiondb/favicon-light-v2.svg",
    "author": {
        "name": "ObsessionDB",
        "url": "https://evren.so/obsessiondb"
    },
    "items": [
        {
            "id": "https://evren.so/obsessiondb/blog/clickhouse-query-optimization-what-makes-it-fast",
            "content_html": "The complete ClickHouse query optimization guide: sorting keys, PREWHERE, data skipping indexes, FINAL evolution, JOIN algorithms, and anti-patterns.",
            "url": "https://evren.so/obsessiondb/blog/clickhouse-query-optimization-what-makes-it-fast",
            "title": "ClickHouse® Query Optimization: What Makes It Fast and What Kills It",
            "image": "https://evren.so/obsessiondb/images/blog/clickhouse-query-optimization-what-makes-it-fast.png",
            "date_modified": "2026-04-15T00:00:00.000Z",
            "author": {
                "name": "Alvaro Garcia"
            },
            "tags": [
                "Data"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/clickhouse-projections-complete-guide",
            "content_html": "ClickHouse projections explained: internal storage, query routing, three projection types, and a decision framework for when to use them vs materialized views.",
            "url": "https://evren.so/obsessiondb/blog/clickhouse-projections-complete-guide",
            "title": "ClickHouse® Projections: The Complete Guide",
            "image": "https://evren.so/obsessiondb/images/blog/clickhouse-projections-complete-guide.png",
            "date_modified": "2026-04-04T00:00:00.000Z",
            "author": {
                "name": "Alvaro Garcia"
            },
            "tags": [
                "Data"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/eliminate-pipeline-warehouse-realtime-api",
            "content_html": "The pipeline between your warehouse and your API is the most expensive infrastructure you own. Not because of what it costs to run, but because of what it costs your team to build, maintain, and debug.",
            "url": "https://evren.so/obsessiondb/blog/eliminate-pipeline-warehouse-realtime-api",
            "title": "You Don't Need a Separate Pipeline Between Your Warehouse and Your Real-time APIs",
            "image": "https://evren.so/obsessiondb/images/blog/eliminate-pipeline-warehouse-realtime-api.png",
            "date_modified": "2026-04-01T00:00:00.000Z",
            "author": {
                "name": "Rafael Aviles"
            },
            "tags": [
                "Infra"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/real-time-outlier-detection-clickhouse",
            "content_html": "Building a pipeline that flags outliers across 15M daily events in 21ms using chained materialized views and rolling quantiles in ClickHouse.",
            "url": "https://evren.so/obsessiondb/blog/real-time-outlier-detection-clickhouse",
            "title": "How we detect outliers in real time using ClickHouse®",
            "image": "https://evren.so/obsessiondb/images/blog/real-time-outlier-detection-clickhouse.png",
            "date_modified": "2026-03-31T00:00:00.000Z",
            "author": {
                "name": "Jose Enrique Barco"
            },
            "tags": [
                "Data"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/collapsingmergetree-current-state-event-streams",
            "content_html": "Instead of asking ClickHouse which row is the latest during merges, you define it during ingestion by cancelling the old value and inserting a new row. The fundamental tradeoff: ingestion complexity for query simplicity.",
            "url": "https://evren.so/obsessiondb/blog/collapsingmergetree-current-state-event-streams",
            "title": "CollapsingMergeTree: Current State from Event Streams",
            "image": "https://evren.so/obsessiondb/images/blog/collapsingmergetree-current-state-event-streams.png",
            "date_modified": "2026-03-26T00:00:00.000Z",
            "author": {
                "name": "Alvaro Garcia"
            },
            "tags": [
                "Data"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/ohlc-candles-tradingview-clickhouse",
            "content_html": "Building cascading AggregatingMergeTree tables for real-time OHLC candles served through TradingView's UDF API, with live streaming via Durable Objects.",
            "url": "https://evren.so/obsessiondb/blog/ohlc-candles-tradingview-clickhouse",
            "title": "How we feed OHLC candles to TradingView from ClickHouse® DB",
            "image": "https://evren.so/obsessiondb/images/blog/ohlc-candles-tradingview-clickhouse.png",
            "date_modified": "2026-03-19T00:00:00.000Z",
            "author": {
                "name": "Alvaro Garcia"
            },
            "tags": [
                "Data"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/ai-coding-agent-analytics-1573-sessions",
            "content_html": "We ran Claude Code across 6 people and 37 projects. After 1,573 sessions, we found patterns nobody was measuring. Here's why we built rudel.ai.",
            "url": "https://evren.so/obsessiondb/blog/ai-coding-agent-analytics-1573-sessions",
            "title": "AI Coding Agent Analytics: What 1,573 Sessions Taught Us",
            "image": "https://evren.so/obsessiondb/images/blog/ai-coding-agent-analytics-1573-sessions.png",
            "date_modified": "2026-03-17T00:00:00.000Z",
            "author": {
                "name": "Alvaro Garcia"
            },
            "tags": [
                "Tooling"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/aggregatingmergetree-rollups-that-scale",
            "content_html": "The complete AggregatingMergeTree reference: combinator patterns, cascading rollups, SimpleAggregateFunction vs AggregateFunction, and production gotchas.",
            "url": "https://evren.so/obsessiondb/blog/aggregatingmergetree-rollups-that-scale",
            "title": "ClickHouse® AggregatingMergeTree: Rollups That Scale",
            "image": "https://evren.so/obsessiondb/images/blog/aggregatingmergetree-rollups-that-scale.png",
            "date_modified": "2026-03-15T00:00:00.000Z",
            "author": {
                "name": "Alvaro Garcia"
            },
            "tags": [
                "Data"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/replacingmergetree-current-state",
            "content_html": "How we use ReplacingMergeTree with is_deleted to serve current state from 25MB batches — schema design, delta queries, and the full pipeline from blockchain events to trader screens.",
            "url": "https://evren.so/obsessiondb/blog/replacingmergetree-current-state",
            "title": "Current State with ClickHouse® ReplacingMergeTree",
            "image": "https://evren.so/obsessiondb/images/blog/replacingmergetree-current-state.png",
            "date_modified": "2026-03-10T00:00:00.000Z",
            "author": {
                "name": "Alvaro Garcia"
            },
            "tags": [
                "Data"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/replacingmergetree-deduplication-done-right",
            "content_html": "ReplacingMergeTree deduplicates at merge time, not insert time. Production patterns, FINAL performance, and the Postgres traps nobody warns you about.",
            "url": "https://evren.so/obsessiondb/blog/replacingmergetree-deduplication-done-right",
            "title": "ClickHouse® ReplacingMergeTree: Deduplication Done Right",
            "image": "https://evren.so/obsessiondb/images/blog/replacingmergetree-deduplication-done-right.png",
            "date_modified": "2026-03-05T00:00:00.000Z",
            "author": {
                "name": "Alvaro Garcia"
            },
            "tags": [
                "Data"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/data-modelling-clickhouse-engines-tables-materialisations",
            "content_html": "How to choose between MergeTree engines, design ORDER BY and PARTITION BY for performance, and use materialised views for pre-aggregation. A practical guide from running ClickHouse at petabyte scale.",
            "url": "https://evren.so/obsessiondb/blog/data-modelling-clickhouse-engines-tables-materialisations",
            "title": "Data Modelling in ClickHouse®: Engines, Tables, and Materialisations",
            "image": "https://evren.so/obsessiondb/images/blog/data-modelling-clickhouse-engines-tables-materialisations.png",
            "date_modified": "2026-02-25T00:00:00.000Z",
            "author": {
                "name": "Alvaro Garcia"
            },
            "tags": [
                "Data"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/stateless-distributed-cache-clickhouse",
            "content_html": "In a stateless distributed database, the network is the bottleneck — not CPU or memory. We built a distributed cache mesh where every ClickHouse node contributes its local NVMe to a shared cache layer.",
            "url": "https://evren.so/obsessiondb/blog/stateless-distributed-cache-clickhouse",
            "title": "How We Built a Stateless Distributed Cache for ClickHouse",
            "image": "https://evren.so/obsessiondb/images/blog/stateless-distributed-cache-clickhouse.png",
            "date_modified": "2026-02-22T00:00:00.000Z",
            "author": {
                "name": "Marc Leuthardt"
            },
            "tags": [
                "Infra"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/obsessiondb-vs-clickhouse-cloud-10b-benchmark",
            "content_html": "ObsessionDB runs 35% faster than ClickHouse Cloud in the 10B row benchmark with up to 9x better performance per dollar. Not an apples-to-apples comparison - and we'll show you exactly why that's okay.",
            "url": "https://evren.so/obsessiondb/blog/obsessiondb-vs-clickhouse-cloud-10b-benchmark",
            "title": "ObsessionDB vs. ClickHouse Cloud in the 10B Row Benchmark",
            "image": "https://evren.so/obsessiondb/images/blog/obsessiondb-vs-clickhouse-cloud-10b-benchmark.png",
            "date_modified": "2026-02-18T00:00:00.000Z",
            "author": {
                "name": "Marc Leuthardt"
            },
            "tags": [
                "Benchmarks"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/ai-skills-clickhouse-optimization-patterns",
            "content_html": "AI coding assistants write excellent SQL — and queries that destroy production. We extracted battle-tested patterns into open source skills.",
            "url": "https://evren.so/obsessiondb/blog/ai-skills-clickhouse-optimization-patterns",
            "title": "AI Skills for ClickHouse: Optimization Patterns proven at 100B+ rows",
            "image": "https://evren.so/obsessiondb/images/blog/ai-skills-clickhouse-optimization-patterns.png",
            "date_modified": "2026-02-14T00:00:00.000Z",
            "author": {
                "name": "Alvaro Garcia"
            },
            "tags": [
                "Tooling"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/scale-signoz-on-obsessiondb",
            "content_html": "How we made SigNoz work with separated storage and compute with a single docker compose up — no sharding, no distributed tables.",
            "url": "https://evren.so/obsessiondb/blog/scale-signoz-on-obsessiondb",
            "title": "Scale SigNoz on ObsessionDB and ClickHouse® Cloud: No Sharding Required",
            "image": "https://evren.so/obsessiondb/images/blog/scale-signoz-on-obsessiondb.png",
            "date_modified": "2026-02-12T00:00:00.000Z",
            "author": {
                "name": "Marc Leuthardt"
            },
            "tags": [
                "Tooling"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/clickhouse-materialized-views-patterns-pitfalls",
            "content_html": "ClickHouse materialized views are INSERT triggers, not query caches. Production patterns, write amplification traps, and lessons from running them at scale.",
            "url": "https://evren.so/obsessiondb/blog/clickhouse-materialized-views-patterns-pitfalls",
            "title": "ClickHouse® Materialized Views: Patterns and Pitfalls",
            "image": "https://evren.so/obsessiondb/images/blog/clickhouse-materialized-views-patterns-pitfalls.png",
            "date_modified": "2026-02-10T00:00:00.000Z",
            "author": {
                "name": "Alvaro Garcia"
            },
            "tags": [
                "Data"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/clickhouse-what-it-is-how-it-works-when-it-falls-apart",
            "content_html": "A practitioner’s deep dive into ClickHouse architecture: columnar storage, MergeTree internals, sparse indexes, and when NOT to use it. Real numbers from production.",
            "url": "https://evren.so/obsessiondb/blog/clickhouse-what-it-is-how-it-works-when-it-falls-apart",
            "title": "ClickHouse® Database: What It Is, How It Works, and When It Falls Apart",
            "image": "https://evren.so/obsessiondb/images/blog/clickhouse-what-it-is-how-it-works-when-it-falls-apart.png",
            "date_modified": "2026-02-07T00:00:00.000Z",
            "author": {
                "name": "Alvaro Garcia"
            },
            "tags": [
                "Data"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/hard-truth-self-hosting-clickhouse",
            "content_html": "ReplicatedMergeTree broke my brain. The architectural problem no tooling could fix, and how we made the complexity disappear.",
            "url": "https://evren.so/obsessiondb/blog/hard-truth-self-hosting-clickhouse",
            "title": "The Hard Truth About Self-Hosting ClickHouse® at Scale",
            "image": "https://evren.so/obsessiondb/images/blog/hard-truth-self-hosting-clickhouse.png",
            "date_modified": "2026-01-25T00:00:00.000Z",
            "author": {
                "name": "Alvaro Garcia"
            },
            "tags": [
                "Infra"
            ]
        },
        {
            "id": "https://evren.so/obsessiondb/blog/announcement",
            "content_html": "At Numia, we operate blockchain data infrastructure at near-petabyte scale. By late 2024, our infrastructure costs had become unsustainable. We built ObsessionDB to solve this problem.",
            "url": "https://evren.so/obsessiondb/blog/announcement",
            "title": "Cutting Our ClickHouse Bill in Half: The Story Behind ObsessionDB",
            "image": "https://evren.so/obsessiondb/images/blog/announcement.png",
            "date_modified": "2026-01-20T00:00:00.000Z",
            "author": {
                "name": "Marc Höffl"
            },
            "tags": [
                "Infra"
            ]
        }
    ]
}