{"author":"andrenotgiant","children":[{"author":"andrenotgiant","children":[{"author":"eveningtree","children":[],"created_at":"2026-07-04T09:02:18.000Z","created_at_i":1783155738,"id":48783916,"options":[],"parent_id":48746678,"points":null,"story_id":48745855,"text":"Rather than answering directly, I&#x27;m thinking about this problem from the other end altogether ever since I saw the dbricks rt demo. Apologies for the rambling response, as I haven&#x27;t yet finished thinking about this problem...<p>We ended up with &#x27;hot&#x27; data in oltp and &#x27;cold&#x2F;archival&#x27; data in olap because the storage size of oltp has always been limited.<p>(1) Limited by computation - there&#x27;s only so much data that we can store on disks and nvme<p>(2) Limited by wallet - disks and nvme are EXPENSIVE<p>Also, the tight coupling of compute and data didn&#x27;t help. It limited the size of databases on the individual expensive compute nodes.<p>So, another question will be -<p>What&#x27;s currently stopping me from keeping the scd history tables right in my oltp db? what&#x27;s forcing me to copy state into my etl&#x2F;elt pipeline and the process it into scd into a dedicated olap db?<p>To some extent,the answer is still the same - the oltp cannot scale for the storage size required for keeping historical data. So, I&#x27;ve had to take out the &#x27;cold&#x27; historical data and keep it in my olap freezer.<p>Now, if oltp itself is scaling, I&#x27;m not gonna bother with the copying step. I&#x27;ll just prefer to store the history in oltp itself.<p>In my perspective (majorly from handling IoT systems), I need olap for 2 reasons - (1) storage scalability, and (2) analytical processing speed<p>I now consider (1) to be a solved problem<p>As for (2), I&#x27;m still not sure how this architecture ends up matching the query processing speeds of column-oriented storages. But again, I need to study more.<p>The SCD pipeline still remains in some form. Either in the form of (1) scd rows that we currently keep (etl pipeline)\n, or (2) as older lsn rows that simply don&#x27;t get deleted (existing db engine).<p>I&#x27;ve done quite a lot of experimentation with (2), and it is a pretty solid concept to work with.<p>I&#x27;ve spent quite a lot of years hammering my brain at databases and datastores in general. And I&#x27;ve now got a feeling that this is it.\nFinally.","title":null,"type":"comment","url":null},{"author":"hasyimibhar","children":[{"author":"TheTaytay","children":[{"author":"hasyimibhar","children":[],"created_at":"2026-07-04T16:47:55.000Z","created_at_i":1783183675,"id":48786805,"options":[],"parent_id":48786268,"points":null,"story_id":48745855,"text":"&gt; If you have something like dolt (not affiliated), a version controlled database, you wouldn\u2019t have to slap change dates on anything OR create your historical table. The changes would be implicit in the version history.<p>Nope, even if I have the ability to see the exact changes of each row, I would still add timestamps everywhere, because timestamp of row change does not equal event timestamp. For example, if I have an order table with status column, and I see a CDC event where status changed from in_progress to completed, I cannot simply assume that the CDC timestamp is the timestamp when order was completed. It&#x27;s possible that the source database received the event late a few minutes late due to delay upstream, or it&#x27;s backfilling some missed orders a few days ago. Having a completed_at timestamp (and a bunch of other timestamps for each order lifecycle) would eliminate any ambiguities, and your data analyst will thank you for it.<p>It&#x27;s the same thing with row history. You cannot simply assume that your row changes are aligned with the logical history of your entity.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T15:51:56.000Z","created_at_i":1783180316,"id":48786268,"options":[],"parent_id":48784049,"points":null,"story_id":48745855,"text":"I think you have a point, and SCD type 2 feels like a workaround, but there is also something to be said for the ability to query every row as it was at any given version. \nI\u2019m not saying that SCD type 2 is the best solution given there might be a more domain-specific way to do it, but I see it a lot like file-based version control. \nIt\u2019s convenient to be able to examine all files as they existed at any point in time, without having to \u201cmodel\u201d the ways in which those files might change directly into the domain of the individual files.<p>If you have something like dolt (not affiliated), a version controlled database, you wouldn\u2019t have to slap change dates on anything OR create your historical table. The changes would be implicit in the version history.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T09:25:11.000Z","created_at_i":1783157111,"id":48784049,"options":[],"parent_id":48746678,"points":null,"story_id":48745855,"text":"It wouldn&#x27;t be possible to do this with LTAP architecture since (I&#x27;m assuming) the individual logical changes are not visible. But honestly I&#x27;ve always seen SCD type 2 table as a workaround due to lack of data modeling experience in the source database. If you design your tables correctly, you shouldn&#x27;t need SCD type 2 downstream.<p>For example, if you know your user can change emails, and there might be events from another source that is keyed by user email (e.g. marketing-related events), then naturally you will need some sort of email_history table that has historical mapping of user id to email (you probably need it for audit purposes too). Then in this case there is no need to build SCD type 2 table of user from CDC, it&#x27;s already there.","title":null,"type":"comment","url":null},{"author":"khurs","children":[{"author":"_zoltan_","children":[{"author":"tomjakubowski","children":[{"author":"_zoltan_","children":[],"created_at":"2026-07-04T20:35:22.000Z","created_at_i":1783197322,"id":48788804,"options":[],"parent_id":48788691,"points":null,"story_id":48745855,"text":"because they are making an extra step: instead of the snapshot being actually an object manifest, they store the snapshot metadata in a relation database.<p>I have a use case where we do 100k changes a second. I bet you &quot;their unlimited snapshots because we are cool and using dbs for metadata&quot; will fail in such a use case.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T20:25:36.000Z","created_at_i":1783196736,"id":48788691,"options":[],"parent_id":48784128,"points":null,"story_id":48745855,"text":"Don&#x27;t know about other systems, but in Ducklake every committed transaction creates a new snapshot.<p><a href=\"https:&#x2F;&#x2F;ducklake.select&#x2F;docs&#x2F;stable&#x2F;duckdb&#x2F;usage&#x2F;snapshots\" rel=\"nofollow\">https:&#x2F;&#x2F;ducklake.select&#x2F;docs&#x2F;stable&#x2F;duckdb&#x2F;usage&#x2F;snapshots</a>","title":null,"type":"comment","url":null},{"author":"jesseryoung","children":[],"created_at":"2026-07-05T01:54:49.000Z","created_at_i":1783216489,"id":48790660,"options":[],"parent_id":48784128,"points":null,"story_id":48745855,"text":"Every commit in Delta is time travel-able. Defaults in Delta clean up logs in 30 days (and data in 7 days but requires a VACUUM be issued.) You can set those retention periods to any arbitrary time period, but it&#x27;s typically advised against due to the cost to store all the historical data.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T09:41:35.000Z","created_at_i":1783158095,"id":48784128,"options":[],"parent_id":48784106,"points":null,"story_id":48745855,"text":"up to a limited number of snapshots. it&#x27;s not arbitrary times, it&#x27;s when there was an atomic snapshot created in the catalog.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T09:36:07.000Z","created_at_i":1783157767,"id":48784106,"options":[],"parent_id":48746678,"points":null,"story_id":48745855,"text":"Both Iceberg and Delta Lake support &#x27;time travel&#x27; so you can query data as it was at a certain date.<p><i>SELECT count * FROM   my_table AS OF  &quot;2025-01-01&quot;</i><p><a href=\"https:&#x2F;&#x2F;delta.io&#x2F;blog&#x2F;2023-02-01-delta-lake-time-travel&#x2F;\" rel=\"nofollow\">https:&#x2F;&#x2F;delta.io&#x2F;blog&#x2F;2023-02-01-delta-lake-time-travel&#x2F;</a><p><a href=\"https:&#x2F;&#x2F;iceberg.apache.org&#x2F;docs&#x2F;latest&#x2F;spark-queries&#x2F;#spark-sql-functions\" rel=\"nofollow\">https:&#x2F;&#x2F;iceberg.apache.org&#x2F;docs&#x2F;latest&#x2F;spark-queries&#x2F;#spark-...</a>","title":null,"type":"comment","url":null},{"author":"ignoreusernames","children":[{"author":"nikita","children":[],"created_at":"2026-07-04T14:54:14.000Z","created_at_i":1783176854,"id":48785859,"options":[],"parent_id":48784456,"points":null,"story_id":48745855,"text":"Safekeepers keep a window of WAL in Postgres WAL format and doesn\u2019t have an external API.<p>It streams WAL to pageservers and Postgres read replicas","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T10:56:59.000Z","created_at_i":1783162619,"id":48784456,"options":[],"parent_id":48746678,"points":null,"story_id":48745855,"text":"If safe keeper exposes the changes to the tables somehow, a type2 scd is just a windowed lag over the primary key sorted by the timestamp","title":null,"type":"comment","url":null}],"created_at":"2026-07-01T13:44:46.000Z","created_at_i":1782913486,"id":48746678,"options":[],"parent_id":48745855,"points":null,"story_id":48745855,"text":"Here&#x27;s what I don&#x27;t understand:<p>Part of the value of doing an ETL pipeline via streaming replication is you get the full history of data in a table. An SCD type 2 table where each row also has a valid_from and valid_to timestamp column.<p>How would someone do the same thing with this architecture?","title":null,"type":"comment","url":null},{"author":"PunchyHamster","children":[{"author":"khurs","children":[{"author":"_zoltan_","children":[{"author":"khurs","children":[{"author":"_zoltan_","children":[],"created_at":"2026-07-04T12:56:27.000Z","created_at_i":1783169787,"id":48785093,"options":[],"parent_id":48784148,"points":null,"story_id":48745855,"text":"they exist, sure. And I&#x27;m sure it can handle PB+. on prem is an existing market, however, if you reread my comment I talked about running minio on AWS because S3 is too expensive - just doesn&#x27;t make sense to do.<p>I&#x27;ve yet to met a Fortune 100 who isn&#x27;t mostly using either on prem or a large hyperscaler (S3&#x2F;Azure&#x2F;GCS).","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T09:45:45.000Z","created_at_i":1783158345,"id":48784148,"options":[],"parent_id":48784124,"points":null,"story_id":48745855,"text":"&gt; nobody will run minio on AWS other than hobby projects and small demos.<p>You realise not every company uses AWS for any&#x2F;all its needs?<p>There are datacenters around the world owned by individual companies or co-located. And many companies still have servers on prem.<p>Compute and disks are getting more dense &amp; liquid cooled, so less rack space is needed for same power.<p>And Minio and others can handle Petabytes+<p><a href=\"https:&#x2F;&#x2F;www.cisco.com&#x2F;c&#x2F;en&#x2F;us&#x2F;products&#x2F;collateral&#x2F;servers-unified-computing&#x2F;ucs-c-series-rack-servers&#x2F;solution-overview-c22-743215.html\" rel=\"nofollow\">https:&#x2F;&#x2F;www.cisco.com&#x2F;c&#x2F;en&#x2F;us&#x2F;products&#x2F;collateral&#x2F;servers-un...</a><p>Backblaze, Cloudflare R2 and other cheaper S3 compatible competitors also exist.","title":null,"type":"comment","url":null},{"author":"tux3","children":[{"author":"khurs","children":[{"author":"tux3","children":[{"author":"re-thc","children":[],"created_at":"2026-07-04T15:39:00.000Z","created_at_i":1783179540,"id":48786165,"options":[],"parent_id":48784896,"points":null,"story_id":48745855,"text":"&gt; There is a scale between prise-sensitivity and risk-averseness, from my point of reference large companies are much more risk-averse than they are price sensitive.<p>That&#x27;s not true. It&#x27;s just the way things work &quot;saving money&quot; isn&#x27;t part of the KPI. Enterprise teams get a budget. If you &quot;saved&quot; you don&#x27;t get it back. So unless there&#x27;s a legit need it&#x27;s ALWAYS easier increasing than cutting it.<p>It&#x27;s not about risk. It&#x27;s about power. They are price sensitive but in a way that doesn&#x27;t matter to the bottom line i.e. if I can cut my AWS storage bill by 10% and then spend it on random tokens I&#x27;d do it.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T12:23:00.000Z","created_at_i":1783167780,"id":48784896,"options":[],"parent_id":48784482,"points":null,"story_id":48745855,"text":"There is a scale between prise-sensitivity and risk-averseness, from my point of reference large companies are much more risk-averse than they are price sensitive. Of course this will vary, CTOs exist in all sort of different environments.<p>Price is not the reason people chose AWS. Some companies use Azure. The current startup at $WORK uses yet another smaller Cloud. And yet AWS sill has the clear lead in market share. That&#x27;s because price is far from the only factor, and not even the main factor.","title":null,"type":"comment","url":null},{"author":"xtracto","children":[],"created_at":"2026-07-04T14:00:19.000Z","created_at_i":1783173619,"id":48785463,"options":[],"parent_id":48784482,"points":null,"story_id":48745855,"text":"They definitely havent. Tech side of companies is a Cost Center. And the main question the CEO&#x2F;CFO makes to the CTO every week is &quot;how can we reduce our AWS bill?&quot;  , even before the how was your weekend ? One.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T11:01:51.000Z","created_at_i":1783162911,"id":48784482,"options":[],"parent_id":48784270,"points":null,"story_id":48745855,"text":"&quot;The large enterprise vendors are not price-sensitive.&quot;<p>Have you ever spoken to a CTO? They most certainly are.<p>Also many are Microsoft houses so using Azure blob plus one of the reasons for Kubernetes&#x2F;Openshift adoption was to be cloud neutral","title":null,"type":"comment","url":null},{"author":"_zoltan_","children":[],"created_at":"2026-07-04T12:57:21.000Z","created_at_i":1783169841,"id":48785099,"options":[],"parent_id":48784270,"points":null,"story_id":48745855,"text":"when people talk about S3 they mostly mean AWS, but I do agree S3 is a standard interface. in non-AWS cases they&#x27;d say S3-compatible.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T10:15:36.000Z","created_at_i":1783160136,"id":48784270,"options":[],"parent_id":48784124,"points":null,"story_id":48745855,"text":"The large enterprise vendors are not prise-sensitive. They&#x27;re on AWS because you never get fired for picking AWS, and there isn&#x27;t really any other choice for these vendors regardless of AWS ripping you off.<p>At this point S3 is a standard interface. All sorts of cloud providers and open-source projects provide S3. If you&#x27;re on AWS, price isn&#x27;t the reason. You pick AWS because you don&#x27;t see your company taking a risk with anything else.<p>S3 doesn&#x27;t mean expensive. AWS does. But AWS users are fully locked-in, they&#x27;ll pay whatever the price is.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T09:40:35.000Z","created_at_i":1783158035,"id":48784124,"options":[],"parent_id":48783899,"points":null,"story_id":48745855,"text":"your reply makes zero sense.<p>there is a reason why people develop for S3: a lot of enterprise data is there. people ingest there from various sources. and it&#x27;s not just parquet usually, it&#x27;s multivendor sources writing to an iceberg catalog.<p>nobody will run minio on AWS other than hobby projects and small demos.<p>I regularly work with iceberg datasets in the double digit TB range per dataset. keep that in mind when you think about sizes. databricks, snowflake, large enterprise vendors: they are targeting these sizes.","title":null,"type":"comment","url":null},{"author":"dockerd","children":[{"author":"khurs","children":[{"author":"scritty-dev","children":[{"author":"dizhn","children":[{"author":"scritty-dev","children":[{"author":"dizhn","children":[],"created_at":"2026-07-06T07:25:41.000Z","created_at_i":1783322741,"id":48801627,"options":[],"parent_id":48800419,"points":null,"story_id":48745855,"text":"Not that I know of but a lot of people took tat as a sign of extensive vibe coding and wrote Rustfs off completely. I personally installed seaweedfs, rustfs and garage at different points and plan on checking out rustfs again in the future. If anybody is interested, the most robust of them seems to be seaweed by the way.","title":null,"type":"comment","url":null}],"created_at":"2026-07-06T03:42:58.000Z","created_at_i":1783309378,"id":48800419,"options":[],"parent_id":48789645,"points":null,"story_id":48745855,"text":"there was the issue in Feb but it was resolved, something else newer happen?","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T22:26:44.000Z","created_at_i":1783204004,"id":48789645,"options":[],"parent_id":48785540,"points":null,"story_id":48745855,"text":"Don&#x27;t look into the news about rustfs from the last few months if you are happy with them.  :)","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T14:11:10.000Z","created_at_i":1783174270,"id":48785540,"options":[],"parent_id":48784519,"points":null,"story_id":48745855,"text":"Correct, but RustFS is the only drop in replacement (just migrated) Garage and Seaweed are nice (didn&#x27;t look into Ceph) but you have to re-ingest. RustFS was just plug and play albeit a few minor API differences.<p>Also Apache licensing gives some peace of mind after the musical chair license game before they finally landed on only paid AIStor offering.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T11:10:30.000Z","created_at_i":1783163430,"id":48784519,"options":[],"parent_id":48784409,"points":null,"story_id":48745855,"text":"oh wow, another rug pull!!<p>So Ceph&#x2F;SeaweedFS&#x2F;RustFS&#x2F;Garage are the alternatives I think","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T10:45:13.000Z","created_at_i":1783161913,"id":48784409,"options":[],"parent_id":48783899,"points":null,"story_id":48745855,"text":"Minio is no longer maintained.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T09:00:14.000Z","created_at_i":1783155614,"id":48783899,"options":[],"parent_id":48783861,"points":null,"story_id":48745855,"text":"There are self hosted object stores which use the same protocol as S3. One example: <a href=\"https:&#x2F;&#x2F;github.com&#x2F;minio&#x2F;minio\" rel=\"nofollow\">https:&#x2F;&#x2F;github.com&#x2F;minio&#x2F;minio</a><p>Parquet files are smaller than row based storage in a database (but not those databases with focus on strong compression).<p>And for backup - the files are probably easier to just copy to multiple disks for redundancy, as opposed to database dumps and incremental backups which at the Petabyte scale will be a pain.","title":null,"type":"comment","url":null},{"author":"otterley","children":[],"created_at":"2026-07-04T12:12:52.000Z","created_at_i":1783167172,"id":48784838,"options":[],"parent_id":48783861,"points":null,"story_id":48745855,"text":"There\u2019s no S3 bandwidth bill for traffic to and from EC2 in the same region.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T08:54:51.000Z","created_at_i":1783155291,"id":48783861,"options":[],"parent_id":48745855,"points":null,"story_id":48745855,"text":"I don&#x27;t wanna see that S3 bandwidth bill after running some big query","title":null,"type":"comment","url":null},{"author":"Avalaxy","children":[{"author":"ah27182","children":[],"created_at":"2026-07-04T18:47:06.000Z","created_at_i":1783190826,"id":48787773,"options":[],"parent_id":48784506,"points":null,"story_id":48745855,"text":"But much of the layers behind this LTAP architecture are proprietary. The goal for databricks is for customer\u2019s data to never leave their infra.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T11:06:49.000Z","created_at_i":1783163209,"id":48784506,"options":[],"parent_id":48745855,"points":null,"story_id":48745855,"text":"Super cool stuff. Being able to combine your analytical platform and transactional database into one storage layer without having to set up ETL pipelines in between is really a game changer. Especially since it&#x27;s just postgres, instead of some proprietary database.","title":null,"type":"comment","url":null},{"author":"dsauerbrun","children":[{"author":"conradludgate","children":[{"author":"dsauerbrun","children":[{"author":"nikita","children":[{"author":"amin2","children":[],"created_at":"2026-07-06T08:33:52.000Z","created_at_i":1783326832,"id":48802123,"options":[],"parent_id":48786156,"points":null,"story_id":48745855,"text":"I assume the parquet files are way larger than the page format, doesn&#x27;t this cause a lot of read amplification? OLTP side needs to read a lot more data to fetch a single old row that&#x27;s stored in parquet format.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T15:38:14.000Z","created_at_i":1783179494,"id":48786156,"options":[],"parent_id":48785968,"points":null,"story_id":48745855,"text":"Recent data plus working set is always in Postgres page format.<p>Historical data when pushed to s3 is in parquet. This happens async - not on the transaction hot path.<p>So older data below certain LSN is on s3 in parquet available to all analytics processing. Hot data is on page servers in page format for OLTP.<p>You can be smart in querying both representations for real time analytical queries","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T15:10:38.000Z","created_at_i":1783177838,"id":48785968,"options":[],"parent_id":48785058,"points":null,"story_id":48745855,"text":"Hmm, if the caching layer doesn&#x27;t change(I assume it was optimized for olap style queries), and the new parquet format is better for olap... I&#x27;m still not understanding how it performs well for oltp reads.<p>I&#x27;ll give the article another read... Maybe I missed something. Thank you for the response! Really nice to be able to get info straight from people who work on the product","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T12:50:06.000Z","created_at_i":1783169406,"id":48785058,"options":[],"parent_id":48784910,"points":null,"story_id":48745855,"text":"Hi, I work on Lakebase (but not on storage), here&#x27;s how I understand it.<p>For Lakebase and Neon, our architecture needs the caching layer regardless (what we call Pageservers). Performing reads from S3 directly is too slow so we reconstruct pages and keep them on an nvme server for faster querying. Changing the format on S3 to be Parquet effectively introduces no additional copies over our existing architecture","title":null,"type":"comment","url":null},{"author":"viccis","children":[],"created_at":"2026-07-04T16:23:52.000Z","created_at_i":1783182232,"id":48786572,"options":[],"parent_id":48784910,"points":null,"story_id":48745855,"text":"From what I have seen, it&#x27;s basically a Lambda architecture.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T12:24:27.000Z","created_at_i":1783167867,"id":48784910,"options":[],"parent_id":48745855,"points":null,"story_id":48745855,"text":"Maybe I&#x27;m too stupid to understand the article... How does this achieve performant querying for olap and oltp purposes?<p>Based on my understanding, olap queries will go to the parquet files which are stored in a columnar fashion and oltp style queries will go to a caching layer that sits on top of those parquet files?<p>What&#x27;s the special sauce here? Seems like they&#x27;re just caching the data which, for all intents and purposes, seems like the same solution of storing another copy of the data which is what they say they&#x27;re avoiding.","title":null,"type":"comment","url":null},{"author":"scritty-dev","children":[],"created_at":"2026-07-04T14:06:41.000Z","created_at_i":1783174001,"id":48785507,"options":[],"parent_id":48745855,"points":null,"story_id":48745855,"text":"So then would LTAP sit to both the left and the right of the medallion architecture? Meaning would you on the left of Bronze use it as an OLTP and to the right of Gold use it as an OLAP? Currently we&#x27;ve been mainly utilizing it to the right of Gold to develop analytic PERN applications that allow us to reuse the RBAC&#x2F;ACLs set in Unity Catalog, but from this article it seems like that&#x27;s only half of its utility?","title":null,"type":"comment","url":null},{"author":"saisrirampur","children":[{"author":"nikita","children":[{"author":"saisrirampur","children":[],"created_at":"2026-07-04T15:52:17.000Z","created_at_i":1783180337,"id":48786275,"options":[],"parent_id":48786227,"points":null,"story_id":48745855,"text":"Taxing Postgres is one thing, which can be overcome with ways like using standbys. There could other more native ways (than unifying storage), which you\u2019ll hear about in a few weeks. Also I don\u2019t fully agree on logical replication taxing Postgres, if the client is built with care and precision.<p>In regards to error prone and speed (lag, latency at real-world scale), I wish the blog went into more detail and gave evidence than talk theory.","title":null,"type":"comment","url":null},{"author":"ronfriedhaber","children":[{"author":"saisrirampur","children":[{"author":"nikita","children":[{"author":"saisrirampur","children":[{"author":"ronfriedhaber","children":[],"created_at":"2026-07-04T17:54:26.000Z","created_at_i":1783187666,"id":48787344,"options":[],"parent_id":48786704,"points":null,"story_id":48745855,"text":"this is all so funny, gl to everyone","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T16:36:34.000Z","created_at_i":1783182994,"id":48786704,"options":[],"parent_id":48786631,"points":null,"story_id":48745855,"text":";) sounding good on paper vs how it works in practice (supporting demanding real-time OLTP&#x2F;OLAP workloads) are completely different ball games.<p>Separately, I understand taking care of it at storage level, but still don\u2019t get \u201cunifying storage\u201d or \u201czero copy\u201d.<p>Anyways, I\u2019ll stop now. Good to see all the innovation happening on converging OLTP&#x2F;OLAP front. Each with a different approach and perspective. :)","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T16:29:39.000Z","created_at_i":1783182579,"id":48786631,"options":[],"parent_id":48786341,"points":null,"story_id":48745855,"text":"If you product is CDC based (peerdb) you don\u2019t want storage to support this :)<p>This architecture is better for OLTP because all maintenance operations are moved to storage AND it has all other benefits such as LTAP that emerge from having a scalable storage.","title":null,"type":"comment","url":null},{"author":"creeksai","children":[{"author":"saisrirampur","children":[],"created_at":"2026-07-04T16:47:23.000Z","created_at_i":1783183643,"id":48786802,"options":[],"parent_id":48786742,"points":null,"story_id":48745855,"text":"Oh no, I did read the blog. Not throwing shade at anyone here\u2014the blog is great. It just doesn\u2019t provide real-world evidence, and it opens up a bunch of technical questions that I\u2019m trying to understand. that\u2019s exactly what HN is for. :)","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T16:39:39.000Z","created_at_i":1783183179,"id":48786742,"options":[],"parent_id":48786341,"points":null,"story_id":48745855,"text":"Did you even read the blog? Or are you just throwing shade because you are working on a competitive product based on CDC?","title":null,"type":"comment","url":null},{"author":"sunzhousz","children":[],"created_at":"2026-07-06T17:01:48.000Z","created_at_i":1783357308,"id":48807432,"options":[],"parent_id":48786341,"points":null,"story_id":48745855,"text":"zhou here :)<p>Moonlink was arguably one of the best ZeroETL(mirroring) solution, and there&#x27;s a reason we built LTAP instead (not just because it&#x27;s cool and we can do it)<p>To me,\ntwo big issues with CDC&#x2F;mirroring are:\n1. For ad-hoc querying, CDC is usually not there when you need them, and it is too expensive to maintain for all tables if you don&#x27;t query them often.\n2. For true data pipeline, a simple mirror is not enough, you will end up building all kinds of transformation and it essentially becomes ETL like spark.<p>One small issue is CDC + merge into columnstore means huge write amplification if you want fresh read on Analytics side, it is absurd especially for lakehouse tables (I have seen 100X for many OLTP workloads).<p>The only solution I found that we can trust agents creating, managing, running OLTP &amp; OLAP queries is LTAP.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T15:59:01.000Z","created_at_i":1783180741,"id":48786341,"options":[],"parent_id":48786312,"points":null,"story_id":48745855,"text":"Exactly! Why unifying storage, which opens up a can of trade-offs.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T15:56:08.000Z","created_at_i":1783180568,"id":48786312,"options":[],"parent_id":48786227,"points":null,"story_id":48745855,"text":"&gt; CDC which is error prone<p>Just have superior CDC :)","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T15:46:46.000Z","created_at_i":1783180006,"id":48786227,"options":[],"parent_id":48786172,"points":null,"story_id":48745855,"text":"Conversion is async. The whole point is to never deal with CDC which is error prone and taxing Postgres with occupying a replication slot and burning memory and cpu in the OLTP system.","title":null,"type":"comment","url":null},{"author":"cryptonector","children":[],"created_at":"2026-07-06T04:30:03.000Z","created_at_i":1783312203,"id":48800647,"options":[],"parent_id":48786172,"points":null,"story_id":48745855,"text":"CDC _never_ goes away, that&#x27;s for sure.  Maybe just for replication to a logical replica, but you&#x27;ll often need a sync from one system to another -- it just ends up happening.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T15:39:44.000Z","created_at_i":1783179584,"id":48786172,"options":[],"parent_id":48745855,"points":null,"story_id":48745855,"text":"But why? I\u2019m skeptical of the idea of unifying storage just because it sounds \u201celegant\u201d or \u201ccool\u201d. It\u2019s not obvious to me how a single storage engine can compete with purpose-built OLTP and OLAP systems like Postgres and ClickHouse, without significant tradeoffs.<p>You also mention removing CDC pipelines. I\u2019m curious if the materialization (conversion across formats) can catchup to an OLTP workload that is heavy (50K+ tps), which is pretty common these days. Also CDC if done right and with care can be magical for users and stays native to the OLTP&#x2F;OLAP data-store.<p>Third, data Lakes and open formats are suitable for Data Warehousing &#x2F; Data analyst use-cases than real-time customer facing apps. Sure, you might work on changing that, which is what you are upto, but you\u2019ll always run into tradeoffs, which will make it hard to unleash the best performance, much needed for the latter category.","title":null,"type":"comment","url":null},{"author":"hasyimibhar","children":[],"created_at":"2026-07-04T17:04:52.000Z","created_at_i":1783184692,"id":48786946,"options":[],"parent_id":48745855,"points":null,"story_id":48745855,"text":"How does LTAP architecture deals with major Postgres upgrade? Is it truly zero-downtime for both upstream and downstream?","title":null,"type":"comment","url":null},{"author":"chrislusf","children":[],"created_at":"2026-07-04T19:11:36.000Z","created_at_i":1783192296,"id":48788019,"options":[],"parent_id":48745855,"points":null,"story_id":48745855,"text":"Does this use table buckets?","title":null,"type":"comment","url":null},{"author":"dzonga","children":[],"created_at":"2026-07-04T20:17:18.000Z","created_at_i":1783196238,"id":48788606,"options":[],"parent_id":48745855,"points":null,"story_id":48745855,"text":"this is an interesting development.<p>OLAP databases have gone this route now known as Lakehouse architecture. figured out soon enough OLTP will go the same way.<p>by eliminating CDC &amp; other data engineering tasks - people will have interesting ways to analyze hot data. RisingWave etc - were already on the frontier of what you can do with hot data - but now more you won&#x27;t have something separate to run.","title":null,"type":"comment","url":null},{"author":"ianberdin","children":[{"author":"ianberdin","children":[],"created_at":"2026-07-04T20:31:59.000Z","created_at_i":1783197119,"id":48788766,"options":[],"parent_id":48788684,"points":null,"story_id":48745855,"text":"I also want to point out that all of this sounds fun and great \u2014 until the load kicks in and usage starts to grow.<p>That&#x27;s when you start seeing:<p>- *Rate limits* from object storage\n- *Dropped packets*\n- *Hanging S3 requests*\n- *Overloaded NVMe drives* \u2014 because it turns out they&#x27;re nowhere near as fast as they seem<p>For example, we recently discovered that the read speed is 5 GB&#x2F;s, but the *average write speed is only 400 MB&#x2F;s* \u2014 not several gigabytes as expected. Surprise! Who would have thought that Bare Metal could ship such underwhelming drives?<p>And then there&#x27;s the CPU \u2014 which is also easy to kill, for instance, if you&#x27;re compressing chunks. And so on, and so on.<p>A lot of things surface once you&#x27;re in *production usage*. On paper, of course, everything looked much simpler.","title":null,"type":"comment","url":null}],"created_at":"2026-07-04T20:24:35.000Z","created_at_i":1783196675,"id":48788684,"options":[],"parent_id":48745855,"points":null,"story_id":48745855,"text":"Surprisingly, I&#x27;m already encountering a second solution that involves storing data chunks on S3 \u2014 and this is all within the same week.<p>This is becoming popular. At Playcode, we built what we believe is a revolutionary file system for our Playcode Cloud (<a href=\"https:&#x2F;&#x2F;playcode.io&#x2F;cloud\" rel=\"nofollow\">https:&#x2F;&#x2F;playcode.io&#x2F;cloud</a>), which enables the creation of full-stack web software. The FS built completely from scratch using Rust. We thought we were the smartest ones around and that nobody else had figured this out. But it turns out Databricks, Neon, and several others have as well.<p>The idea behind a *Bottomless File System* is really cool, and it works very well for us. Essentially, as described here:<p>- There is a *page server*\n- A *Linux file system* split into chunks (let&#x27;s call them chunks instead of pages)\n- A *cache on NVMe*\n- And of course, *object storage*, where everything is asynchronously synchronized<p>It works quite well, though it has its downsides.<p>One clear advantage is that NVMe drives have become expensive lately, while object storage remains cheap \u2014 so the benefits are undeniable. That said, latency is also a factor.<p>On top of that, uplink costs are rising. To run an object storage-backed file system, you need a very strong uplink with consistent speed \u2014 1 Gbps is simply not enough. Ideally, you want *5 to 10 Gbps*, depending on the load.<p>We spend a lot of time optimizing and experimenting with different hosting providers \u2014 specifically bare metal hardware. The main challenges are:<p>- *Slow disks*\n- *Slow uplink*\n- And as it turns out, *object storage can be unreliable* \u2014 unless you&#x27;re using S3<p>But AWS hardware is expensive, so nothing in life is ever that simple.","title":null,"type":"comment","url":null},{"author":"lmeyerov","children":[],"created_at":"2026-07-04T20:30:45.000Z","created_at_i":1783197045,"id":48788750,"options":[],"parent_id":48745855,"points":null,"story_id":48745855,"text":"I have to wonder: What&#x27;s the open protocol - some sort of LTAP read&#x2F;write path - for compute engines to target LTAP &#x2F; lakebases? Sort of like how iceberg &gt; deltalake, except now one layer up (OLTP+OLAP).<p>LTAP &#x2F; lakebase poses an interesting gap we have been tracking ever since iceberg as we build gfql (the first oss fully-vectorized property graph compute engine with CPU+GPU targets): There&#x27;s a natural desire to support both OLAP + OLTP modes for new engines, but also a gap for the cloud-native storage tier we don&#x27;t want to own.<p>Iceberg etc were exciting as introducing more write-friendly standards-based OLAP backends better than just S3, eg, gives atomicity, and via iceberg, with open governance for code+protocol. LTAP introduces the pattern we can target in theory for OLTP+OLAP backends... but in practice, via a proprietary manner.  A potential &#x27;open&#x27; form of writers is to support postgres for oltp path writes + spark writers (presumably arrow-flight-friendly) for olap path writes, but that is so hacky.","title":null,"type":"comment","url":null}],"created_at":"2026-07-01T12:48:56.000Z","created_at_i":1782910136,"id":48745855,"options":[],"parent_id":null,"points":181,"story_id":48745855,"text":null,"title":"Postgres data stored in Parquet on S3: LTAP architecture explained","type":"story","url":"https://www.databricks.com/blog/lakebase-ltap-rethinking-database-storage"}
