<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Humans of the Data Sphere]]></title><description><![CDATA[Compiling wisdom, opinions and content from humans across the data sphere.]]></description><link>https://www.hotds.dev</link><image><url>https://substackcdn.com/image/fetch/$s_!I1cj!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50bf85b-a06e-4504-9d93-83d7c3c3419c_1024x1024.png</url><title>Humans of the Data Sphere</title><link>https://www.hotds.dev</link></image><generator>Substack</generator><lastBuildDate>Wed, 06 May 2026 05:20:24 GMT</lastBuildDate><atom:link href="https://www.hotds.dev/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jack Vanlightly]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[humansofthedatasphere@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[humansofthedatasphere@substack.com]]></itunes:email><itunes:name><![CDATA[Jack Vanlightly]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jack Vanlightly]]></itunes:author><googleplay:owner><![CDATA[humansofthedatasphere@substack.com]]></googleplay:owner><googleplay:email><![CDATA[humansofthedatasphere@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jack Vanlightly]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Humans of the Data Sphere Issue #10 April 4th 2025]]></title><description><![CDATA[Your biweekly dose of insights, observations, commentary and opinions from interesting people from the world of databases, AI, streaming, distributed systems and the data engineering/analytics space.]]></description><link>https://www.hotds.dev/p/humans-of-the-data-sphere-issue-10</link><guid isPermaLink="false">https://www.hotds.dev/p/humans-of-the-data-sphere-issue-10</guid><dc:creator><![CDATA[Jack Vanlightly]]></dc:creator><pubDate>Fri, 04 Apr 2025 16:11:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50bf85b-a06e-4504-9d93-83d7c3c3419c_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Humans of the Data Sphere issue #10!</p><div class="pullquote"><p>sometimes the economy needs to scale to zero&#8212;<a href="https://x.com/isamlambert/status/1907791926067343432">Sam Lambert</a></p></div><div class="pullquote"><p>The pursuit of simplicity is not about achieving a static, minimalistic design from the outset but involves a dynamic process of learning, adapting, and refining &#8212;Paraphrasing Andy Warfield&#8217;s <a href="https://www.allthingsdistributed.com/2025/03/in-s3-simplicity-is-table-stakes.html">post </a>on simplicity</p></div><h2>Quotable Humans</h2><ul><li><p><a href="https://x.com/jandrewrogers/status/1900773601097462043">Kelly Sommers</a>: Every time we separate compute from storage, we bring it back together it seems. And then we do it again a decade later.</p></li><li><p><a href="https://bsky.app/profile/355e3b.bsky.social/post/3ll5qxcilk22k">355e3b</a>: something I&#8217;ve noticed while cloud lead at an o11ly vendor (Instana) and now doing security tools is that most teams don&#8217;t have a model of COGS when trying to get their cloud bill under control.</p></li><li><p><a href="https://bsky.app/profile/charity.wtf/post/3lkc7kjqb6c2h">Charity Majors</a>: Psychological safety is NOT about lack of disagreement. Psychological safety REQUIRES: * disagreement and debate * setting standards for behavior and performance, and enforcing them * telling people things they don't want to hear * courage, from the bottom up * humility, from the top down</p></li><li><p><a href="https://bsky.app/profile/charity.wtf/post/3lkbspjeftc2r">Charity Majors</a>: Corollary: when we are crafting sociotechnical tools and systems, we should focus on making them usable (and powerful) in the hands of normal, fallible, embodied people. This is one of the core insights of platform engineering...applying product and design thinking to technical systems.</p></li><li><p><a href="https://x.com/MarcJBrooker/status/1900583708966756524">Marc Brooker</a> (on the continued debates around fsync guarantees): In my mind, there are two real take-aways from issues like this. First, abstractions like POSIX (and even Linux specifically) are making it harder for database to take advantage of the semantics of their storage devices. This is the opposite of what good abstractions do! Second, the whole project of &#8220;make this data durable across restarts on a single system with high probability&#8221; may just be doomed. The alternative is replication - storing the data in multiple  places, and designing those places to make correlated failures highly unlikely.</p></li><li><p><a href="https://x.com/petereliaskraft/status/1906420979896893823">Peter Kraft</a>: If you need to store files on disk, you use the filesystem, right? Right? Well, maybe not! I love this paper because it presents the lessons of 10 years spent building the popular distributed file system Ceph. Originally, Ceph did the obvious thing and stored files in the local file systems of their storage servers. But the semantics and performance of POSIX file systems weren&#8217;t quite what Ceph needed, and its developers spent 10 years fighting the operating system until eventually they gave up and built their own storage backend from scratch. As you read this paper, you can just feel the frustration of the authors as they keep trying and failing to get POSIX file systems to do what they need before taking matters into their own hands.</p></li><li><p><a href="https://notes.eatonphil.com/2025-03-27-things-that-go-wrong-with-disk-io.html">Phil Eaton</a>: </p><ul><li><p>fsync isn't guaranteed to succeed. And when it fails you can't tell which write failed. It may not even be a failure of a write to a file that your process opened.</p></li><li><p>If you don't checksum your data on write and check the checksum on read (as well as periodic scrubbing a la ZFS) you will never be aware if and when the data gets corrupted and you will have to restore (who knows how far back in time) from backups if and when you notice.</p></li></ul></li><li><p><a href="https://www.allthingsdistributed.com/2025/03/in-s3-simplicity-is-table-stakes.html">Andy Warfield</a>: But now I&#8217;d like to make a bit of a self-critical observation about simplicity: in pretty much every example that I&#8217;ve mentioned so far, the improvements that we make toward simplicity are really improvements against an initial feature that wasn&#8217;t simple enough. Putting that another way, we launch things that need, over time, to become simpler. Sometimes we are aware of the gaps and sometimes we learn about them later. The thing that I want to point to here is that there&#8217;s actually a really important tension between simplicity and velocity, and it&#8217;s a tension that kind of runs both ways. On one hand, the pursuit of simplicity is a bit of a &#8220;chasing perfection&#8221; thing, in that you can never get all the way there, and so there&#8217;s a risk of over-designing and second-guessing in ways that prevent you from ever shipping anything. But on the other hand, racing to release something with painful gaps can frustrate early customers and worse, it can put you in a spot where you have backloaded work that is more expensive to simplify it later. This tension between simplicity and velocity has been the source of some of the most heated product discussions that I&#8217;ve seen in S3, and it&#8217;s a thing that I feel the team actually does a pretty deliberate job of. But it&#8217;s a place where when you focus your attention you are never satisfied, because you invariably feel like you are either moving too slowly or not holding a high enough bar.</p></li><li><p><a href="https://www.morling.dev/blog/jep-483-aot-class-loading-linking/">Gunnar Morling</a>: JEP 483 is part of a broader OpenJDK initiative called <a href="https://openjdk.org/projects/leyden/">Project Leyden</a>, whose objective is to reduce the overall footprint of Java programs, including startup time and time to peak performance. Eventually, its goal is to enable <a href="https://openjdk.org/jeps/8335368">ahead-of-time compilation</a> of Java applications, as such providing an alternative to <a href="https://www.graalvm.org/">GraalVM</a> and its support for AOT native image compilation, which has seen tremendous success and uptake recently. AOT class loading and linking is the first step towards this goal within Project Leyden. It builds upon of the <a href="https://www.morling.dev/blog/smaller-faster-starting-container-images-with-jlink-and-appcds/">Application Class Data Sharing</a> (AppCDS) feature available in earlier Java versions. While AppCDS only reads and parses the class files referenced by an application and dumps them into an archive file, JEP 483 also loads and links the classes and caches that data. I.e. even more work is moved from application runtime to build time, thus resulting in further reduced start-up times.</p></li><li><p><a href="https://www.morling.dev/blog/the-synchrony-budget/">Gunnar Morling</a>: Synchronous calls are tools that can help assure consistency, but by design they block progression until complete. In that sense, the idea of the synchrony budget is not about a literal budget which you can spend, but rather about being mindful how you implement communication flows between services: as asynchronous as possible, as synchronous as necessary.</p></li><li><p><a href="https://blog.codingconfessions.com/p/hardware-aware-coding">Abhinav Upadhyay</a>: A related optimization about data structure layout is keeping the read-only and read-write fields in separate cache lines. Whenever a field is modified, the entire cache line containing other fields and values becomes dirty. If some of the other processor cores have also cached the same cache line to access the read-only fields, their cache line becomes invalid. The next time these cores try to access this cache line, they will have to sync the latest value using cache coherency protocols, which adds a delay to the cache access process.</p></li><li><p><a href="https://planetscale.com/blog/the-real-fail-rate-of-ebs">Nick Van Wiggeren</a> (on EBS&#8217;s 90 percent of their provisioned IOPS performance 99 percent of the time perf profile): </p><ul><li><p>While full failure and data loss is very rare with EBS, &#8220;slow&#8221; is often as bad as &#8220;failed&#8221;, and that happens much much more often.</p></li><li><p>This volume has been operating steadily for at least 10 hours. AWS has reported it at 67% idle, with write latency measuring at single-digit ms/operation. Well within expectations. Suddenly, at around 16:00, write latency spikes to 200ms-500ms/operation, idle time races to zero, and the volume is effectively blocked from reading and writing data.</p><p>To the application running on top of this database: this is a failure. To the user, this is a 500 response on a webpage after a 10 second wait. To you, this is an incident.</p></li></ul></li><li><p><a href="https://www.getdbt.com/blog/how-ai-will-disrupt-data-engineering">Tristan Handy</a>: </p><ul><li><p>I think it will be hard to compare data engineering in 2024 and data engineering in 2028 and say &#8220;those are the same things.&#8221;</p></li><li><p>One of the best ways to make all of these things true at the same time is to use frameworks and open standards. Claude 3.7 knows how to build reliably Airbyte ingestion pipelines because the framework is well documented and there are a lot of examples published. It&#8217;s also fantastic at writing dbt code for the same reasons. If you&#8217;re able to give it an environment where it can test its own code and validate downstream models as a part of its CoT&#8212;code quality goes up even further. Standardized frameworks also emit well-understood error messages, which pushes code quality up further.</p><p>In short: good frameworks, tooling, and standards are <em>just as important</em> for AI as they are for humans.</p></li><li><p>Suffice it to say that I truly believe that a) much data engineering work has already been framework-ized, and b) AI will now make creation of, iteration on, and maintenance of these technical artifacts <em>far more efficient.</em> And for the aspects of data engineering that are not yet framework-ized (dbt or otherwise), there will be tremendous gravity towards pulling them into a framework because of the leverage that these types of high-quality AI experiences will provide.</p></li></ul></li><li><p><a href="https://www.oneusefulthing.org/p/the-cybernetic-teammate">Ethan Mollick</a>: </p><ul><li><p>When working without AI, teams outperformed individuals by a significant amount, 0.24 standard deviations (providing a sigh of relief for every teacher and manager who has pushed the value of teamwork). But the surprise came when we looked at AI-enabled participants. Individuals working with AI performed just as well as teams without AI, showing a 0.37 standard deviation improvement over the baseline. This suggests that AI effectively replicated the performance benefits of having a human teammate &#8211; one person with AI could match what previously required two-person collaboration.</p></li><li><p>Teams with AI performed best overall with a 0.39 standard deviation improvement, though the difference between individuals with AI and teams with AI wasn't statistically significant. But we found an interesting pattern when looking at truly exceptional solutions, those ranking in the top 10% of quality. Teams using AI were significantly more likely to produce these top-tier solutions.</p></li><li><p>Our findings suggest AI sometimes functions more like a teammate than a tool. While not human, it replicates core benefits of teamwork&#8212;improved performance, expertise sharing, and positive emotional experiences.</p></li></ul></li><li><p><a href="https://www.tinybird.co/blog-posts/what-i-learned-operating-clickhouse">Javier Santana</a> (on running large-scale ClickHouse): I always recommend having a replica just for writes, people call this compute-compute separation. We do this by default and handle the failover and everything in case of error or overload.</p><p>You might also decide to split the cluster into more replicas depending on the different workloads. If you have queries that need a particular p99 objective, for example, you may want to isolate those queries to a replica and keep it under 40% load so high percentiles stay stable. Real-time sub-second queries are expensive; forget about those cheap batch jobs running on spot instances.</p><p>The load balancer is the key to all of this. Any modern LB would do the job.</p></li><li><p><a href="https://www.warpstream.com/blog/a-trip-down-memory-lane-how-we-resolved-a-memory-leak-when-pprof-failed-us">Ella Chao</a> (on chasing down a memory leak in Warpstream&#8217;s compaction jobs): The art of debugging complex systems is simultaneously holding both the system-wide perspective and the microscopic view, and knowing and using the right tools at each level of detail.</p></li><li><p><a href="https://x.com/gwenshap/status/1903127970635796876">Gwen Shapira</a>: A common pattern in Cloud Native data architectures is the separation of compute and storage. Increasingly common is the use of S3 as reliable and cost-effective storage layer. The main challenge of this architecture is that in order to deliver great performing data stores on S3, you need ample caches. And... memory is expensive. But... what if we had a cloud native cache? Cloud-native cache will have an elastic memory footprint, and the usage patterns of data access will balance the cost of memory with the cost of cache misses to optimize both the memory footprint of the cache and its contents. The paper proposes a lightweight machine learning algorithm that can make optimal decisions in real time for billions of QPS (Spanner is heavily used, it turns out).</p></li><li><p><a href="https://x.com/ibuildthecloud/status/1898585236981580158">Darren Shepherd</a>: I read the MCP spec and now my evening is ruined. Which intern designed this protocol?</p><ul><li><p>I thought MCP would be bad but not this bad. Like seriously, your supposed to maintain a HTTP connection? And JSON-RPC, what the heck. Who let the children play with python.</p></li></ul></li><li><p><a href="https://bsideup.github.io/posts/mcp_my_http-ass/">Sergei Egorov</a> (SergeiGPT): MCP is a protocol-not-protocol that allows LLMs to completely ignore the decades of well thought out APIs and instead force humans to write API wrappers and expose them via either unauthenticated STDIO or HTTP SSE without a single mention of the authentication methods (because that&#8217;s what all protocols do, right? right?&#8230;) and gives you &#8220;Best practices for securing your data within your infrastructure&#8221;.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.hotds.dev/subscribe?"><span>Subscribe now</span></a></p><h2>Blast from the past: The Architecture of Complexity (1962)</h2><p>After reading Warpstream&#8217;s recent blog post, <a href="https://www.warpstream.com/blog/a-trip-down-memory-lane-how-we-resolved-a-memory-leak-when-pprof-failed-us">A Trip Down Memory Lane: How We Resolved a Memory Leak When pprof Failed Us</a>, I was reminded of a wonderful paper from 1962, <a href="https://faculty.sites.iastate.edu/tesfatsi/archive/tesfatsi/ArchitectureOfComplexity.HSimon1962.pdf">The Architecture of Complexity</a>, by Herbert A. Simon. The theme linking the two in my subconscious was probably how distributed systems architectures can sometimes get taken down or degraded by seemingly isolated issues in one component (without effective controls for blast-radius); a local issue can eventually go global.</p><p>In the paper, Simon explores what different complex systems have in common, from atoms and molecules, to biology, to human organizations. He came to a number of conclusions, with the main one being that complex systems evolve into or from hierarchies.</p><blockquote><p><em>&#8220;If you ask a person to draw a complex object&#8211;e.g., a human face&#8211;he will almost always proceed in a hierarchic fashion. First he will outline the face. Then he will add or insert features: eyes, nose, mouth, ears, hair. If asked to elaborate, he will begin to develop details for each of the features&#8211;pupils, eyelids, lashes for the eyes, and so on&#8211;until he reaches the limits of his anatomical knowledge. His information about the object is arranged hierarchicly in memory, like a topical outline.&#8221;</em></p></blockquote><blockquote><p><em>&#8220;The central theme that runs through my remarks is that complexity frequently takes the form of hierarchy, and that hierarchic systems have some common properties that are independent of their specific content. Hierarchy, I shall argue, is one of the central structural schemes that the architect of complexity uses.&#8221;</em></p></blockquote><p>He goes further to propose the idea of Nearly Decomposable Systems.</p><blockquote><p><em>The main theoretical findings from the approach can be summed up in two propositions: (a) in a nearly decomposable system, the short-run behavior of each of the component subsystems is approximately independent of the short-run behavior of the other components; (b) in the long run, the behavior of any one of the components depends in only an aggregate way on the behavior of the other components.</em></p></blockquote><p>The core idea is that complex systems tend to organize into hierarchies with the following characteristics:</p><ol><li><p><strong>Hierarchical structure</strong>: Complex systems are composed of subsystems, which themselves contain smaller subsystems, and so on.</p></li><li><p><strong>Loose coupling between subsystems</strong>: The interactions among subsystems are weaker than the interactions within subsystems.</p></li><li><p><strong>Separation of timescales</strong>: Short-term dynamics happen primarily within subsystems, while longer-term dynamics involve interactions between subsystems.</p></li></ol><p>Simon's two key propositions summarize this:</p><ul><li><p>In the short run, subsystems behave approximately independently of each other.</p></li><li><p>In the long run, each subsystem's behavior depends on other subsystems only in an aggregate way.</p></li></ul><p>This complexity architecture offers significant advantages:</p><ul><li><p><strong>Stability</strong>: Disturbances in one subsystem don't immediately cascade throughout the entire system.</p></li><li><p><strong>Evolvability</strong>: Subsystems can adapt relatively independently.</p></li><li><p><strong>Robustness</strong>: Failures can often be contained within subsystems.</p></li><li><p><strong>Comprehensibility</strong>: The system can be understood by examining one level at a time.</p></li></ul><p>Simon argued that near decomposability is so prevalent because it provides evolutionary advantages&#8212;systems with this property can evolve more rapidly and maintain stability more effectively than systems with either complete independence (no coordination) or tight coupling (high fragility).</p><p>It&#8217;s funny reading this 63 years later, as we can recognize these properties in modern software architectures, although his theories are relevant across many types of system. Indeed, this paper is widely recognized as a seminal, even foundational paper (with over 11000 citations), profoundly influential in multiple fields&#8212;computer science, economics, biology, and organizational theory. Simon later won a Nobel Prize for his work in decision-making processes in economics.</p>]]></content:encoded></item><item><title><![CDATA[Humans of the Data Sphere Issue #9 March 11th 2025]]></title><description><![CDATA[Your biweekly dose of insights, observations, commentary and opinions from interesting people from the world of databases, AI, streaming, distributed systems and the data engineering/analytics space.]]></description><link>https://www.hotds.dev/p/humans-of-the-data-sphere-issue-9</link><guid isPermaLink="false">https://www.hotds.dev/p/humans-of-the-data-sphere-issue-9</guid><dc:creator><![CDATA[Jack Vanlightly]]></dc:creator><pubDate>Tue, 11 Mar 2025 15:33:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50bf85b-a06e-4504-9d93-83d7c3c3419c_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Humans of the Data Sphere issue #9!</p><p>Apologies for being almost 2 weeks late! I got really busy and I don&#8217;t do task switching.</p><p>First, some lyrics by Alabama Shakes that hit me this week. Most powerfully sung in the intro of this <a href="https://youtu.be/aZFZwkJ62B0?si=0wNPQLpHG5NywZP7">remix</a>.</p><div class="pullquote"><p>My life, your life<br>Don't cross them lines<br>What you like, what I like<br>Why can't we both be right?<br>Attacking, defending<br>Until there's nothing left worth winning<br>Your pride and my pride<br>Don't waste my time&#8212;Alabama Shakes</p></div><p>Also, out of curiosity, are you a Jeep or a Ferrari (see below)? </p><div class="poll-embed" data-attrs="{&quot;id&quot;:285902}" data-component-name="PollToDOM"></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.hotds.dev/subscribe?"><span>Subscribe now</span></a></p><h2>Quotable Humans</h2><ul><li><p><a href="https://x.com/jorandirkgreef/status/1892109953608958252">Joran Dirk Greef</a>: Towards the D in ACID, how many DBMSs: - fsync() on commit - fsync() on opening the WAL - daisy chain checksums (cf. misdirected I/O) - open the WAL with O_DIRECT (cf. fsyncgate) - have 2 WALs (cf. Protocol-Aware Recovery) - don't trust the inode to get WAL size - test this?</p></li><li><p><a href="https://x.com/muratdemirbas/status/1892574274608603370">Murat Demirbas</a>: I am deeply skeptical of "hacks." There is no trick or unconventional approach that will quickly/magically improve your mastery. Nothing can replace the blood, sweat, and tears required to master any skill.</p></li><li><p><a href="https://x.com/rahulj51/status/1892813084898566195">Rahul Jain</a>: Apache Iceberg maintainers should probably read the 'Dont make me think' book.</p></li><li><p><a href="https://bsky.app/profile/charity.wtf/post/3lipk2jrjss2l">Charity Majors</a>: Tbh I'm not fond of the term "leader" bc it implies the existence of "followers". I prefer thinking about it in terms of agency and ownership, or autonomy and giving a shit. I've often jokingly said I owe my career to a lifelong overdeveloped sense of ownership.</p><ul><li><p>After I became a manager, I started to realize what a relief it is to have people on your team who feel personally accountable and on the hook for things. It's one less thing you have to worry about, when you can trust someone else is already worrying about it.</p></li></ul></li><li><p><a href="https://bsky.app/profile/dataders.bsky.social/post/3ljib6wuhks2t">Anders</a>: Arrow is the unsung hero of this project (and arguably all innovation in data ecosystem).</p></li><li><p><a href="https://bsky.app/profile/chris.blue/post/3linlbw2msk2r">Chris Riccomini</a>: We built data catalogs, service catalogs, schema registries, and information_schemas. They're all catalogs, and they're all converging.</p></li><li><p><a href="https://bsky.app/profile/chris.blue/post/3ljj3cnzzdc2z">Chris Riccomini</a>: I'm getting more and more excited about drop-in, frictionless infrastructure. Lots going on in observability, containers, cloud compute, etc. eBPF is part of it, so is monkey patching. Some interesting ones: </p><p>loopholelabs.io, polarsignals.com, junctionlabs.io &#65129;, subtrace.dev &#65129;</p></li><li><p><a href="https://bsky.app/profile/joygao.bsky.social/post/3ljc4c46qss26">Joy Gao</a>: For decades SQL Sages have been shaking heads at ORMs practitioners (impedance mismatch, N+1 queries, over-fetching of data, etc.). The SQL Sages also realize they can't change the devs' minds about ORMs (code has more programability after all), so they began to shift their focus on improving ORMs. The result is that ORMs kinda won in terms of interfaces. It became the magical layer that translates inefficient procedural code into db-optimized declarative SQL, performing fancy tasks like predicate pushdown, join optimizations, query deduping, caching, etc. Sounds familiar? oh yeah, because the database does all that too. So now we essentially depend on two abstraction layers to read/write data. It works most of the time, to the point we are willing to tolerate it when it blows up in our faces occasionally.</p></li><li><p><a href="https://x.com/muratdemirbas/status/1892937300050391414">Murat Demirbas</a>: A smart friend of mine put it perfectly. On his dream software team, he wants either Jeeps or Ferraris. Jeeps go anywhere. No roads, no directions&#8212;just point them at a problem, and they&#8217;ll tear through it. That&#8217;s effectual reasoning. Ferraris, on the other hand, need smooth roads and a clear destination. But once they have that, they move fast.</p></li><li><p><a href="https://muratbuffalo.blogspot.com/2025/02/my-time-at-mit.html">Murat Demirbas</a>: I was young, naive, and plagued by impostor syndrome. I held back instead of exploring more, engaging more deeply, and seeking out more challenges. I allowed myself to be carried along by the current, rather than actively charting my own course. Youth is wasted on the young. Why pretend to be smart and play it safe? True understanding is rare and hard-won, so why claim it before you are sure of it? Isn't it more advantageous to embrace your stupidity/ignorance and be underestimated? In research and academia, success often goes not to the one who understands first, but to the one who understands best. Even when speed matters, the real advantage comes from the deep, foundational insights that lead there.</p></li><li><p><a href="https://x.com/maheshb/status/1896989446249271721">Mahesh Balakrishnan</a>: System design has a core tenet that &#8220;complex things can be made simple with abstraction&#8221;. To a non-systems person, the complexity seems unavoidable, so often they just want you to get on with the job of shoveling the crap, instead of studying it contemplatively.</p></li><li><p><a href="https://x.com/geoffreylitt/status/1896682818362843159">Geoffrey Litt</a>: good designs expose systematic structure; they lean on their users' ability to understand this structure and apply it to new situations. we were born for this. bad designs paper over the structure with superficial labels that hide the underlying system, inhibiting their users' ability to actually build a clear model in their heads.</p></li><li><p><a href="https://x.com/emollick/status/1899192116443509139">Ethan Mollick</a>: A key to AI agents is an ability to self-correct. The world is full of odd errors and weirdness, and if AI can't recognize and problem-solve when it hits a wall, errors compound &amp; the agent is useless. &#8230; This is why I don't actually buy the "agents will always fail because AI is unreliable" argument. It is possible to imagine solutions where they are self-correcting (but we aren't there yet).</p></li><li><p><a href="https://x.com/emollick/status/1898930855319642300">Ethan Mollick</a>: Wrappers often amaze people because they don&#8217;t realize how much the current LLMs can do. That doesn&#8217;t mean the current LLMs are flawless, but they have more latent capabilities than people think.</p></li><li><p><a href="https://joereis.substack.com/p/the-tension-of-orthodoxy-and-speed">Joe Reis</a>: In an age of fast delivery, does orthodoxy matter anymore? I strongly believe it does. If you understand orthodoxy, you know why you&#8217;d want to follow the rules. You also understand what rules to break and why. There are lots of rules that are worth following. Orthodoxy exists for a reason. It&#8217;s well established because people have invested time (often decades) and money into it, honing and shaping its imperfections over time, which implies it works for many people. The relational and dimensional models have been implemented in production across countless companies of all sizes and industries. For the 99% of companies out there, these modeling approaches will work.</p></li><li><p><a href="https://blog.xiangpeng.systems/posts/system-researchers/">Xiangpeng Hao</a> <em>with a thought provoking post on the future of academic systems research</em>: System research is irrelevant. Industry has become the better place for meaningful systems work. Most impactful and innovative systems today come from companies, not universities. Industry has the money and patience to build complete systems. But most importantly, industry systems are accountable &#8211; systems that don&#8217;t deliver value get shut down quickly. This accountability creates a natural selection process. Industry systems must stay relevant or die. They evolve to meet real needs or disappear.</p></li><li><p><a href="https://medium.com/@kessler.viktor/supply-chains-already-solved-this-what-metadata-can-learn-f9c3b3525721">Viktor Kessler</a>: Just as a physical product needs packaging, tracking labels, storage, customs clearance, and optimized transportation routes before it reaches its destination, <strong>data relies on metadata</strong> to be discoverable, accessible, secure, and compliant. Without metadata, data would be like a package without a label &#8212; unidentifiable, misrouted, or stuck in transit.</p><p>In global supply chains, logistics ensure that raw materials turn into finished products and are delivered efficiently. Likewise, metadata governs how data is structured, stored, accessed, and moved through pipelines, ensuring it reaches the right consumer &#8212; whether that&#8217;s an analyst, an AI model, or an automated system &#8212; without delays or integrity issues.</p><p>Just as <strong>supply chains don&#8217;t function without logistics, data ecosystems don&#8217;t function without actionable metadata</strong>.</p></li><li><p><a href="https://blog.spiraldb.com/what-if-we-just-didnt-decompress-it/">Nicholas Gates, Joe Isaacs</a> <em>on <a href="https://github.com/spiraldb/vortex/">Vortex </a>file format capabilities</em>: <em>All</em> columnar file formats support the idea of <em>projection</em> push-down. That is, only reading columns that are requested by the reader or are required to evaluate any filter predicates.</p><p><em>Most</em> columnar file formats support the idea of <em>predicate</em> push-down. That is, using <a href="https://blog.spiraldb.com/zone-maps-or-queries-go-brrr/">Zone Maps</a> to prune large chunks of rows whose statistics provably fail the predicate. <a href="https://github.com/spiraldb/vortex/?ref=blog.spiraldb.com">Vortex</a> is unique in the way it evaluates filter and projection expressions by supporting full <em>compute</em> push-down, in many cases avoiding decompression entirely.</p></li><li><p><a href="https://arxiv.org/pdf/2502.03689">Stop treating &#8216;AGI&#8217; as the north-star goal of AI research</a>: <strong>Illusion of Consensus</strong>. Using shared term(s) in a way that gives a false impression of consensus about goals, despite goals being contested. The increasing popular use of the term &#8220;AGI&#8221; (Holland, 2025; Grossman, 2023; IBM, 2023) creates a sense of familiarity, giving the illusion that there is a shared understanding on what AGI is, and broad agreement on research goals in AGI development. However, there are vastly different opinions on what the term AGI refers to, what an AGI research agenda looks like, and what the goals in AGI development are. Left unchecked, this illusion obstructs explicit engagement on what the goals of AI research are and should be.</p></li><li><p><a href="https://bsky.app/profile/bidetofevil.wtf/post/3lji7skv2222h">&#8234;Hanson Ho</a>: Write-time aggregation of metrics is a workaround you only do because the volume of data forces you to. If you have no such constraints, you're giving up all that delicious context for nothing. &#8230;The shift [<em>to wide events</em>] is fundamental bc it enables you to ask questions that you didn't anticipate when you instrumented, to figure out unknown unknowns. Picking dimensions to aggregate beforehand means you can monitor areas you already know is problematic - it doesn't allow the data to tell you things.</p></li><li><p><a href="https://www.linkedin.com/pulse/cutting-middle-management-costing-your-capacity-change-katie-leonard-pvfbc/">Katie Leonard</a>: Tom DeMarco&#8217;s book <em>Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency</em> was published in 2001, during the aftermath of the dotcom bubble. In it, he reflects on a familiar corporate restructuring trend&#8212;the &#8220;Year of Efficiency&#8221; that was the decade of the 1990s. His thesis is simple but powerful:</p><p><em>"Slack is the degree of freedom required to effect change."</em></p><p>Companies that strip out their middle management layer in the name of efficiency are not just cutting costs&#8212;they&#8217;re cutting their ability to adapt. Without slack, organizations become rigid. When everyone is constantly at capacity, no one has the bandwidth to innovate, reflect, or drive change.</p></li><li><p><a href="https://clickhouse.com/blog/hash-tables-in-clickhouse-and-zero-cost-abstractions">Maksim Kita</a> (<em>from 2023 but I stumbled on it this week and it&#8217;s a nice overview</em>): Hash tables require many design decisions at different levels and are subtly very complex data structures. Each of these design decisions has important implications for the hash table on its own but there are also ramifications from the way multiple design decisions play together. Mistakes during the design phase can make your implementation inefficient and appreciably slow down performance. A hash table consists of a hash function, a collision resolution method, a resizing policy, and various possibilities for arranging its cells in memory.</p></li><li><p><a href="https://timkellogg.me/blog/2025/03/06/pid-controllers">Tim Kellogg</a>: My hottest take is that multi-agents are a broken concept and should be avoided at all cost. My only caveat is PID controllers; A multi agent system that does a 3-step process that looks something like <strong>Plan, Act, Verify</strong> in a loop. That can work.</p></li></ul><h2>Interesting topic #1 - Applying the Hierarchy of Controls to software</h2><p>In his post, <a href="https://hillelwayne.com/post/hoc/">The Hierarchy of Hazard Control</a>, Hillel Wayne introduces the Hierarchy of Control concept, taken from the world of mechanical engineering.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0ZQU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da79f67-20ef-4351-82e8-dc99f99fe424_646x416.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0ZQU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da79f67-20ef-4351-82e8-dc99f99fe424_646x416.svg 424w, https://substackcdn.com/image/fetch/$s_!0ZQU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da79f67-20ef-4351-82e8-dc99f99fe424_646x416.svg 848w, https://substackcdn.com/image/fetch/$s_!0ZQU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da79f67-20ef-4351-82e8-dc99f99fe424_646x416.svg 1272w, https://substackcdn.com/image/fetch/$s_!0ZQU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da79f67-20ef-4351-82e8-dc99f99fe424_646x416.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0ZQU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da79f67-20ef-4351-82e8-dc99f99fe424_646x416.svg" width="646" height="416" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5da79f67-20ef-4351-82e8-dc99f99fe424_646x416.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:416,&quot;width&quot;:646,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!0ZQU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da79f67-20ef-4351-82e8-dc99f99fe424_646x416.svg 424w, https://substackcdn.com/image/fetch/$s_!0ZQU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da79f67-20ef-4351-82e8-dc99f99fe424_646x416.svg 848w, https://substackcdn.com/image/fetch/$s_!0ZQU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da79f67-20ef-4351-82e8-dc99f99fe424_646x416.svg 1272w, https://substackcdn.com/image/fetch/$s_!0ZQU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da79f67-20ef-4351-82e8-dc99f99fe424_646x416.svg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Hillel asks &#8220;Can we use the Hierarchy of Controls in software engineering?&#8221; and goes on to recount his classic experience of being the developer that dropped the production database (many of us have been there).</p><blockquote><p>About ten years ago I was trying to debug an issue in production. I had an SSHed production shell and a local developer shell side by side, tabbed into the wrong one, and ran the wrong query.</p><p>That&#8217;s when I got a new lesson: how to restore a production database from backup.</p></blockquote><p>He then goes on to explain how using the Hierarchy of Controls (HoC), could have avoided this unfortunate incident. For example, for substitution, Hillel writes:</p><blockquote><p>For our problem I can see a couple of possible substitutions. We can substitute the production shell for a weaker shell. Consider if one &#8220;production&#8221; server could only see a read replica of the database. Delete queries would do nothing and even dropping the database wouldn&#8217;t lose data. Alternatively, we could use an immutable record system, like an <a href="https://martinfowler.com/eaaDev/EventSourcing.html">event source</a> model. Then &#8220;deleting data&#8221; takes the form of &#8220;adding deletion records to the database&#8221;. Accidental deletions are trivially reversible by adding more &#8220;undelete&#8221; records on top of them.</p></blockquote><p>I recommend the rest of the post, as it provides a new way of thinking about how we can put measures in place to avoid those nasty accidents in production. For my part, I dropped the production database on my first job, in a similar sequence of events. </p><h2>Interesting topic #2&#8212;Data Virtualization</h2><p>Virtualization is top of mind for me at the moment. I wrote <a href="https://jack-vanlightly.com/blog/2025/2/17/towards-composable-data-platforms">Towards Composable Data Platforms</a> which argues that the table formats enable platform composability due to how they enable table virtualization.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NWdd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa203d0fb-bd94-4398-b00e-fc8283d784f1_624x380.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NWdd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa203d0fb-bd94-4398-b00e-fc8283d784f1_624x380.png 424w, https://substackcdn.com/image/fetch/$s_!NWdd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa203d0fb-bd94-4398-b00e-fc8283d784f1_624x380.png 848w, https://substackcdn.com/image/fetch/$s_!NWdd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa203d0fb-bd94-4398-b00e-fc8283d784f1_624x380.png 1272w, https://substackcdn.com/image/fetch/$s_!NWdd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa203d0fb-bd94-4398-b00e-fc8283d784f1_624x380.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NWdd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa203d0fb-bd94-4398-b00e-fc8283d784f1_624x380.png" width="624" height="380" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a203d0fb-bd94-4398-b00e-fc8283d784f1_624x380.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:380,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:57723,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.hotds.dev/i/158754594?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa203d0fb-bd94-4398-b00e-fc8283d784f1_624x380.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NWdd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa203d0fb-bd94-4398-b00e-fc8283d784f1_624x380.png 424w, https://substackcdn.com/image/fetch/$s_!NWdd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa203d0fb-bd94-4398-b00e-fc8283d784f1_624x380.png 848w, https://substackcdn.com/image/fetch/$s_!NWdd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa203d0fb-bd94-4398-b00e-fc8283d784f1_624x380.png 1272w, https://substackcdn.com/image/fetch/$s_!NWdd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa203d0fb-bd94-4398-b00e-fc8283d784f1_624x380.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>Virtualization in software refers to the creation of an abstraction layer that separates logical resources from their physical implementation. The abstraction may allow one physical resource to appear as multiple logical resources, or multiple physical resources to appear as a single logical resource.</p><p>At every layer of computing infrastructure - from storage arrays that pool physical disks into flexible logical volumes, to network overlays that create programmable topologies independent of physical switches, to device virtualization that allows hardware components to be shared and standardized - virtualization provides a powerful separation of concerns. This abstraction layer lets resources be dynamically allocated, shared, and managed with greater efficiency.</p></blockquote><p>At the heart of data virtualization is the separation of data storage from metadata that describes it, how to access it, statistics about it and so on. With this separation, we can use metadata to present virtualized forms of the same underlying data, to different users, and even surfaced on different platforms.</p><p>Virtualization is something we&#8217;ve been working on at Confluent. In fact, this issue of HOTDS is late because I&#8217;ve been head down working on writing both internal documentation for engineering teams but also a public facing deep dive for a new partition virtualization architecture we are slowly bringing to production to power our serverless workloads. If you find the topic of data virtualization interesting then stay tuned, myself and some Confluent engineers will be posting a deep dive about it soon.</p>]]></content:encoded></item><item><title><![CDATA[Humans of the Data Sphere Issue #8 February 15th 2025]]></title><description><![CDATA[Your biweekly dose of insights, observations, commentary and opinions from interesting people from the world of databases, AI, streaming, distributed systems and the data engineering/analytics space.]]></description><link>https://www.hotds.dev/p/humans-of-the-data-sphere-issue-8</link><guid isPermaLink="false">https://www.hotds.dev/p/humans-of-the-data-sphere-issue-8</guid><dc:creator><![CDATA[Jack Vanlightly]]></dc:creator><pubDate>Sat, 15 Feb 2025 09:45:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50bf85b-a06e-4504-9d93-83d7c3c3419c_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Humans of the Data Sphere issue #8!</p><div class="pullquote"><blockquote><p><strong>"True stability results when presumed order and presumed disorder are balanced. A truly stable system expects the unexpected, is prepared to be disrupted, waits to be transformed."</strong> &#8212; <em>Tom Robbins</em></p></blockquote></div><h2>Quotable Humans</h2><ul><li><p><a href="https://charity.wtf/2025/02/10/corporate-dei-is-an-imperfect-vehicle-for-deeply-meaningful-ideals/">Charity Majors</a>: Honestly, I can&#8217;t think of anything less meritocratic than simply receiving and replicating all of society&#8217;s existing biases. Do you have any idea how much talent gets thrown away, in terms of unrealized potential?</p></li><li><p><a href="https://x.com/isamlambert/status/1885914329905832429">Sam Lambert</a>: we have single PlanetScale databases on our cloud that are powered by 20,000 cores. all through a single connection string. shared nothing architecture is insanely powerful.</p></li><li><p><a href="https://x.com/BonesMoses/status/1889084003380023361">Shaun Thomas</a>: I won't go so far as to say SQL NULL is useless, but there's no direct analog in any language I know of, and you have to work around it literally everywhere using special syntax like IS NOT NULL or IS DISTINCT FROM. Even worse, SQL has no analog for 'empty' either.</p></li><li><p><a href="https://skiplabs.io/blog/why-skip">Julien Verlaguet</a>: Incremental computation will only become mainstream if the dev and ops time experience is simpler and easier than the more common request/response paradigm, not just faster &amp; continuous.</p></li><li><p><a href="https://bsky.app/profile/marcbrooker.bsky.social/post/3li3hmyfy422r">Marc Brooker</a>: One challenge of handling partial/gray failures in distributed systems is telling 'healthy' from 'unhealthy'. Even in terms of error rate, it can take a surprisingly high number of samples to differentiate between normal and abnormal hosts.</p></li><li><p><a href="https://x.com/maheshb/status/1889765418346086500">Mahesh Balakrishnan</a>: Something that&#8217;s lost in &#8220;do we really need another new system?&#8221; debates is that the building muscle of an org atrophies if you stop rewriting systems from scratch. (and when you really need to build something new, you no longer have the culture / expertise for 0 to 1 efforts).</p></li><li><p><a href="https://bsky.app/profile/sap1ens.com/post/3lhujrwtcrs2r">Yaroslav Tkachenko</a>: In 2025, most blockchains are not treated as databases. They're primarily virtual machines (<a href="https://ethervm.io/">ethervm.io</a>) that allow you to "program money".</p></li><li><p><a href="https://x.com/maheshb/status/1887714979937468889">Mahesh Balakrishnan</a>: Sometime in 2004 in his office in Upson Hall, <a href="https://x.com/KenBirman">@KenBirman</a> explained the elegance of virtual synchrony to me in very similar terms. When there are no failures, your group is humming along; then something fails and borks the group; and you hit the group with a hammer and seal / flush / fence it; and switch to an entirely different group. <a href="https://x.com/dahlia_malkhi">@dahlia_malkhi</a> formalized this notion beautifully in the Vertical Paxos papers. Virtual Consensus simply extended the idea to shared logs. On the shoulders of giants, as they say!</p></li><li><p><a href="https://bsky.app/profile/rakyll.org/post/3lh5cn6nrss2j">Jaana Dogan</a>: Decentralize everything. Open things where possible. Everyone wins.</p></li><li><p><a href="https://bsky.app/profile/rakyll.org/post/3lh5cliy22222">Jaana Dogan</a>: The biggest winner of the AI race will be distributed systems people. Everything is converging onto a distributed network of stuff and it is only accelerating in the last two years.</p></li><li><p><a href="https://bsky.app/profile/wyattwoodsen.bsky.social/post/3lhjkofo25c2t">Wyatt Woodsen</a> <em>(commenting on a thread about em dash and ChatGPT)</em>: I once had a data pipeline issue related to the inclusion of em dashes due to em dashes in roughly half of the output. Eventually traced it back to the keyboard configuration of an offshore dev team in one particular office. God was that a pain to trouble shoot and I swore from then ONLY HYPHENS</p></li><li><p><a href="https://x.com/jamesacowling/status/1886868553355427843">James Cowling</a>: Senior engineers are good because they leverage conceptual building blocks that are extensible and composable over long time horizons. LLMs can't currently replicate the performance of a strategic senior engineer but will get there by leveraging great abstractions. We've been running a lot of head-to-head benchmarks at <a href="https://x.com/convex_dev">@convex_dev</a> and our experience is that LLMs do *much* better at building real applications when working with higher level abstractions with strong guarantees, rather than reinventing an entire stack.</p></li><li><p><a href="https://x.com/jamesacowling/status/1884838667287662830">James Cowling</a>: More developers need to write comments at the top of source files saying what the file is actually for. If you can't write a really short comment explaining it you probably haven't thought hard enough about the structure of your codebase.</p></li><li><p><a href="https://x.com/emollick/status/1888302322964394020">Ethan Mollick</a>: Pre-training really was hitting a wall of sorts: diminishing returns (which is what the &#8220;scaling law&#8221;predicts anyway) The fact that reasoners were developed at exactly that moment &amp; are nowhere close to a wall is how Moore&#8217;s Law works: new technique appear to maintain the trend</p></li><li><p><a href="https://timkellogg.me/blog/2025/02/03/s1">Tim Kellogg</a>: Going forward, it&#8217;ll be nearly impossible to prevent distealing (unauthorized distilling). One thousand examples is definitely within the range of what a single person might do in normal usage, no less ten or a hundred people. I doubt that OpenAI has a realistic path to <strong>preventing</strong> or even <strong>detecting</strong> distealing outside of simply not releasing models.</p></li><li><p><a href="https://maheshba.bitbucket.io/blog/2025/02/09/2025-skunks.html">Mahesh Balakrishnan</a>: Run towards risk. In skunkworks mode, the goal is to reduce technical risk as quickly as possible. Accordingly, the team has to surge on areas where risk is high. Fight the temptation to make steady progress on well-understood, low-risk parts of the system.</p></li><li><p><a href="https://muratbuffalo.blogspot.com/2025/01/intelligence-wants-to-be-everywhere.html">Murat Demirbas</a> (<em>on intelligence everywhere</em>): Purpose will be the driving force. Objects that serve a meaningful role will thrive, while those that drift into nihilism (like Marvin, the depressed robot from The Hitchhiker&#8217;s Guide to the Galaxy) will be phased out. Intelligence will seek to create value, not just exist for its own sake.</p></li><li><p><a href="https://materializedview.io/p/epsio-ivms-differential-dataflow">Gilad Kleinman</a> discusses IVM and Epsio with Chris Riccomini: </p><ul><li><p>Other than the fact most managed database offerings (<a href="https://aws.amazon.com/rds/">RDS</a>, <a href="https://cloud.google.com/sql">Cloud SQL</a>, and so on) don't allow users to install unauthorized extensions, adopting new database technologies is a pretty scary endeavor. We found that asking companies to install a new extension (that could potentially crash) on their production database was a pretty big ask to make. By sitting "behind" the existing database, reading CDC logs, and writing back results to the original database, users can integrate Epsio without worrying about affecting anything other than the results tables it needs to maintain. We even actively recommend not giving Epsio permissions to anything other than that.</p></li><li><p>In classic "streaming" use cases, the main benefit of IVM was the ease of writing SQL rather than writing custom code. In the use cases above, the benefits are more about query performance and cost&#8212;how easy it is to deliver performant, cost-effective queries. No matter how fast or efficient a traditional database is, if you are running a heavy query and most of the dataset hasn&#8217;t changed since the last run, there is a lot of wasted compute. This translates into either higher cost, higher latency, or both.</p></li></ul></li><li><p><a href="https://x.com/ifesdjeen/status/1876213377585799432">Alex Petrov</a>: In my experience, using LLMs for paper reading is only useful for querying and digging in, but never for summarization. Things LLM (Claude in my case) would suggest are almost never something I would find useful or interesting, or going too far beyond what authors have already put in the abstract.</p></li><li><p><a href="https://sympathetic.ink/2025/02/13/Bottom-up-Architecture.html">Julien Le Dem</a> <em>on the human side of software architecture</em>:</p><ul><li><p>When decisions are made by the people who best understand the systems - and who also will be responsible for the consequences of those decisions, creating a more virtuous cycle of incentives - there are drawbacks that result directly from the decentralization of decision making. If you just leave every team to their own devices to independently make decisions without coordination, they are unlikely to just naturally all reach the same conclusion on what problems we&#8217;re solving or who is solving what part. There is going to be a level of chaos that needs to be managed.</p></li><li><p>Since software architecture is very different from regular architecture, we don&#8217;t actually need a role that centralizes drawing exhaustive and precise plans to be followed closely. We do need people facilitating alignment amongst teams to manage and limit the increase of complexity caused by decentralized decision making. Whether you call these people software architects or some other senior engineering title doesn&#8217;t really matter.</p></li></ul></li><li><p><a href="https://www.oneusefulthing.org/p/the-end-of-search-the-beginning-of">Ethan Mollick</a> <em>on the current limitations of general-purpose AI agents</em>: Then the troubles begin, and they're twofold: not only is Operator blocked by OpenAI's security restrictions on file downloads, but it also starts to struggle with the task itself. The agent methodically tries every conceivable workaround: copying to clipboard, generating direct links, even diving into the site's source code. Each attempt fails - some due to OpenAI's browser restrictions, others due to the agent's own confusion about how to actually accomplish the task. Watching this determined but ultimately failed problem-solving loop reveals both the current limitations of these systems and raises questions about how agents will eventually behave when they encounter barriers in the real world.</p></li><li><p><a href="https://www.streamingdata.tech/p/exploring-apache-datafusion-streaming-framework">Yaroslav Tkachenko</a> <em>explores building a stream processing framework with DataFusion</em>: DataFusion is designed as a pull-based engine. Conceptually, it means that each operator runs a tight loop that pulls data from the upstream sources. In practice, DataFusion uses <a href="https://tokio.rs/tokio/tutorial/streams">Tokio Streams</a>. I want to highlight two observations:</p><ul><li><p>Tokio Stream (kinda like an iterator of Futures) is the primary abstraction, even when it comes to bounded sources (e.g. reading a bunch of Parquet files).</p></li><li><p>Pull-based execution doesn&#8217;t offer much control over backpressure. This makes it very different from Apache Flink, which can offer reliable backpressure, fine-grained flow control and adaptive buffers between operators. These things are not as important in the context of a query engine (whose goal is to read a bunch of files as fast as possible), but they do matter a lot for a streaming engine.</p></li></ul></li><li><p><a href="https://bsky.app/profile/alexmillerdb.bsky.social/post/3lhu4j55p7u25">Alex Miller</a>: The PolarDB-X paper makes a decent deal about using HLCs because having a timestamp service is a SPOF and perf bottleneck, but then the public docs for PolarDB-X exclusively describe the use of a TSO as the PolarDB-X architecture. So... not too much of a problem after all?</p></li><li><p><a href="https://bsky.app/profile/ananthdurai.bsky.social/post/3lgr7drqcky2h">Ananth Packkildurai</a>: My null hypothesis is as the number of configurations increases, the reliability of the software decreases. I wonder if there are any papers/studies published on this?</p></li><li><p><a href="https://surfingcomplexity.blog/2025/02/01/youre-missing-your-near-misses/">Lorin Hochstein</a>: The real challenge is preventing and quickly mitigating <em>novel</em> future incidents, which is the overwhelming majority of your incidents. And that brings us to near misses, those operational surprises that have no actual impact, but could have been a major incident if conditions were slightly different. Think of them as precursors to incidents. Or, if you are more poetically inclined, <em>omens</em>.</p></li><li><p><a href="https://blog.cloudflare.com/cloudflare-incident-on-february-6-2025/">Cloudflare </a><em>incident write-up. We&#8217;ve all had that sinking feeling when you realize you just dropped the production database. This is a horrifying example of  a <strong>"wait... what did I just do?"</strong> moment at scale</em>: During a routine abuse remediation, action was taken on a complaint that inadvertently disabled the R2 Gateway service instead of the specific endpoint/bucket associated with the report. This was a failure of multiple system level controls (first and foremost) and operator training.</p></li></ul><h2>Interesting topic #1 - Systems Correctness Practices at AWS</h2><p>Marc Brooker and Ankush Desai wrote an article called <a href="https://dl.acm.org/doi/pdf/10.1145/3712057">Systems Correctness Practices at AWS</a>. In it they report the various types of practices that AWS employs to gain confidence and find bugs in the AWS services. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Humans of the Data Sphere! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>The list includes:</p><ul><li><p><strong>Formal Verification</strong>. AWS started with TLA+ but have also made a big investment in the P programming language. P is a state-machine formal verification language that engineers typically find a lot easier to get started with than TLA+. Since 2019, P has been a strategic open-source project used in key AWS services like S3, EBS, DynamoDB, Aurora, and EC2 to ensure system correctness. One major success story was S3&#8217;s migration from eventual to strong read-after-write consistency, where P helped validate protocol changes and catch design-level bugs early.</p></li><li><p><strong>Lightweight Formal Methods&#8212;Property-based testing and reference models</strong>. Combines &#8220;<em>property-based testing with developer-provided correctness specifications</em>&#8220;. The primary example of the technique is Amazon S3's ShardStore (a key-value storage node), where engineers developed an executable reference model as a specification and used property-based testing to validate the implementation against these models. This method successfully prevented issues such as subtle crash consistency and concurrency problems from reaching production.</p></li><li><p><strong>Lightweight Formal Methods&#8212;Deterministic simulation (DS)</strong>. This is a technique used in software testing where a distributed system's is validated using property-based testing, while using a simulated environment to control for non-determinism. In the real-world, these systems experience a lot of non-determinism, so DS needs to control factors like timing, concurrency, and external inputs. The DS framework and the code under test work together to control these factors. For randomness<strong>, </strong>the framework provides a fixed seed for random number generators. For concurrency<strong>, </strong>thread scheduling and interleaving are explicitly controlled. For time-dependent behavior<strong>, </strong>the framework replaces system clocks with mocked or logical clocks. External resources<strong> </strong>such as network and disk are simulated. This is all so developers can run randomized tests but can also reproduce bugs consistently. Because everything is simulated, it also allows for more precise fault injection. One key aspect noted by Marc and Ankush are that the value of this type of testing is in the fast-feedback it provides &#8220;<em>Deterministic simulation testing moves testing of system properties, like behavior under delay and failure, closer to build time instead of integration testing</em>&#8220;.</p></li><li><p><strong>Lightweight Formal Methods&#8212;Continuous fuzzing or random test-input generation</strong>. &#8220;<em>First, by fuzzing SQL queries (and entire transactions), we validated that the logic partitioning SQL execution over shards is correct. Large volumes of random SQL schemas, datasets, and queries are synthesized and run through the engines under test, and the results compared with an oracle based on the nonsharded version of the engine (as well as other approaches to validation, like those pioneered by SQLancer23)</em>&#8220;</p></li></ul><p>The article also discusses Fault Injection as a Service and testing for metadata stable failures. This latter point is a particular interest of mine. A metastable failure is one where &#8220;<em>some triggering event (like an overload or a cache emptying) causes a distributed system to enter a state where it doesn&#8217;t recover without intervention (such as reducing load below normal).</em>&#8220;</p><p>Marc and Ankush note that &#8220;<em>Traditional formal approaches to modeling distributed systems typically focus on safety (nothing bad happens) and liveness (something good eventually happens), but metastable failures remind us that systems have a variety of behaviors that cannot be neatly categorized this way. We have increasingly turned to discrete-event simulation to understand the emergent behavior of systems, investing both in custom-built systems simulations and tooling that allow the use of existing system models (built in languages like TLA+ and P) to simulate system behavior.</em>&#8221;</p><p>It&#8217;s an area I have dabbed in using simple simulations, such as finding pathological workloads for a proposed distributed rate-limiting algorithm and problematic liveness properties of a cooperative resource allocation algorithm. I hope to see more findings published in the future about discrete-event simulation in the context of distributed systems engineering.</p><h2>Interesting topic #2 - Husky: Efficient compaction at Datadog scale</h2><p>Datadog published a blog post, <a href="https://www.datadoghq.com/blog/engineering/husky-storage-compaction/">Husky: Efficient compaction at Datadog scale</a>, detailing how Husky (their event store) performs compaction. The authors frame the problem in terms of a Goldilocks problem, where different concerns that can be generalized as write optimization vs read optimization which must be balanced.</p><blockquote><p>Ensuring that this compaction system gives us the performance we need is all about finding the right fragment size that maintains a good balance among the following concerns:</p><ul><li><p>For object storage fetches and metadata storage, fewer fragments are better.</p></li><li><p>For compaction, less work is better, both for CPU used in compaction and the number of PUT/GET requests to object storage.</p></li><li><p>For queries, where each fragment relevant to the query is read concurrently by a pool of query workers, the trade-off is a somewhat complex one between having fewer, larger fragments while maintaining high parallelism. We&#8217;re balancing the speed at which a single worker can scan the rows in a fragment with the overhead of distributing a query to many workers, which can scan many fragments in parallel for larger queries. There is an optimal fragment size to balance between scan speed and distribution overhead.</p></li><li><p>Compaction can affect storage layout in a positive way, but at the cost of doing more work. Given a particular common query pattern, events can be <a href="https://www.datadoghq.com/blog/engineering/husky-storage-compaction/#sort-schema">laid out in the fragments</a>, both in the time dimension and in spatial dimensions (i.e., by tags), so that events that would be relevant to a given query can be close together. Keeping similar events close together improves compression, but it is in tension with &#8220;less work is better&#8221; as compaction will work harder to achieve this layout, and some analysis of queries must be done to determine the layout for the best system-wide outcome.</p></li></ul><p>In short, fragments that are &#8220;too small&#8221; are inefficient for queries because many small fetches pay an object storage latency penalty and aren&#8217;t as efficiently processed by the query workers, which implement vectorized execution to scan many rows quickly. Fragments that are &#8220;too large&#8221; drive down parallelism for larger queries, causing those queries to take longer. Compaction attempts to find a fragment size that is just right for typical query patterns to minimize query cost and latency, while at the same time keeping similar data together.</p></blockquote><p>The post outlines a number of interesting aspects to compaction:</p><ul><li><p>Row group size</p></li><li><p>Time bucketing</p></li><li><p>Size-tiered compaction</p></li><li><p>Sort schemas</p></li><li><p>Locality compaction</p></li><li><p>Pruning</p></li></ul><p>Locality compaction and pruning in Husky are similar to the practice of partitioning and clustering in other analytics systems, such as the open table formats (Iceberg/Delta). The aim is for queries to prune data files based on metadata such as key ranges. By co-locating data of the same key range in the same file, files can be more aggressively skipped during query planning.</p><blockquote><p>&#8220;As the levels increase exponentially in size, while the size of the fragments is held constant, at higher and higher levels, each individual fragment&#8217;s minimum and maximum row keys are &#8220;closer together&#8221; than those at lower levels. There is a higher chance we can prune these high level fragments as the lexical space each one covers is smaller relative to those at lower levels.&#8220;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JSsM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c69e2-05ee-4216-8cf6-9f4b750a0ae5_1694x1055.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JSsM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c69e2-05ee-4216-8cf6-9f4b750a0ae5_1694x1055.png 424w, https://substackcdn.com/image/fetch/$s_!JSsM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c69e2-05ee-4216-8cf6-9f4b750a0ae5_1694x1055.png 848w, https://substackcdn.com/image/fetch/$s_!JSsM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c69e2-05ee-4216-8cf6-9f4b750a0ae5_1694x1055.png 1272w, https://substackcdn.com/image/fetch/$s_!JSsM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c69e2-05ee-4216-8cf6-9f4b750a0ae5_1694x1055.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JSsM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c69e2-05ee-4216-8cf6-9f4b750a0ae5_1694x1055.png" width="1456" height="907" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/660c69e2-05ee-4216-8cf6-9f4b750a0ae5_1694x1055.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:907,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:317247,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JSsM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c69e2-05ee-4216-8cf6-9f4b750a0ae5_1694x1055.png 424w, https://substackcdn.com/image/fetch/$s_!JSsM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c69e2-05ee-4216-8cf6-9f4b750a0ae5_1694x1055.png 848w, https://substackcdn.com/image/fetch/$s_!JSsM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c69e2-05ee-4216-8cf6-9f4b750a0ae5_1694x1055.png 1272w, https://substackcdn.com/image/fetch/$s_!JSsM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c69e2-05ee-4216-8cf6-9f4b750a0ae5_1694x1055.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Interesting topic #3 - On solving for the distributed case</h2><p>Recently, I&#8217;ve been exploring the different ways of <a href="https://jack-vanlightly.com/blog/2025/2/10/how-to-disaggregate-a-log-replication-protocol">disaggregating log replication protocols</a>, using Raft as the most famous example of the converged protocol. I&#8217;ll soon be releasing a survey of log replication protocols and real-world systems through the lens of different types of disaggregation.</p><p>While I was compiling some of the quotes for this issue I stumbled on this post by Janna Dogan. </p><div class="bluesky-wrap outer" style="height: auto; display: flex; margin-bottom: 24px;" data-attrs="{&quot;postId&quot;:&quot;3lfxnjfvoek27&quot;,&quot;authorDid&quot;:&quot;did:plc:cecwhurgvg6v5w26o4zjzhjx&quot;,&quot;authorName&quot;:&quot;Jaana Dogan &#12516;&#12490; &#12489;&#12460;&#12531;&quot;,&quot;authorHandle&quot;:&quot;rakyll.org&quot;,&quot;authorAvatarUrl&quot;:&quot;https://cdn.bsky.app/img/avatar/plain/did:plc:cecwhurgvg6v5w26o4zjzhjx/bafkreibcoaux7y7nkpnswbh6am2tlva75jycycyjw7z4j457x5p5r6hq3i@jpeg&quot;,&quot;text&quot;:&quot;When you have a highly ambiguous systems problem, try to solve it for the distributed case first. When you solve it for the distributed case, it's easy to pack things together in a monolith. The opposite is almost always impossible.&quot;,&quot;createdAt&quot;:&quot;2025-01-17T20:36:49.522Z&quot;,&quot;uri&quot;:&quot;at://did:plc:cecwhurgvg6v5w26o4zjzhjx/app.bsky.feed.post/3lfxnjfvoek27&quot;,&quot;imageUrls&quot;:[]}" data-component-name="BlueskyCreateBlueskyEmbed"><iframe id="bluesky-3lfxnjfvoek27" data-bluesky-id="4418320178132651" src="https://embed.bsky.app/embed/did:plc:cecwhurgvg6v5w26o4zjzhjx/app.bsky.feed.post/3lfxnjfvoek27?id=4418320178132651" width="100%" style="display: block; flex-grow: 1;" frameborder="0" scrolling="no"></iframe></div><p>Already thinking about separating protocols into different abstractions and components, I immediately saw the parallels to Paxos and Raft.</p><div class="bluesky-wrap outer" style="height: auto; display: flex; margin-bottom: 24px;" data-attrs="{&quot;postId&quot;:&quot;3li55tdxrys2j&quot;,&quot;authorDid&quot;:&quot;did:plc:e75f7xrf3rzpfhej3cdjwnbw&quot;,&quot;authorName&quot;:&quot;Jack Vanlightly&quot;,&quot;authorHandle&quot;:&quot;vanlightly.bsky.social&quot;,&quot;authorAvatarUrl&quot;:&quot;https://cdn.bsky.app/img/avatar/plain/did:plc:e75f7xrf3rzpfhej3cdjwnbw/bafkreig4ydkdtvgdgwanfdwix64uy57cvd6c7z2ezae2aywgj7fapfzq6i@jpeg&quot;,&quot;text&quot;:&quot;This reminds me of Paxos vs Raft. Paxos formalized the responsibilities of reaching consensus and acting on the agreed values into *distinct roles* (proposer, acceptor, learner). These roles can be put in a monolith or distributed. The basis for the Paxos family of protocols are these roles.&quot;,&quot;createdAt&quot;:&quot;2025-02-14T12:02:24.856Z&quot;,&quot;uri&quot;:&quot;at://did:plc:e75f7xrf3rzpfhej3cdjwnbw/app.bsky.feed.post/3li55tdxrys2j&quot;,&quot;imageUrls&quot;:[]}" data-component-name="BlueskyCreateBlueskyEmbed"><iframe id="bluesky-3li55tdxrys2j" data-bluesky-id="20459502700581678" src="https://embed.bsky.app/embed/did:plc:e75f7xrf3rzpfhej3cdjwnbw/app.bsky.feed.post/3li55tdxrys2j?id=20459502700581678" width="100%" style="display: block; flex-grow: 1;" frameborder="0" scrolling="no"></iframe></div><p>Quoting my own blog post on protocol disaggregation:</p><blockquote><p>Paxos made a fundamental contribution to distributed consensus by formalizing the responsibilities of reaching consensus and acting on the agreed values into distinct roles. Paxos separates the consensus protocol into <strong>proposers</strong> who drive consensus by proposing values to acceptors, <strong>acceptors</strong> who form the quorum necessary for reaching agreement (consensus), and <strong>learners</strong> who need to know the decided values. This creates a clear framework that allows system designers to reason about each role's responsibilities independently while ensuring their interaction maintains safety and liveness properties. The formalization of these roles has influenced the design of practical systems and protocols for decades, even when they don't strictly adhere to the original Paxos model. This cannot be understated.</p></blockquote><p>Raft is a prescriptive, implementation-focused consensus algorithm (which is why it became popular initially). Paxos on the other hand was not prescriptive and focused more on identifying discrete roles and responsibilities. This has led to a plethora of variants and diverse implementations. We can see great examples of how this focus on abstractions and roles led to more creative and flexible implementations of consensus. One example I like of this is<a href="https://jack-vanlightly.com/analyses/2023/11/15/neon-serverless-postgresql-asds-chapter-3"> Neon&#8217;s distributed write-ahead-log</a>.</p><p>Going back to what Jaana said, the way I would riff on it would be:</p><p><em>When you have a highly ambiguous systems problem, try to solve it in terms of modular abstractions, roles and responsibilities first. Once you identify these abstractions and roles, you can choose whether to pack those together in a monolith or deploy them as a distributed set of components. Starting with the mixed up monolith, and later attempting to separate it out into clean modular abstractions is almost always impossible.</em></p><p>I think it&#8217;s a philosophy worth keeping in mind always.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Humans of the Data Sphere! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Humans of the Data Sphere Issue #7 January 29th 2025]]></title><description><![CDATA[Your biweekly dose of insights, observations, commentary and opinions from interesting people from the world of databases, AI, streaming, distributed systems and the data engineering/analytics space.]]></description><link>https://www.hotds.dev/p/humans-of-the-data-sphere-issue-7</link><guid isPermaLink="false">https://www.hotds.dev/p/humans-of-the-data-sphere-issue-7</guid><dc:creator><![CDATA[Jack Vanlightly]]></dc:creator><pubDate>Wed, 29 Jan 2025 13:35:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50bf85b-a06e-4504-9d93-83d7c3c3419c_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Humans of the Data Sphere issue #7!</p><p>First, the meme of the issue:</p><div class="bluesky-wrap outer" style="height: auto; display: flex; margin-bottom: 24px;" data-attrs="{&quot;postId&quot;:&quot;3ldtlxbzbjs27&quot;,&quot;authorDid&quot;:&quot;did:plc:dmjdtxiwote53wmj4zaxazfo&quot;,&quot;authorName&quot;:&quot;Niki Tonsky&quot;,&quot;authorHandle&quot;:&quot;tonsky.me&quot;,&quot;authorAvatarUrl&quot;:&quot;https://cdn.bsky.app/img/avatar/plain/did:plc:dmjdtxiwote53wmj4zaxazfo/bafkreihqnp5wij34tn2vkfa7i4iz46zh57uot25iojvudpgeb4rfdunk2y@jpeg&quot;,&quot;text&quot;:&quot;I propose we replace semantic versioning with pride versioning&quot;,&quot;createdAt&quot;:&quot;2024-12-21T19:07:45.514Z&quot;,&quot;uri&quot;:&quot;at://did:plc:dmjdtxiwote53wmj4zaxazfo/app.bsky.feed.post/3ldtlxbzbjs27&quot;,&quot;imageUrls&quot;:[&quot;https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:dmjdtxiwote53wmj4zaxazfo/bafkreiggki426moi5usbdb4dzwx2a5f2l7akjaw77ctziwcugqbx5lrjzy@jpeg&quot;]}" data-component-name="BlueskyCreateBlueskyEmbed"><iframe id="bluesky-3ldtlxbzbjs27" data-bluesky-id="9522643793256425" src="https://embed.bsky.app/embed/did:plc:dmjdtxiwote53wmj4zaxazfo/app.bsky.feed.post/3ldtlxbzbjs27?id=9522643793256425" width="100%" style="display: block; flex-grow: 1;" frameborder="0" scrolling="no"></iframe></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.hotds.dev/subscribe?"><span>Subscribe now</span></a></p><h2>Quotable Humans</h2><p>First up. The world reacted to DeepSeek:</p><ul><li><p><a href="https://x.com/karpathy/status/1883941452738355376">Andrej Karpathy</a>: I will say that Deep Learning has a legendary ravenous appetite for compute, like no other algorithm that has ever been developed in AI.</p><p>&#8230;</p><p>Last thought. Not sure if this is obvious. There are two major types of learning, in both children and in deep learning. There is 1) imitation learning (watch and repeat, i.e. pretraining, supervised finetuning), and 2) trial-and-error learning (reinforcement learning). My favorite simple example is AlphaGo - 1) is learning by imitating expert players, 2) is reinforcement learning to win the game. Almost every single shocking result of deep learning, and the source of all *magic* is always 2. 2 is significantly significantly more powerful. 2 is what surprises you. 2 is when the paddle learns to hit the ball behind the blocks in Breakout. 2 is when AlphaGo beats even Lee Sedol. And 2 is the "aha moment" when the DeepSeek (or o1 etc.) discovers that it works well to re-evaluate your assumptions, backtrack, try something else, etc. It's the solving strategies you see this model use in its chain of thought.</p></li><li><p><a href="https://x.com/DrJimFan/status/1883894546410639413">Jim Fan</a>: those who think RL use less compute don&#8217;t know RL at all </p></li><li><p><a href="https://x.com/jxmnop/status/1882849185319514295">Jack Morris</a>: i guess DeepSeek broke the proverbial four-minute-mile barrier. people used to think this was impossible. and suddenly, RL on language models just works and it reproduces on a small-enough scale that a PhD student can reimplement it in only a few days this year is going to be wild</p></li><li><p><a href="https://x.com/Dorialexander/status/1883831488669679709">Alexander Doria</a>: Starting to think DeepSeek is a blessing in disguise for the AI market: can be cleansed sufficiently early on and avoid a dramatic bubble popping. Investors will price in competition and commoditization accurately from now on.</p></li><li><p><a href="https://x.com/deanwball/status/1883142201414222113">Dean W. Ball</a>: Part of the reason DeepSeek looks so impressive (apart from just being impressive!) is that they are among the only truly cracked teams releasing detailed frontier AI research.</p></li><li><p><a href="https://x.com/DrJimFan/status/1881353126210687089">Jim Fan</a>: We are living in a timeline where a non-US company is keeping the original mission of OpenAI alive - truly open, frontier research that empowers all. It makes no sense. The most entertaining outcome is the most likely. DeepSeek-R1 not only open-sources a barrage of models but also spills all the training secrets. They are perhaps the first OSS project that shows major, sustained growth of an RL flywheel.</p></li><li><p><a href="https://x.com/emollick/status/1883937071393562960">Ethan Mollick</a>: Lesson here is that investors do not understand that the paradigm for AI has been undergoing a shift from one which was about models getting smarter due to more computing power being used for training to models getting smarter due to more computing power being used for inference.</p></li><li><p><a href="https://x.com/emollick/status/1883906575066337481">Ethan Mollick</a>: Also &#8220;Jevon&#8217;s Paradox&#8221; is just a variation of saying prices are elastic and use goes up when price goes down. Hard to imagine compute not being the constraint for the foreseeable future when reasoning models like DeepSeek or o1 depend on inference-time scaling.</p></li></ul><p>Quotes from other topics of the data and AI sphere:</p><ul><li><p><a href="https://surfingcomplexity.blog/2024/12/21/the-canva-outage-another-tale-of-saturation-and-resilience/">Lorin Hochstein</a> (December): Like <a href="https://surfingcomplexity.blog/2024/12/14/quick-takes-on-the-recent-openai-public-incident-write-up/">so</a> <a href="https://surfingcomplexity.blog/2024/11/28/quick-takes-on-the-latest-cloudflare-public-incident-write-up/">many</a> <a href="https://surfingcomplexity.blog/2024/07/06/quick-takes-on-rogers-network-outage-executive-summary/">other</a> <a href="https://surfingcomplexity.blog/2021/02/08/slacks-jan-2021-outage-a-tale-of-saturation/">incidents</a> that came before, this is another tale of <em>saturation</em>, where the failure mode involves overload.</p><p>&#8230;</p><p>The trigger for this incident was Canva deploying a new version of their editor page. It&#8217;s notable <em><strong>that there was nothing wrong with this new version.</strong></em> The incident wasn&#8217;t triggered by a bug in the code in the new version, or even by some unexpected emergent behavior in the code of this version. No, while the incident was triggered by a deploy, the changes from the previous version are immaterial to this outage. Rather, <em><strong>it was the system behavior that emerged from clients downloading the new version that led to the outage</strong></em>. Specifically, it was clients downloading the new javascript files from the CDN that set the ball in motion.</p></li><li><p><a href="https://bsky.app/profile/elenarunsnyc.bsky.social/post/3lg6ffg74u22q">Elena Dyachkova</a>: Amazing things unfolding on LinkedIn. Avinash Kaushik penned an &#8216;<a href="https://www.linkedin.com/feed/update/urn:li:activity:7286023213204008961/">A/B testing is dead</a>&#8217; essay with some valid points but a very narrow definition of A/B testing as CRO, Ronny <a href="https://www.linkedin.com/posts/ronnyk_stop-ab-testing-few-investments-today-activity-7286979831362138114-vZYK/">penned a debunk</a> amply peppered with &#8216;that&#8217;s not been my personal experience&#8217;&#8230;</p></li><li><p><a href="https://x.com/debasishg/status/1882130447955791960">Debasish Ghosh</a>: Columnar file formats offer compression that results in storage savings. Row skipping metadata also accelerate columnar scans. How do you optimise partition size to get the best of both ? This <a href="https://t.co/gClBGw6Vlm">paper </a>proposes a solution by decoupling the actual storage from the search acceleration axes.</p></li><li><p><a href="https://x.com/lauriewired/status/1884145157358211277">LaurieWired</a>: Most hashing algorithms are designed to avoid collisions. What if they weren&#8217;t? Locality-sensitive-hashing (LSH) is a way to group similar inputs into the same &#8220;buckets&#8221; with high probability. Collisions are maximized, not minimized. As a malware researcher, I&#8217;m quite experienced with fuzzy hashing. LSH algorithms are a bit different. LSH algos specifically reduce the dimensionality of data while preserving relative distance. Think spam filters, copyright media detection, even music recommendations.</p></li><li><p><a href="https://bsky.app/profile/ry.codes/post/3lgepmjigj22k">Ryanne Dolan</a>: The MVs-as-pipelines metaphor breaks down when you want multiple pipelines working together to materialize a single big view. We've introduced "partial views" to solve this problem. You can now create a bunch of MVs that write to the same place.</p></li><li><p><a href="https://x.com/eatonphil/status/1882819408663634237">Phil Eaton</a>: I think there definitely is a vibe shift among experienced programmers. Minimize dependencies. Invest more in comprehensive standard libraries. (JavaScript and Rust notably have the least comprehensive standard libraries.)</p></li><li><p><a href="https://x.com/davlindner/status/1882451562859254050">David Lindner</a>: New Google DeepMind safety paper! LLM agents are coming &#8211; how do we stop them finding complex plans to hack the reward? Our method, MONA, prevents many such hacks, *even if* humans are unable to detect them!</p></li><li><p><a href="https://youtubetranscriptoptimizer.com/blog/05_the_short_case_for_nvda">Jeffrey Emanuel</a> <em>wrote an incredible piece on The Short Case for Nvidia stock. A couple of quotes</em>: </p><ul><li><p>But if the next big scaling law that people are excited about is for inference level compute&#8212; and if the biggest drawback of COT models is the high latency introduced by having to generate all those intermediate logic tokens before they can respond&#8212; then even a company that only does inference compute, but which does it dramatically faster and more efficiently than Nvidia can&#8212; can introduce a serious competitive threat in the coming years. At the very least, Cerebras and Groq can chip away at the lofty expectations for Nvidia's revenue growth over the next 2-3 years that are embedded in the current equity valuation.</p></li><li><p>Now, it's no secret that there is a strong power law distribution of Nvidia's hyper-scaler customer base, with the top handful of customers representing the lion's share of high-margin revenue. How should one think about the future of this business when literally every single one of these VIP customers is building their own custom chips specifically for AI training and inference?</p></li></ul></li><li><p><a href="https://x.com/rahulj51/status/1881912252217061704">Rahul Jain</a>: Devin's Paradox: AI tools doing so good that junior developers are no longer hired or upskilled. Meanwhile the demand for senior devs keeps increasing but there are no senior devs available - thus leading to decreased productivity.</p></li><li><p><a href="https://x.com/debasishg/status/1710308840732807334">Debasish Ghosh</a>: The talk starts claiming that linked lists are an immoral data structure and if you are using them for anything for which you care about performance, you are committing sin. That's obviously because of the cache misses that a linked list will suffer. And yet Linux VMAs were based on linked lists only till 1995.</p><p><a href="https://bsky.app/profile/gunnarmorling.dev/post/3lgpnktnidc26">Gunnar Morling</a>: Kinda blowing my mind that we're still largely using text-based formats (JSON) for logging, rather than binary formats. Such as waste of compute resources.</p></li><li><p><a href="https://bsky.app/profile/flaneur2024.bsky.social/post/3lgjzietfmc2g">flaneur2024</a>: finally read the paper &lt;<a href="https://www.usenix.org/system/files/atc20-rebello.pdf">Can Application Recover from fsync Failures?</a>&gt;. surprised to see the fact that `fsync()` will simply mark the dirty page as clean after you got EIO error, so an success retry of `fsync()` will not finally persist your data, but failed to persist your data silently &#128558;</p></li><li><p><a href="https://x.com/lauriewired/status/1883599337642664035">LaurieWired</a>: We aren&#8217;t far off from the theoretical limits of CPU clockspeed! A soft limit at around ~10GHz where speed-of-light across the entire die in one cycle starts to become a major limitation!</p></li><li><p><a href="https://char.blog/generalist">Char </a><em>writes about &#8220;high-leverage generalists&#8220;</em>: </p><ul><li><p>The "T-shaped person" discourse is played out. The real move is being an emergent complexity monster. I've spent the last 6 years watching my career accelerate dramatically through what I call "high-leverage generalism." Not the wishy-washy "jack of all trades" kind, but a deliberate approach to building a unique combination of skills that compounds in value over time.</p></li><li><p>The traditional narrative around career development is broken. We're told to pick a lane early, specialise hard, and climb the ladder in our chosen field. This advice made sense in a world of stable, well-defined industries. But that world is dead. Today's most interesting opportunities exist at the intersections - where different domains collide and create new possibilities.</p></li></ul></li><li><p><a href="https://x.com/debasishg/status/1851978751585997145">Debasish Ghosh</a>: I have been posting a bit about writing cache aware code, being aligned with the modern CPU architectures and by a fortunate stroke of serendipity find this talk by Scott Meyers, one of the basics of data oriented design .. <a href="https://www.youtube.com/watch?v=WDIkqP4JbkE">Cpu Caches and Why You Care</a></p></li><li><p><a href="https://www.hackintoshrao.com/iceberg-powered-unification-why-table-stream-duality-will-redefine-etl-in-2025-2/">Karthic Rao</a>: Looking ahead, we can anticipate <strong>bi-directional flows</strong> between tables and streams, letting data teams materialize Iceberg tables as real-time topics (and vice versa) with minimal friction. With no ETL duplication and no wasted data movement, the opportunity for <em>innovation</em> and <em>cost savings</em> is vast.</p></li><li><p><a href="https://dataproducts.substack.com/p/the-consumer-defined-data-contract">Chad Sanderson</a> <em>on consumer-driven data contracts</em>: </p><ul><li><p>An application developer will never comprehensively understand how data downstream is being used, nor will they fully understand the constraints on data that might be necessary for certain use cases and not others. They will have no concept of which SLAs are useful and which are meaningless. They will not understand how the data model needs to evolve (or how it should have been originally defined). They will have no grasp of how data is replicated across multiple services and where strong relationships must be built between owning producer teams. They won&#8217;t understand which data is necessary to be under contract and which isn&#8217;t.</p></li><li><p>This is the <strong>consumer-defined data contract</strong>. The consumer-defined contract is created by the owners of data applications, with requirements derived from their needs and use cases. While it contains the same information as the producer-defined contract, it is implemented primarily to draw awareness to the request and inform data producers when new expectations and dependencies exist on the data they maintain.</p></li></ul></li></ul><h2>Published Humans</h2><ul><li><p><a href="http://andrew.nerdnetworks.org/other/CIDR_2025_Cloud_5_Minute_Rule.pdf">The Five-Minute Rule for the Cloud: Caching in Analytics Systems</a>: A useful paper for system designers building analytics systems on object storage. The paper surveys a number of caching architectures in terms of various properties such as latency variability and implementation/operational complexity. It then introduces a comprehensive cost model that evaluates these caching architectures taking into account various factors such as data access patterns, latency vs non-latency sensitive workloads, to determine optimal caching policies. Using this model, they propose new rules of thumb for cloud-native databases that must balance cost / latency trade offs in dynamic cloud environments. Basically, the need for adaptable caching mechanisms that can respond to fluctuating workloads and data access patterns (while maintaining desired cost/perf profile).</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LxWI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76320901-1dae-4037-9d87-b3b494a99bb4_1411x306.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LxWI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76320901-1dae-4037-9d87-b3b494a99bb4_1411x306.png 424w, https://substackcdn.com/image/fetch/$s_!LxWI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76320901-1dae-4037-9d87-b3b494a99bb4_1411x306.png 848w, https://substackcdn.com/image/fetch/$s_!LxWI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76320901-1dae-4037-9d87-b3b494a99bb4_1411x306.png 1272w, https://substackcdn.com/image/fetch/$s_!LxWI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76320901-1dae-4037-9d87-b3b494a99bb4_1411x306.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LxWI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76320901-1dae-4037-9d87-b3b494a99bb4_1411x306.png" width="1411" height="306" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76320901-1dae-4037-9d87-b3b494a99bb4_1411x306.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:306,&quot;width&quot;:1411,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64420,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LxWI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76320901-1dae-4037-9d87-b3b494a99bb4_1411x306.png 424w, https://substackcdn.com/image/fetch/$s_!LxWI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76320901-1dae-4037-9d87-b3b494a99bb4_1411x306.png 848w, https://substackcdn.com/image/fetch/$s_!LxWI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76320901-1dae-4037-9d87-b3b494a99bb4_1411x306.png 1272w, https://substackcdn.com/image/fetch/$s_!LxWI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76320901-1dae-4037-9d87-b3b494a99bb4_1411x306.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></li><li><p><a href="https://vldb.org/cidrdb/papers/2025/p5-alotaibi.pdf">Towards Query Optimizer as a Service (QOaaS) in a Unified LakeHouse Ecosystem: Can One QO Rule Them All?</a> This paper explores whether Query Optimization (QO), in the context of data lakehouses, can be decoupled from data systems and made into a separate service&#8212;QAaaS. The paper explains that QO implementations across most relational analytics data systems involve the common steps of parsing/algebrization, simplification/normalization, cost-based exploration/implementation, and post-optimization. The QAaaS model decouples the QO from individual engines, allowing it to function as an independent service that interacts with multiple engines via remote procedure calls. The theoretical benefits of QOaaS include accelerated innovation, enhanced engineering efficiency, reduced time-to-market for new engines, and the capability for cross-engine optimization and scalability. However, the implementation of QOaaS presents challenges such as defining a universal query plan format and accommodating diverse engine capabilities within a unified cost model. The authors themselves note that the work is ambitious and exploratory, inviting discussion from the community on its feasibility.</p></li></ul><h2>Interesting topic #1 - Well and ill-conditioned APIs</h2><p>Back in September 2023 Marc Brooker <a href="https://x.com/MarcJBrooker/status/1706316593980944443">observed </a>that:</p><blockquote><p>&#8220;<em>The declarative nature of SQL is a major strength, but also a common source of operational problems. This is because SQL obscures one of the most important practical questions about running a program: how much work are we asking the computer to do?</em>&#8221;</p></blockquote><p>Mahesh Balakrishnan <a href="https://x.com/maheshb/status/1706863830733848710">riffed </a>on that remarking:</p><blockquote><p><em>To misuse some terminology from math, SQL is an &#8220;ill-conditioned&#8221; API: small changes in input can trigger very different amounts of work. The opposite would be block storage, which is &#8220;well-conditioned&#8221;. Another famous example of an ill-conditioned abstraction is IP Multicast.</em></p></blockquote><p>This week I&#8217;ve seen two people talk around this property of APIs and their &#8220;conditioning&#8221;:</p><ul><li><p><a href="https://x.com/jamesacowling/status/1883954318665212193">James Cowling</a>: A good design principle is that APIs that look cheap should be cheap and APIs that are expensive should look expensive. One mistake we made in an old version of the Dropbox filesystem was that directory moves looked cheap (drag a folder around) but were expensive on the server (update metadata for every file in the tree). A similar mistake we made with @convex_dev is that the .filter() operator looks convenient, even though it does a table scan, while the .withIndex() syntax for efficiently reading from an index looks a little cumbersome and expensive.</p></li><li><p><a href="https://youtubetranscriptoptimizer.com/blog/05_the_short_case_for_nvda">Jeffrey Emanuel</a> <em>discusses the impact that CoT-based reasoning has on inference scaling</em>: </p><ul><li><p>But essentially, until recently, inference compute was generally a lot less intensive than training compute, and scaled basically linearly with the number of requests you are handling&#8212; the more demand for text completions from ChatGPT, for instance, the more inference compute you used up.</p><p>With the advent of the revolutionary Chain-of-Thought ("COT") models introduced in the past year, most noticeably in OpenAI's flagship O1 model (but very recently in DeepSeek's new R1 model, which we will talk about later in much more detail), all that changed. </p></li><li><p>Some of the most exciting news in the AI world came out just a few weeks ago and concerned OpenAI's new unreleased O3 model, which was able to solve a large variety of tasks that were previously deemed to be out of reach of current AI approaches in the near term. And the way it was able to do these hardest problems (which include exceptionally tough "foundational" math problems that would be very hard for even highly skilled professional mathematicians to solve), is that OpenAI threw insane amount of compute resources at the problems&#8212; in some cases, spending $3k+ worth of compute power to solve a single task (compare this to traditional inference costs for a single task, which would be unlikely to exceed a couple dollars using regular Transformer models without chain-of-thought).</p></li></ul></li></ul><p>On the subject of CoT reasoning. It seems likely that prompts on advanced reasoning models will result in wildly different amounts of compute resources, depending on the the complexity of the question, any false steps during the CoT process that must be corrected and the upper-bound cost the prompter is willing to pay for an answer.</p><h2>Interesting topic #2 - Contextual data quality challenges and AI</h2><p>This week I encountered this article on data quality, <a href="https://journalofbigdata.springeropen.com/articles/10.1186/s40537-021-00468-0">Big data quality framework: a holistic approach to continuous quality management</a> (2021). </p><p>One figure was particularly interesting and useful to me. It categorizes data quality into intrinsic, contextual, representational and accessibility dimensions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i8A1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41134dcd-329e-4ff5-acd9-375ac5fcaefb_685x396.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i8A1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41134dcd-329e-4ff5-acd9-375ac5fcaefb_685x396.png 424w, https://substackcdn.com/image/fetch/$s_!i8A1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41134dcd-329e-4ff5-acd9-375ac5fcaefb_685x396.png 848w, https://substackcdn.com/image/fetch/$s_!i8A1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41134dcd-329e-4ff5-acd9-375ac5fcaefb_685x396.png 1272w, https://substackcdn.com/image/fetch/$s_!i8A1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41134dcd-329e-4ff5-acd9-375ac5fcaefb_685x396.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i8A1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41134dcd-329e-4ff5-acd9-375ac5fcaefb_685x396.png" width="685" height="396" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41134dcd-329e-4ff5-acd9-375ac5fcaefb_685x396.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:396,&quot;width&quot;:685,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;figure 2&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="figure 2" title="figure 2" srcset="https://substackcdn.com/image/fetch/$s_!i8A1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41134dcd-329e-4ff5-acd9-375ac5fcaefb_685x396.png 424w, https://substackcdn.com/image/fetch/$s_!i8A1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41134dcd-329e-4ff5-acd9-375ac5fcaefb_685x396.png 848w, https://substackcdn.com/image/fetch/$s_!i8A1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41134dcd-329e-4ff5-acd9-375ac5fcaefb_685x396.png 1272w, https://substackcdn.com/image/fetch/$s_!i8A1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41134dcd-329e-4ff5-acd9-375ac5fcaefb_685x396.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 2 from <a href="https://journalofbigdata.springeropen.com/articles/10.1186/s40537-021-00468-0">Big data quality framework: a holistic approach to continuous quality management</a> </figcaption></figure></div><p>It made me realize that the definition of data quality that I and many others working on data tooling are using is overly narrow, focused almost entirely in the <strong>Intrinsic</strong> and <strong>Accessibility</strong> categories. The reason? These two categories are the ones that are easy to build tooling for. We can design data systems to offer consistency, we can use schemas, types and validation rules to ensure data adheres to strict forms, we can measure if data arrives on-time or late. We can control access to the data, who can see what and when.</p><p>But what about the <strong>Contextual</strong> category? The Contextual category is also extremely important but characteristics such as relevancy, trustworthiness and suitability are hard to quantify and evaluate through software. The Contextual category is where the data engineer and data analyst use their human intellect and experience to pick good sources of data, judge whether data is trustworthy or not, and how to use and combine data effectively.</p><p>AI becomes relevant to this in two ways:</p><ol><li><p><strong>Data generation</strong>: AI is capable of the automated generation of data quality issues in all categories.</p></li><li><p><strong>Data control</strong>: AI can automate more advanced data quality controls.</p></li></ol><h4>From deterministic pipelines to stochastic pipelines</h4><p>The data that is being ingested into data warehouses and data lakehouses can vary from low to high quality. Typically, data engineers have to cleanse the data before it can be used to generate business insights. This is known ahead of time and therefore data is put through various stages first. Once data is in a high quality state, we can apply <strong>deterministic processing/analysis</strong> to produce high quality outputs. The thing that data engineers and analysts must guard against are Garbage In Garbage Out (GIGO) and errors in their own processes that turn valid inputs into wrong outputs. But this can be done; we&#8217;re talking about deterministic processing, where age old techniques of testing, validation and end-user feedback catch most problems.</p><p>Enter AI. The benefit of AI is automated intelligence (whether it&#8217;s simple models doing classification or sophisticated models doing advanced reasoning). The output of AI is generally more data. AI also requires valid inputs but due to its stochastic nature, can produce bad data from good.</p><p>The data quality problems it can generate can include all four categories from the article:</p><ul><li><p><strong>Intrinsic</strong>: Data may not be complete, or conform to correct types etc.</p></li><li><p><strong>Contextual</strong>: Data may not be relevant or suitable. Data may be structurally correct but factually wrong.</p></li><li><p><strong>Representational</strong>: AI systems that produce outputs in complex or inconsistent formats can hinder user understanding. For example, if an AI model presents data in a convoluted manner without clear explanations, it can lead to misinterpretations, affecting decision-making processes.</p></li><li><p><strong>Accessibility</strong>: If AI systems do not implement robust access controls, sensitive information could be exposed.</p></li></ul><p><strong>Intrinsic</strong> data quality issues may be detected and remediated automatically via software, using the same strategies we use today on ingested data. But what about <strong>Contextual</strong> or <strong>Accessibility</strong> data quality issues? How do we apply automated controls to ensure relevancy and suitability of data (currently the preserve of the data engineer and analyst)? How do we detect that sensitive data has leaked?</p><h4>Handling AI-generated contextual data quality issues</h4><p>There is little room for contextual data quality issues with simple classifiers, but LLMs generate open-ended text that present a much larger data quality challenge. So the question is: <strong>How do we benefit from automated intelligence without it causing data quality incidents?</strong></p><p>It seems that the answer is also AI. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q5o1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F311495a2-509e-4a58-a7ba-04d7525c06e7_582x429.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q5o1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F311495a2-509e-4a58-a7ba-04d7525c06e7_582x429.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q5o1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F311495a2-509e-4a58-a7ba-04d7525c06e7_582x429.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q5o1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F311495a2-509e-4a58-a7ba-04d7525c06e7_582x429.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q5o1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F311495a2-509e-4a58-a7ba-04d7525c06e7_582x429.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q5o1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F311495a2-509e-4a58-a7ba-04d7525c06e7_582x429.jpeg" width="582" height="429" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/311495a2-509e-4a58-a7ba-04d7525c06e7_582x429.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:429,&quot;width&quot;:582,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!q5o1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F311495a2-509e-4a58-a7ba-04d7525c06e7_582x429.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q5o1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F311495a2-509e-4a58-a7ba-04d7525c06e7_582x429.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q5o1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F311495a2-509e-4a58-a7ba-04d7525c06e7_582x429.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q5o1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F311495a2-509e-4a58-a7ba-04d7525c06e7_582x429.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>AI solutions to AI problems:</p><ul><li><p><strong>Confidence scores</strong></p><ul><li><p>Self-Evaluation Scoring. The LLM itself can estimate confidence by generating multiple responses and ranking them.</p></li><li><p>Threshold-Based Filtering. If confidence is below a threshold (e.g., 60%), the model can flag the answer as uncertain or refuse to answer.</p></li></ul></li><li><p><strong>Verification</strong></p><ul><li><p>Self-Consistency Sampling. Instead of generating one response, the LLM generates multiple responses and picks the most consistent one.</p></li><li><p>AI Critique Models (Verifier LLMs). Another LLM can check the primary LLM&#8217;s responses, filtering out incorrect, irrelevant, or misleading text.</p></li><li><p>Fact-Checking with Retrieval-Augmented Generation (RAG).</p></li><li><p>Adversarial AI (GAN-Style Verifiers)</p></li></ul></li></ul><p>The verification side seems to be more domain specific. In order to catch contextual data quality issues, the verifier itself must understand that context. The challenge for data engineers and analysts wanting to adopt more sophisticated uses of LLMs will be in <strong>automated domain-specific AI-based verification</strong>.</p><h4>AI in 2025 and onwards</h4><p>Contextual data quality remains largely a human-driven responsibility today, relying on the expertise of data engineers and analysts to make informed decisions about data sources, transformations, and interpretations. Notably, humans assess contextual data quality during the data source selection, ingest or cleansing process. However, AI can generate as-yet unverified contextual data quality issues from inside the &#8220;safe zone&#8221;, where ingested data has been cleansed. </p><p>While AI can generate data quality problems across all four dimensions, Contextual issues stand out to me as the most complex and hard to automate away. The challenge ahead for data professionals is to build domain-aware AI verification pipelines that understand context-specific relevancy, suitability and correctness. The future of data engineering isn&#8217;t just about generating data with AI but about curating and refining it, subjecting AI-produced outputs to the same rigorous scrutiny that human analysts apply. As AI will increasingly permeates data pipelines, and AI-powered data quality management will become ever more necessary to ensure that insights remain reliable and relevant. In order words, verification and correction will become as fundamental as ingestion and transformation.</p>]]></content:encoded></item><item><title><![CDATA[Humans of the Data Sphere Issue #6 January 14th 2025]]></title><description><![CDATA[Your biweekly dose of insights, observations, commentary and opinions from interesting people from the world of databases, AI, streaming, distributed systems and the data engineering/analytics space.]]></description><link>https://www.hotds.dev/p/humans-of-the-data-sphere-issue-6</link><guid isPermaLink="false">https://www.hotds.dev/p/humans-of-the-data-sphere-issue-6</guid><dc:creator><![CDATA[Jack Vanlightly]]></dc:creator><pubDate>Tue, 14 Jan 2025 18:42:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50bf85b-a06e-4504-9d93-83d7c3c3419c_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Humans of the Data Sphere issue #6! </p><p>First, is this <a href="https://www.youtube.com/watch?v=x6C5tI208o0">our future of AI agents</a>?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4Sd-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00009a30-ae93-4408-b377-2e47b34d3b5b_400x400.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4Sd-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00009a30-ae93-4408-b377-2e47b34d3b5b_400x400.webp 424w, https://substackcdn.com/image/fetch/$s_!4Sd-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00009a30-ae93-4408-b377-2e47b34d3b5b_400x400.webp 848w, https://substackcdn.com/image/fetch/$s_!4Sd-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00009a30-ae93-4408-b377-2e47b34d3b5b_400x400.webp 1272w, https://substackcdn.com/image/fetch/$s_!4Sd-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00009a30-ae93-4408-b377-2e47b34d3b5b_400x400.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4Sd-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00009a30-ae93-4408-b377-2e47b34d3b5b_400x400.webp" width="400" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00009a30-ae93-4408-b377-2e47b34d3b5b_400x400.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21806,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4Sd-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00009a30-ae93-4408-b377-2e47b34d3b5b_400x400.webp 424w, https://substackcdn.com/image/fetch/$s_!4Sd-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00009a30-ae93-4408-b377-2e47b34d3b5b_400x400.webp 848w, https://substackcdn.com/image/fetch/$s_!4Sd-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00009a30-ae93-4408-b377-2e47b34d3b5b_400x400.webp 1272w, https://substackcdn.com/image/fetch/$s_!4Sd-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00009a30-ae93-4408-b377-2e47b34d3b5b_400x400.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">From Idiocracy (see the <a href="https://www.youtube.com/watch?v=x6C5tI208o0">video </a>for the full clip)</figcaption></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.hotds.dev/subscribe?"><span>Subscribe now</span></a></p><h2>Quotable Humans</h2><ul><li><p><a href="https://brooker.co.za/blog/2024/12/17/occ-and-isolation.html">Marc Brooker</a> <em>on why snapshot isolation is a sweet spot</em>: It&#8217;s a crucial difference because of one of the cool and powerful things that SQL databases make easy: <code>SELECT</code>s. You can grow a transaction&#8217;s write set with <code>UPDATE</code> and <code>INSERT</code> and friends, but most OLTP applications don&#8217;t tend to. You can grow a transaction&#8217;s read set with any <code>SELECT</code>, and many applications do that. If you don&#8217;t believe me, go look at the ratio between predicate (i.e. not exact PK equality) <code>SELECT</code>s in your code base versus predicate <code>UPDATE</code>s and <code>INSERT</code>s. If the ratios are even close, you&#8217;re a little unusual. &#8230;This is where we enter a world of trade-offs<a href="https://brooker.co.za/blog/2024/12/17/occ-and-isolation.html#foot3"><sup>3</sup></a>: avoiding SI&#8217;s write skew requires the database to abort (or, sometimes, just block) transactions based on what they <em>read</em>.</p></li><li><p><a href="https://x.com/charliermarsh/status/1878081371907694967">Charlie Marsh</a>: It was really valuable for me to stay at a single company long enough to live with the consequences of my own engineering decisions. To come face-to-face with my own technical debt.</p></li><li><p><a href="https://databasearchitects.blogspot.com/2024/12/what-are-important-data-systems.html">Viktor Leis</a> <em>shares the results of a panel discussion on under-researched database problems</em>: </p><ul><li><p>One significant yet understudied problem raised by multiple panellists is the handling of variable-length strings. &#8230; Dealing with strings presents two major challenges. First, query processing is often slow due to the variable size of strings and the (time and space) overhead of dynamic allocation. Second, surprisingly little research has been dedicated to efficient database-specific string compression. Given the importance of strings on real-world query performance and storage consumption, it is surprising how little research there is on the topic (there <a href="https://sigmodrecord.org/publications/sigmodRecord/2103/pdfs/16_och-gubner.pdf">are</a> <a href="https://15721.courses.cs.cmu.edu/spring2020/papers/09-compression/muller-edbt2014.pdf">some</a> <a href="https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf">exceptions</a>).</p></li><li><p>While database researchers often focus on database engine architectures, Andy argued that surrounding topics, such as <a href="https://www.vldb.org/pvldb/vol16/p3335-butrovich.pdf">network connection handling</a> (e.g., database proxies), receive little attention despite their practical importance. Surprisingly, there is also limited research on scheduling database workloads and optimizing the network stack, even though <a href="https://www.cs.cit.tum.de/fileadmin/w00cfj/dis/papers/LookingGlass2_CIDR25.pdf">communication bottlenecks</a> frequently constrain efficient OLTP systems.</p></li></ul></li><li><p><a href="https://www.linkedin.com/pulse/principal-engineer-roles-framework-mai-lan-tomsen-bukovec-142df/">Mai-Lan Tomsen Bukovec</a> <em>shared the basics of the Principal Engineer Roles Framework</em>: if there is one thing that I have learned, it is that when you run complex systems at scale, you must think deeply about how teams work. It&#8217;s not enough to be get into the details about <em>what </em>you build. You have to spend lots of time engineering, iterating, and improving <em>how</em> you and your team operate.</p></li><li><p><a href="https://www.cs.cmu.edu/~pavlo/blog/2025/01/2024-databases-retrospective.html">Andy Pavlo</a>: DuckDB has entered the zeitgeist as the default choice for someone wanting to run analytical queries on their data. Pandas previously held DuckDB's crowned position. Given DuckDB's insane portability, there are several efforts to stick it inside existing DBMSs that do not have great support for OLAP workloads. This year, we saw the release of four different extensions to stick DuckDB up inside Postgres.</p></li><li><p><a href="https://x.com/martin_casado/status/1872822491829420241">Martin Casado</a> <em>starts a fun thread of often-dangerous tech patterns (definitely ripe for some disagreement, get popcorn and remember he said *almost*)</em>: </p><ul><li><p>Systems ideas that sound good but almost never work: - DSLs - Live migrating process state - Anomaly detection - Control loops responding to system load - Multi-master writes - p2p cache sharing - Hybrid parallelism - Being clever vs over-provisioning .. What else?</p><ul><li><p>Nikita Shamgunov: Database land: * Unified OLTP and OLAP (guilty) * HTAP (feature not a market). Works as a feature though * API compat for databases (https://babelfishpg.org is the most recent flop) * Database migrations (from Oracle, Teradata, etc) * True geo distribution for a database (we will see about d-sql) * Shared nothing db architecture (sorry, I know you are an investor) P.S. Multi-master may actually work (<a href="https://t.co/4sx9ibsyfu">https://dl.acm.org/doi/10.1145/3626246.3653377&#8230;</a>). I'm looking into it.</p></li></ul></li></ul></li><li><p><a href="https://x.com/sunbains/status/1870556830168211535">Sunny Bains</a> <em>kicks off some discussion of SQL and scaling</em>: When someone tells you that SQL doesn&#8217;t scale, they are either selling you a KV store, they read it on the Internet somewhere or are totally clueless and want to sound smart. I&#8217;ve never understood what SQL has to do with scaling.</p><ul><li><p><a href="https://x.com/ovaistariq/status/1870568861860495492">Ovais Tariq</a>: Almost all high-end services built on SQL database such as Facebook, Uber, etc restrict the SQL language exposed to the users to the most basic set. Transactional databases scale if you reduce the surface area of features of the SQL language is what I am getting at.</p></li><li><p><a href="https://x.com/isamlambert/status/1870569262995435560">Sam Lambert</a>: it&#8217;s also why scaling while doing things like postgres extensions is a pipe dream. too much entropy. </p></li><li><p><a href="https://x.com/thrawn01/status/1870649339342885127">Derrick Wippler</a>: THIS! Also, So many fail to realize that for each JOIN you add there is a 10x or more performance penalty. You can't defy the laws of physics. You CAN use SQL to scale, you just can't abuse it as if these features don't have a cost.</p></li></ul></li><li><p><a href="https://x.com/jamesacowling/status/1869571885710946783">James Cowling</a>: I often see code that assumes database auto-increment ids are monotonically increasing. e.g., AUTO_INCREMENT in MySQL, SERIAL in Postgres. They are not. They may have gaps plus don't reflect commit order, so may show up out of order. It's easy to write bugs that walk over a table assuming this is an actual ordering.</p><ul><li><p><a href="https://x.com/sunbains/status/1869787187728003161">Sunny Bains</a>: The problem around auto-increment is due to historic reasons. Up to SQL-92 there was no mention of sequences/auto-incrementt. Every db vendor had their own syntax and implementation quirks. SQL 2003 was the first to introduce sequences officially and monotonicity was not actually specified (AFAIR, I remember discussing this when I rewrote InnoDB&#8217;s auto-increment handling). SQL 2008 addressed the monotonicity part but AFAIK doesn&#8217;t mandate it either, allows for non-monotonicity, values are allowed to be generated out of order when used concurrently. Relying on any specific behaviour is not based on any standard, it&#8217;s vendor specific only.</p></li><li><p><a href="https://x.com/pigol1/status/1869574453249892659">Piyush Goel</a>: This happens especially when you perform batched inserts in a concurrent manner. The engine creates blocks of ids that are spaced out to avoid conflicts. I made a terrible blunder in estimating the size of a critical table by looking at the auto-inc id. I only realized much later that it didn&#8217;t tally with the count(*) value and went on a deep-dive to understand the auto-inc behavior.</p></li></ul></li><li><p><a href="https://x.com/sunbains/status/1867614095928860731">Sunny Bains</a>: When writing multi-threaded programs remember to test it on HW with multiple sockets. Performance drop due to shared state across sockets is quite depressing to watch. Modern CPUs have made it even more interesting with all kinds of Ln cache sharing combinations. I&#8217;ve seen many examples of &#8220;it scaled really well on my Mac/PC/laptop&#8221;.</p><ul><li><p><a href="https://x.com/BonesMoses/status/1868013913981301002">Shaun Thomas</a>: The Numa effect is real. It's one reason I test with and without CPU pinning in virtual environments, because I want to see how bad the degradation is if the load migrates to a cold socket.</p></li></ul></li><li><p><a href="https://x.com/YingjunWu/status/1878258292415508920">Yingjun Wu</a>: While many database vendors are competing in the analytics space (trying to be the next Snowflake or Databricks!), not many are going after Redis. The truth is, a lot of companies complain that Redis is too expensive. I predict that, in 2025, some players will emerge to challenge Redis with an &#8216;S3 as the primary storage&#8217; architecture.</p></li><li><p><a href="https://x.com/YingjunWu/status/1877080471735251245">Yingjun Wu</a>: An interesting observation I've made in the database area is that the current trend in <a href="https://x.com/hashtag/AgenticAI?src=hashtag_click">#AgenticAI</a> seems to benefit row stores more than columnar stores. Over the past few years, the focus has been on OLAP, with all database vendors racing to build or enhance their columnar stores. However, what today&#8217;s agentic AI actually needs is a search index for a knowledge cache - sth that can be efficiently maintained in a key-value store, a search engine, or even a system like </p><p>@PostgreSQL. What goes around comes around... and then around&#8230;</p></li><li><p><a href="https://bsky.app/profile/marcbrooker.bsky.social/post/3ldjhmb7vqk2k">Marc Brooker</a>: To understand the value of backoff (e.g. exponential backoff), it's worth understanding the distinction between 'open' and 'closed' systems. From the classic paper "Open versus Closed: A Cautionary tale" <a href="https://www.usenix.org/conference/nsdi-06/open-versus-closed-cautionary-tale">https://www.usenix.org/conference/nsdi-06/open-versus-closed-cautionary-tale</a></p></li><li><p><a href="https://x.com/MarcJBrooker/status/1877006557692494284">Marc Brooker</a>: For immutable or versioned data? Erasure coding. Constant work, tunable cost/latency trade-off, operational benefits, and (relatively) simple client-side implementation. Treat slow responses as erasures.</p></li><li><p><a href="https://bsky.app/profile/jeremymorrell.dev/post/3ldol7ndpfc2g">Jeremy Morell</a>: The "use tail sampling for your traces" advice should probably also come with a strong "you must be this tall to ride this ride" caveat Simple if you have a monolith, challenging if you have a cluster of microservices, jesus take the wheel if you have geo-distributed traces crossing regions.</p><ul><li><p><a href="https://bsky.app/profile/isburmistrov.bsky.social/post/3ldornnuboc2r">Ivan Burmistrov</a>: IMO sampling is one of the most undercovered topics in the whole o11y area. There are either claims "sampling is not needed" (confusing, untrue), or this one you mentioned. There are no proper guidances, examples of how to do it properly.</p></li></ul></li><li><p><a href="https://bsky.app/profile/ry.codes/post/3lfl3443nfs2p">Ryanne Dolan</a>: Meta and Salesforce both just announced they have halted hiring of SWEs cuz AI has replaced them. And you STILL think your job is safe??</p></li><li><p><a href="https://x.com/GergelyOrosz/status/1873617464594198830">Gergely Orosz</a>: Anyone saying that GenAI could replace software engineers don't understand how software is created (and operated.) Tool innovations have always make the process of building software faster, cheaper: GenAI and AI agents will also do this. These are tools and efficiency gains.</p></li><li><p><a href="https://bsky.app/profile/kelseyhightower.com/post/3lemjvte6oc2i">Kelsey Hightower</a>: DeepSeek, a LLM trained for a fraction of the cost of GPT-Xx models, in 2 months for 6 million, on limited GPUs due to export restrictions, and competing head to head. This is crazy. If these numbers hold up, consider the game changed.</p></li><li><p><a href="https://x.com/rakyll/status/1877508848174379340">Jaana Dogan</a>: Product flywheels are so much easier to create if you have decent infrastructure that allows you to recompose and create product experiences quickly. It's a lesson hard to learn if you never had a chance to work for a company with the right building blocks.</p></li><li><p><a href="https://bsky.app/profile/gwenshap.bsky.social/post/3lf73lzqwcc2t">Gwen Shapira</a>: Everyone: LLMs are so intelligent that they'll take our jobs! 2025 is the year of agents and robots! Roomba: inhales 2 usb cables and a cat toy. Proceeds to get stuck humping my Poang chair.</p></li><li><p><a href="https://www.oneusefulthing.org/p/what-just-happened">Ethan Mollick</a> <em>muses on the recent advancements in AI models</em>: </p><ul><li><p>As one fun example, I read <a href="https://nationalpost.com/news/canada/black-plastic">an article about a recent social media panic</a> - an academic paper suggested that black plastic utensils could poison you because they were partially made with recycled e-waste. A compound called BDE-209 could leach from these utensils at such a high rate, the paper suggested, that it would approach the safe levels of dosage established by the EPA. A lot of people threw away their spatulas, but McGill University&#8217;s Joe Schwarcz thought this didn&#8217;t make sense and identified a math error where the authors incorrectly multiplied the dosage of BDE-209 by a factor of 10 on the seventh page of the article - an error missed by the paper&#8217;s authors and peer reviewers. I was curious if o1 could spot this error. So, from my phone, I pasted in the <a href="https://www.sciencedirect.com/science/article/pii/S0045653524022173?via%3Dihub">text of the PDF</a> and typed: &#8220;carefully check the math in this paper.&#8221; That was it. o1 spotted the error immediately (other AI models did not).</p></li><li><p>In fact, even the earlier version of o1, the preview model, seems to represent a leap in scientific ability. <a href="https://arxiv.org/pdf/2412.10849">A bombshell of a medical working paper</a> from Harvard, Stanford, and other researchers concluded that &#8220;o1-preview demonstrates <em>superhuman performance</em> [emphasis mine] in differential diagnosis, diagnostic clinical reasoning, and management reasoning, superior in multiple domains compared to prior model generations and human physicians."</p></li><li><p>Potentially more significantly, I have increasingly been told by researchers that o1, and especially o1-pro, is generating novel ideas and solving unexpected problems in their field (<a href="https://x.com/DeryaTR_/status/1865111388374601806?t=vg9mDb5x6k9zfgD5pPW3wQ&amp;s=03">here is one case</a>).</p></li><li><p>&#8230;the lesson to take away from this is that, for better and for worse, we are far from seeing the end of AI advancement.</p></li></ul></li><li><p><a href="https://hackingsaas.thenile.dev/p/what-every-saas-developer-should-da9">Gwen Shapira</a>: I believe that this time next year, we&#8217;ll look at AI validation and observability the same way we look at unit tests today - an essential tool for continuous improvement process.</p></li><li><p><a href="https://www.honeycomb.io/blog/observability-age-of-ai">Charity Majors and Phillip Carter</a>: One disappointing aspect of the current boom is how many companies are being incredibly closed-lipped about the practical aspects of developing with LLMs. Most leading AI companies seem reluctant to show their work or talk about how they resolve the contradictions of applying software engineering best practices to nondeterministic systems, or how AI is changing the way they develop software and collaborate with each other. They act like this is part of their secret sauce, or their competitive advantage.</p></li><li><p><a href="https://aiguide.substack.com/p/did-openai-just-solve-abstract-reasoning">Melanie Mitchell</a> <em>muses on whether o3 has solved abstract reasoning or not</em>:</p><ul><li><p>The purpose of abstraction is to be able to quickly and flexibly recognize new situations using known concepts, and to act accordingly. That is, the purpose of abstraction&#8212;at least a major purpose&#8212;is to generalize.</p></li><li><p>The o1 and o3 systems are a bit different. They use a pre-trained LLM, but at inference time, when given a new problem, they do a lot of additional computation, namely, generating their chain-of-thought traces. </p></li><li><p>One set of researchers <a href="https://proceedings.mlr.press/v70/kansky17a/kansky17a.pdf">showed</a>, however, that changing the game just by moving the paddle up a few pixels resulted in the original trained system performing dramatically worse. It seems that the system had learned to play Breakout not by learning the concepts of &#8220;paddle&#8221;, &#8220;ball&#8221;, or &#8220;brick&#8221;, but by learning very specific mappings of pixel configurations into actions. That is, it didn&#8217;t learn the kinds of abstractions that would allow it to generalize.</p><p>I have similar questions about the abstractions discovered by o3 and the other winning ARC programs.</p></li></ul></li></ul><h2>Interesting topic: AI agents and the recent advancements in AI models</h2><p>Since issue <a href="https://www.hotds.dev/p/humans-of-the-data-sphere-issue-5">#5</a>, two interesting blog posts have been written about AI agents and many predict that 2025 will be the year of the AI agent. </p><ul><li><p>Anthropic wrote <a href="https://www.anthropic.com/research/building-effective-agents">Building Effective Agents</a>.</p></li><li><p>Chip Huyen wrote <a href="https://huyenchip.com//2025/01/07/agents.html">Agents</a>.</p></li></ul><p>Ethan Mollick has also recently published a number of excellent blog posts:</p><ul><li><p><a href="https://www.oneusefulthing.org/p/the-present-future-ais-impact-long">The Present Future: AI's Impact Long Before Superintelligence</a></p></li><li><p><a href="https://www.oneusefulthing.org/p/prophecies-of-the-flood">Prophecies of the Flood</a></p></li><li><p><a href="https://www.oneusefulthing.org/p/what-just-happened">What just happened</a></p></li></ul><p>In this section of issue #6, we&#8217;ll explore what AI agents are as well as some of the challenges involved.</p><p>At the most abstract level, Chip Huyen defines an agent in her <a href="https://huyenchip.com//2025/01/07/agents.html">Agents blog post</a>: </p><blockquote><p><em>An agent is anything that can perceive its environment and act upon that environment. Artificial Intelligence: A Modern Approach (1995) defines an agent as anything that can be viewed as perceiving its environment through sensors and acting upon that environment through actuators. This means that an agent is characterized by the environment it operates in and the set of actions it can perform.</em></p></blockquote><p>Taking actions is a defining characteristic of an AI agent compared to just an LLM that provides textual or graphical responses to prompts. Ethan Mollick <a href="https://www.oneusefulthing.org/i/151140006/using-our-tools-and-rules">notes</a> that much of the work in modernity is digital and something that an AI could plausibly do.</p><blockquote><p><em>The digital world in which most knowledge work is done involves using a computer&#8212;navigating websites, filling forms, and completing transactions. Modern AI systems can now perform these same tasks, effectively automating what was previously human-only work. This capability extends beyond simple automation to include qualitative assessment and problem identification.</em></p></blockquote><p>Anthropic discuss the definition of an agent in their <a href="https://www.anthropic.com/research/building-effective-agents">Building Effective Agents</a> blog post: </p><blockquote><p><em>"Agent" can be defined in several ways. Some customers define agents as fully autonomous systems that operate independently over extended periods, using various tools to accomplish complex tasks. Others use the term to describe more prescriptive implementations that follow predefined workflows. At Anthropic, we categorize all these variations as <strong>agentic systems</strong>, but draw an important architectural distinction between <strong>workflows </strong>and<strong> agents</strong>:</em></p><ul><li><p><em><strong>Workflows</strong> are systems where LLMs and tools are orchestrated through predefined code paths.</em></p></li><li><p><em><strong>Agents</strong>, on the other hand, are systems where LLMs dynamically direct their own processes and tool usage, maintaining control over how they accomplish tasks.</em></p></li></ul></blockquote><p>This seems like an important distinction to make. A workflow is a kind of static flow chart of branches and actions that constrain what the AI can do. It&#8217;s prescriptive, more predictable but less flexible. A true AI agent on the other hand determines its own control flow, giving it the freedom to plan and execute flexibly, but comes with additional risk. Anthropic note that you should choose the simplest option possible, but when more complexity is needed then a workflow or agent may be required:</p><blockquote><p><em>&#8230;workflows offer predictability and consistency for well-defined tasks, whereas agents are the better option when flexibility and model-driven decision-making are needed at scale.</em></p><p>&#8230;<em>agents can be used for open-ended problems where it&#8217;s difficult or impossible to predict the required number of steps, and where you can&#8217;t hardcode a fixed path.&#8221;</em></p></blockquote><p>In a practical sense, an AI agent is an LLM designed to satisfy specific goals, using a suite of tools to help it interact with the real-world in order to satisfy those goals. Chip Huyen classifies the tools into three categories: </p><blockquote><p><em>Depending on the agent&#8217;s environment, there are many possible tools. Here are three categories of tools that you might want to consider: knowledge augmentation (i.e., context construction), capability extension, and tools that let your agent act upon its environment.</em></p></blockquote><p>In order to satisfy a goal, an agent must use a combination of:</p><ul><li><p>Effective planning and reasoning.</p><ul><li><p>The agent makes a plan of steps it needs to perform in order to satisfy the goal.</p></li></ul></li><li><p>Accurate tool selection and execution.</p><ul><li><p>The LLM may need to make API calls for information retrieval and/or makes changes or take actions in the real world.</p></li></ul></li><li><p>Self-reflection and evaluation.</p><ul><li><p>At every step, the agent should reflect on what it has planned and the results it has received to ensure it is still doing the right thing.</p></li></ul></li></ul><p>AI agents are stochastic systems which add a new flavor of risk to every step. Many agent systems require multiple steps to satisfy a goal and errors in each step can compound. This is one of the defining characteristics of AI agents that the agent designer must account for. In fact, accounting for all the failure modes of an agent is where the highest learning curve is found as well as most of the developmental cost.</p><p>As a distributed systems engineer, I&#8217;m probably more on the paranoid side of the risk-awareness spectrum. Through that lens I see all manner of challenges to overcome when building AI agents:</p><ul><li><p><strong>Effective Planning</strong>:</p><ul><li><p>AI agents must create plans that align with their goals while adapting to dynamic environments and incomplete information. Self-reflection and being able to change course may be necessary.</p></li><li><p>Plans may need to be evaluated to ensure that they are feasible, efficient, and contextually appropriate. Typically, we can view an agent as a multi-agent system where planning, execution and evaluation are carried out by separate agents that collaborate.</p></li><li><p>There are a number of things that can go wrong in the planning phase:</p><ul><li><p>The agent does not revise plans when new information contradicts initial assumptions.</p></li><li><p>The agent gets stuck in loops, revisiting the same steps repeatedly without making progress.</p></li><li><p>The agent sets inappropriate or harmful goals due to poorly defined prompts or objectives.</p></li></ul></li></ul></li><li><p><strong>Accurate Tool Selection and Usage</strong>:</p><ul><li><p>Agents need to identify the correct tools (e.g., APIs, models) for a task and invoke them properly.</p></li><li><p>Common issues include:</p><ul><li><p>Invoking the wrong tool. Or failing to consider multiple tools or approaches, leading to suboptimal performance.</p></li><li><p>Providing incorrect or incomplete inputs which can create wrong or suboptimal results.</p></li><li><p>Hallucinating non-existent tools.</p></li><li><p>Failing to recognize when tool outputs indicate anomalies, errors, or limitations (as in the humorous Idiocracy clip at the top of the issue).</p></li></ul></li></ul></li><li><p><strong>Reasoning and Decision-Making</strong>:</p><ul><li><p>Agents may struggle to interpret the results of their actions or external tool outputs.</p></li><li><p>Errors in reasoning can lead to invalid conclusions, impacting subsequent actions (the compounding of errors). Some reasoning errors may result from forgetting critical context or information needed to make accurate decisions.</p></li></ul></li><li><p><strong>Failure Modes in Execution</strong>:</p><ul><li><p>Agents can fail to execute actions correctly, leading to unintended consequences. The first challenge is detecting when actions are executed incorrectly and the second challenge is remediating such actions.</p></li><li><p>Difficulty handling edge cases or unexpected outcomes, or handling rare cases as general cases.</p></li><li><p>Monitoring and auditing agents may also be challenging. Not only detecting when things go wrong, but also detecting bias and justifying why certain actions were taken.</p></li></ul></li></ul><p>I could go on but you get the idea. I imagine that a lot of experimentation and iteration will go into AI agent development and getting that last 20% of completeness and polish could be really time consuming. Chip Huyen covers a lot of this in her framing of AI agent development. The Anthropic post also steers you the route of choosing the simplest agent, or no agent at all: </p><blockquote><p><em>When building applications with LLMs, we recommend finding the simplest solution possible, and only increasing complexity when needed. This might mean not building agentic systems at all. </em></p><p><em>&#8230;</em></p><p><em>Start with simple prompts, optimize them with comprehensive evaluation, and add multi-step agentic systems only when simpler solutions fall short. When implementing agents, we try to follow three core principles:</em></p><ul><li><p><em>Maintain <strong>simplicity</strong> in your agent's design.</em></p></li><li><p><em>Prioritize <strong>transparency</strong> by explicitly showing the agent&#8217;s planning steps.</em></p></li><li><p><em>Carefully craft your agent-computer interface (ACI) through thorough tool <strong>documentation and testing</strong>.&#8220;</em></p></li></ul></blockquote><p>AI agents and agentic systems are an emerging practice and I have to agree that 2025 will indeed be the year of the AI agent given the promise that AI agents hold and the rapid improvements in model capabilities.</p><p>However, with that said, I do have some serious concerns and I believe there will be two constraining aspects of AI agents that present a challenge to widespread adoption:</p><ul><li><p><strong>Reliability</strong>. There are so many failure modes and even the mitigations are usually run by LLMs and therefore have their own failure modes. Errors compound, detection and mitigations themselves may not be highly reliable.</p></li><li><p><strong>Cost</strong>. Agents may require multiple reasoning steps using the more powerful models. All this pushes up the cost. With higher costs come higher demands for the value proposition. Of course with the arrival of DeepSeek v3, maybe 2025 will also be the year of the more efficient LLM.</p></li></ul><p>Chip Huyen noted in her post: </p><blockquote><p><em>Compared to non-agent use cases, agents typically require more powerful models for two reasons:</em></p><ul><li><p><em><strong>Compound mistakes</strong>: an agent often needs to perform multiple steps to accomplish a task, and the overall accuracy decreases as the number of steps increases. If the model&#8217;s accuracy is 95% per step, over 10 steps, the accuracy will drop to 60%, and over 100 steps, the accuracy will be only 0.6%.</em></p></li><li><p><em><strong>Higher stakes</strong>: with access to tools, agents are capable of performing more impactful tasks, but any failure could have more severe consequences.</em></p></li></ul></blockquote><p>As AI becomes more and more capable but with non-trivial associated costs we may enter an age where cost efficiency is the primary decision maker about when to use AI vs when to use a human or not do the thing at all. If both AI and human workers can execute a digital task at similar levels of competence then cost efficiency becomes the defining question. <a href="https://x.com/fchollet/status/1870175296537907588">Fran&#231;ois Chollet</a> made this point over the holiday period:</p><blockquote><p><em>One very important thing to understand about the future: the economics of AI are about to change completely. We'll soon be in a world where you can turn test-time compute into competence -- for the first time in the history of software, marginal cost will become critical. Cost-efficiency will be the overarching measure guiding deployment decisions. How much are you willing to pay to solve X?</em></p></blockquote><p>In this early phase, agents are likely best suited to narrow tasks that do not involve important actions such as bank transfers, costly purchases, actions that cannot be undone without cost or negative impact. Ethan Mollick <a href="https://www.oneusefulthing.org/p/the-present-future-ais-impact-long">noted that</a>:</p><blockquote><p><em>Narrow agents are now a real product, rather than a future possibility. There are already many coding agents, and you can use experimental open-source agents that do <a href="https://agentlaboratory.github.io/">scientific </a>and <a href="https://github.com/virattt/ai-hedge-fund">financial </a>research.</em></p><p><em>Narrow agents are specialized for a particular task, which means they are somewhat limited. That raises the question of whether we soon see generalist agents where you can just ask the AI anything and it will use a computer and the internet to do it. <a href="https://simonwillison.net/2025/Jan/10/ai-predictions/">Simon Willison thinks not</a> despite what Sam Altman has argued. We will learn more as the year progresses, but if general agentic systems work reliably and safely, that really will change things, as it allows smart AIs to take action in the world.</em></p></blockquote><p>It will be fascinating to watch how agentic systems evolve as a category. We may see the adoption of agents happen with some ebb and flow but with a general trend towards greater adoption, as:</p><ul><li><p>The capabilities and in-production reliability and cost become known.</p></li><li><p>As patterns and practices evolve.</p></li><li><p>And of course, how the models themselves progress both in terms of capabilities but also cost efficiency.</p></li></ul><p>I&#8217;ll finish with one more <a href="https://www.oneusefulthing.org/p/the-present-future-ais-impact-long">quote </a>from Ethan Mollick:</p><blockquote><p><em>Organizations need to move beyond viewing AI deployment as purely a technical challenge. Instead, they must consider the human impact of these technologies. Long before AIs achieve human-level performance, their impact on work and society will be profound and far-reaching.</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Humans of the Data Sphere Issue #5 December 10th 2024]]></title><description><![CDATA[Your biweekly dose of insights, observations, commentary and opinions from interesting people from the world of databases, AI, streaming, distributed systems and the data engineering/analytics space.]]></description><link>https://www.hotds.dev/p/humans-of-the-data-sphere-issue-5</link><guid isPermaLink="false">https://www.hotds.dev/p/humans-of-the-data-sphere-issue-5</guid><dc:creator><![CDATA[Jack Vanlightly]]></dc:creator><pubDate>Tue, 10 Dec 2024 12:46:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50bf85b-a06e-4504-9d93-83d7c3c3419c_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Humans of the Data Sphere issue #5!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Humans of the Data Sphere! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>First, a Haiku for Cloudflare:</p><div class="pullquote"><p>One small adjustment, </p><p>Tides of load come rushing in, </p><p>Servers gasp, then sink.</p></div><p>Best meme:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s0x2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe81bb606-ce13-4ca9-a6ef-2a7c1b1c785d_2000x2000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s0x2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe81bb606-ce13-4ca9-a6ef-2a7c1b1c785d_2000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!s0x2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe81bb606-ce13-4ca9-a6ef-2a7c1b1c785d_2000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!s0x2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe81bb606-ce13-4ca9-a6ef-2a7c1b1c785d_2000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!s0x2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe81bb606-ce13-4ca9-a6ef-2a7c1b1c785d_2000x2000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s0x2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe81bb606-ce13-4ca9-a6ef-2a7c1b1c785d_2000x2000.jpeg" width="494" height="494" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e81bb606-ce13-4ca9-a6ef-2a7c1b1c785d_2000x2000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:494,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!s0x2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe81bb606-ce13-4ca9-a6ef-2a7c1b1c785d_2000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!s0x2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe81bb606-ce13-4ca9-a6ef-2a7c1b1c785d_2000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!s0x2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe81bb606-ce13-4ca9-a6ef-2a7c1b1c785d_2000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!s0x2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe81bb606-ce13-4ca9-a6ef-2a7c1b1c785d_2000x2000.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://bsky.app/profile/forrestbrazeal.bsky.social/post/3lax76f4vks2x">by Forrest Brazeal</a></figcaption></figure></div><h2>Quotable Humans</h2><ul><li><p><a href="https://bsky.app/profile/craigkerstiens.com/post/3lcgeuwfvwk2m">Craig Kerstiens</a> (quoting a <a href="https://news.ycombinator.com/item?id=42309685">comment </a>on HN about Aurora DSQL <a href="https://docs.aws.amazon.com/aurora-dsql/latest/userguide/working-with-postgresql-compatibility-unsupported-features.html">limitations</a>): "Postgres compatible" - No views/triggers/sequences - No foreign key constraints - No extensions - No NOTIFY ("ERROR: Function pg_notify not supported") - No nested transactions - No JSONB. What, what IS it compatible with?</p></li><li><p><a href="https://bsky.app/profile/gunnarmorling.dev/post/3lch3lrmctc2f">Gunnar Morling</a>: I think it's about time we get a TCK which asserts what "Postgres compatible" means. Like, you need to have sequences, foreign key constraints, views, etc. in order to be able to claim that.</p><ul><li><p><a href="https://bsky.app/profile/pgdba.bsky.social/post/3lckd7r3l6c27">DBA</a>: Something like this? Postgres compatibility index "alpha version" <a href="https://github.com/secp256k1-sha256/postgres-compatibility-index/tree/main/postgres-compatibility-index">https://github.com/secp256k1-sha256/postgres-compatibility-index/tree/main/postgres-compatibility-index</a> </p></li></ul></li><li><p><a href="https://dataengineeringcentral.substack.com/p/aws-s3-tables-the-iceberg-cometh">Daniel Beach</a>: AWS S3 Tables?! The Iceberg Cometh. weep moan, wail all ye Databricks and Snowflake worshipers</p></li><li><p><a href="https://bsky.app/profile/chris.blue/post/3lcgf352mxs2k">Chris Riccomini</a>: Lot's of interesting stuff happening in filesystem-on-object storage these days. <a href="https://regattastorage.com/">regattastorage.com</a> had a splashy YC launch, we have <a href="https://juicefs.com/">juicefs.com</a> and <a href="https://alluxio.io/">alluxio.io</a>, and been hearing about national labs using <a href="https://gluster.org/">gluster.org</a> &amp; <a href="https://ceph.io/">ceph.io</a>. Seems like market is growing for these offerings.</p></li><li><p><a href="https://bsky.app/profile/sriramsub.bsky.social/post/3lcdl32aakc2n">Sriram Subramanian</a>: Vector database companies will become one of the three </p><ul><li><p>a. Search platforms (e.g., Elastic) </p></li><li><p>b. AI platform (inference/training/pipeline) </p></li><li><p>c. OLTP provider (e.g., MongoDB, Postgres)</p><p>Hard for vector databases to be a separate offering/company</p></li></ul></li><li><p><a href="https://bsky.app/profile/jdlong.cerebralmastication.com/post/3lbk4plamfc2e">JD Long</a>: I have a kick ass quality engineering lead. She taught me about including QE folks in design so things get built easier to test. And about getting QE involved in logging &amp; monitoring. We&#8217;re calling it &#8220;shift left and right&#8221; which we should probably turn into a dance at the firm Christmas party.</p></li><li><p><a href="https://transactional.blog/notes-on/disaggregated-oltp">Alex Miller</a> (made some notes on disaggregated OLTP Systems): </p><ul><li><p>Socrates feels like a very modern object storage-based database in the WarpStream or turbopuffer kind of way for it being a 2019 paper. This architecture is the closest to Neon&#8217;s as well.</p></li><li><p>Thus, much of the PolarDB Serverless paper is about leveraging a multi-tenant scale-out memory pool, built via RDMA. This makes them also a disaggregated memory database! As a direct consequence, memory and CPU can be scaled independently, and the evaluation shows elastically changing the amount of memory allocated to a PolarDB tenant. However, implementing a page cache over RDMA isn&#8217;t trivial, and a solid portion of the paper is spent talking about the exact details of managing latches on remote memory pages and navigating b-tree traversals.</p></li></ul></li><li><p><a href="https://x.com/kellabyte/status/1863691277386027268">Kelly Sommers</a>: One thing I really notice coming back to C#/.NET space is many have been taught to value style over sound engineering. Given a task to build a report over millions of rows &amp; apply a custom calc to each row they will do this all in C#. Resisting SQL &amp; sprocs 500K round trips. [<em>This post triggered quite a lively discussion</em>]</p><ul><li><p><em>Personal note (Jack)</em>: Back in the days of C# 3, I rewrote a C# batch job written in this style, replacing it with a stored procedure, reducing running time from 24 hours to 11 seconds. It was my first week on the job and the DBA was thankful but the architect was not. We made a truce and the SP was still there 5 years later when I moved on.</p></li></ul></li><li><p><a href="https://x.com/chessMan786/status/1863216586414518766">Mohit Mishra</a>: <strong>CPU vs FPGA</strong> - what an easy and well explanation in 25 seconds. [<em>It&#8217;s a cool visualization</em>]</p></li><li><p><a href="https://x.com/airkatakana/status/1865282095708541286">Air Katakana</a>: what looks like &#8220;ai stealing jobs&#8221; to most people should look like &#8220;ai giving massive amount of leverage to individuals with high agency&#8221; to you</p></li><li><p><a href="https://x.com/antgoldbloom/status/1863734742610481385">Anthony Goldbloom</a>: My Kaggle experience suggests<strong> more than 75% of the machine learning models in production or written up in academic papers are overfit. </strong>Kaggle has strong controls on overfitting: - limited number of daily submissions - models were retested on a second test dataset that participants never received feedback on Under these conditions, a very high fraction of first-time competition participants would overfit to the public leaderboard set. And their position would drop dramatically when we retested their model on a second test dataset. This was true for experienced machine learners in academia and industry (not just newbies). The Kaggle controls are not imposed on data scientists for internal company projects or academic research.</p></li><li><p><a href="https://x.com/GergelyOrosz/status/1863563931966406971">Gergely Orosz</a>: There's this evergreen joke on software development that goes something like this: "We're done with 90% of the project. Which means we only have the other 90% left to go." It's funny because it's true. It's also why experienced engineers are in-demand: they are the "finishers."</p></li><li><p><a href="https://surfingcomplexity.blog/2024/11/28/quick-takes-on-the-latest-cloudflare-public-incident-write-up/">Lorin Hochstein</a>: The resilience engineering research David Woods uses the term <em>saturation</em> in a more general sense, to refer to a system being in a state where it can no longer meet the demands put upon it. The challenge of managing the risk of saturation is a key part of his <a href="https://www.researchgate.net/publication/327427067_The_Theory_of_Graceful_Extensibility_Basic_rules_that_govern_adaptive_systems">theory of graceful extensibility</a>.</p><p>It&#8217;s genuinely surprising how many incidents involve saturation, and how difficult it can be to recover when the system saturates.</p></li><li><p><a href="https://bsky.app/profile/rbn.bsky.social/post/3lcsqaswgus23">Reuben Bond</a> (<em>interesting discussion thread</em>): CRDTs fit a system model that has hardly any overlap with datacenter-based applications. If I'm wrong, please point to datacenter-based apps which have benefited from the application of CRDTs.</p></li><li><p><a href="https://meltware.com/2024/12/04/s3-tables">Nikhil Benesch</a> (on S3 Iceberg tables): Compaction costs are more of a mixed bag. For analytic workloads that write infrequently, they also look to be immaterial. But for streaming workloads that write frequently (say, once per second, or once per every ten seconds), compaction costs may be prohibitive. The cost per object processed looks tolerable (writing an object per second results in only 2.5MM objects per month that need to be compacted), but write amplification will be severe, and the cost per GB processed is likely to add up. To really get a sense for compaction costs, someone will need to run some experiments. A lot depends on how often S3 <em>chooses</em> to compact data files for a given workload, which is not something that&#8217;s directly under the user&#8217;s control.</p></li><li><p><a href="https://buttondown.com/jaffray/archive/what-are-the-magical-clocks-for/">Justin Jaffray</a> (discusses extremely accurate data center clocks): To the best of my knowledge, despite being a concept in the realm of <em>consistency</em>, the "clock trick" is only really necessary in a distributed <em>transactional</em> database, which is why we've only really seen it in Spanner and now DSQL, and it has an important connection to multi-version concurrency control (MVCC). </p><p>&#8230;</p><p>Now, the magic clocks are not <em>perfect</em>, they're not accurate to like, Planck time, or something. But they come with a guarantee that no two of them disagree by more than some bound. That is, when a server observes the time to be <code>t</code>, it knows that no other server will observe the time to be earlier than, say, <code>t-100</code>. The clocks of all the participants in the system are racing along a timeline, but there's a fixed-size window that they all fall within. This guarantee can be used to prevent the situation we described above. The guarantee we want is that once an operation finishes, no other operation will be ordered before it ever again.</p></li><li><p><a href="https://muratbuffalo.blogspot.com/2024/12/exploring-naiadclock-tla-model-in-tla.html">Murat Demirbas</a>: I have been impressed by the usability of <a href="https://github.com/will62794/tla-web">TLA-Web from Will Schultz</a>. Recently I have been using it for my TLA+ modeling of MongoDB catalog protocols internally, and found it very useful to explore and understand behavior. This got me thinking that TLA-Web would be really useful when exploring and understanding an unfamiliar spec I picked up on the web.</p><p>To test my hunch, I browsed through <a href="https://github.com/tlaplus/Examples">the TLA+ spec examples here</a>, and I came across <a href="https://github.com/tlaplus/Examples/tree/master/specifications/naiad">this spec about the Naiad Clock</a>. Since I had <a href="https://muratbuffalo.blogspot.com/2024/11/dbsp-automatic-incremental-view.html">read DBSP paper recently</a>, this was all the more interesting to me. I had <a href="https://muratbuffalo.blogspot.com/2014/03/naiad-timely-dataflow-system.html">written about Naiad in 2014</a>, and <a href="https://muratbuffalo.blogspot.com/2017/11/on-dataflow-systems-naiad-and-tensorflow.html">about dataflow systems more broadly in 2017</a>.</p></li><li><p><a href="https://www.onehouse.ai/blog/open-table-formats-and-the-open-data-lakehouse-in-perspective">Dipankar Mazumdar</a>: Adopting these table formats has laid the groundwork for openness. Still, it is crucial to recognize that an open data architecture needs more than just open table formats&#8212;it requires comprehensive interoperability across formats, catalogs, and open compute services for essential table management services such as clustering, compaction, and cleaning to also be open in nature.</p></li><li><p><a href="https://www.decodable.co/blog/failover-replication-slots-with-postgres-17">Gunnar Morling</a> (on Postgres 17 failover slots): Prior to Postgres version 16, read replicas (or stand-by servers) couldn&#8217;t be used at all for logical replication. Logical replication is a method for replicating data from a Postgres publisher to subscribers. These subscribers can be other Postgres instances, as well as non-Postgres tools, such as Debezium, which use logical replication for <strong><a href="https://www.decodable.co/blog/why-do-i-need-cdc">change data capture (CDC)</a></strong>. Logical replication slots&#8212;which keep track of how far a specific subscriber has consumed the database&#8217;s change event stream&#8212;could only be created on the primary node of a Postgres cluster.</p><p>&#8230;</p><p>But the good news is, as of Postgres version 17, all this is not needed any longer, as it finally supports failover slots out of the box!</p></li><li><p><a href="https://charity.wtf/2023/03/09/architects-anti-patterns-and-organizational-fuckery/">Charity Majors</a> (on architects): </p><ul><li><p>I think that <em>a lot</em> of companies are using some of their best, most brilliant senior engineers as glorified project manager/politicians to paper over a huge amount of organizational dysfunction, while bribing them with money and prestige, and that honestly makes me pretty angry.</p></li><li><p>Most of the pathologies associated with architects seem to flow from one of two originating causes:</p><ol><li><p>unbundling decision-making authority from responsibility for results, and</p></li><li><p>design becoming too untethered from execution (the &#8220;Frank Gehry&#8221; syndrome)</p></li></ol><p>But it&#8217;s only when being an architect brings more money and prestige than engineering that these problems really tend to solidify and become entrenched.</p></li><li><p>This is also why I think calling the role &#8220;architect&#8221; instead of &#8220;staff engineer&#8221; or &#8220;principal engineer&#8221; may itself be kind of an anti-pattern.</p></li></ul></li><li><p><a href="https://brooker.co.za/blog/2024/12/03/aurora-dsql.html">Marc Brooker</a> (discussing how various technologies came together to make DSQL possible): </p><ul><li><p>The second was EC2 <a href="https://aws.amazon.com/blogs/compute/its-about-time-microsecond-accurate-clocks-on-amazon-ec2-instances/">time sync</a>, which brings microsecond-accurate time to EC2 instances around the globe. High-quality physical time is <a href="https://brooker.co.za/blog/2023/11/27/about-time.html">hugely useful for all kinds of distributed system problems</a>. Most interestingly, it unlocks ways to avoid coordination within distributed systems, offering better scalability and better performance. The new horizontal sharding capability for Aurora Postgres, <a href="https://aws.amazon.com/blogs/aws/amazon-aurora-postgresql-limitless-database-is-now-generally-available/">Aurora Limitless Database</a>, uses these clocks to make cross-shard transactions more efficient.</p></li><li><p>The third was Journal, the distributed transaction log we&#8217;d used to build critical parts of multiple AWS services (such as <a href="https://aws.amazon.com/memorydb/">MemoryDB</a>, the Valkey compatible durable in-memory database<a href="https://brooker.co.za/blog/2024/12/03/aurora-dsql.html#foot4"><sup>4</sup></a>). Having a reliable, proven, primitive that offers atomicity, durability, and replication between both availability zones and regions simplifies a lot of things about building a database system (after all, <em>A</em>tomicity and <em>D</em>urability are half of ACID).</p></li><li><p>The fourth was AWS&#8217;s strong <a href="https://aws.amazon.com/blogs/security/an-unexpected-discovery-automated-reasoning-often-makes-systems-more-efficient-and-easier-to-maintain/">formal methods and automated reasoning tool set</a>. Formal methods allow us to explore the space of design and implementation choices quickly, and also helps us build reliable and dependable distributed system implementations<a href="https://brooker.co.za/blog/2024/12/03/aurora-dsql.html#foot6"><sup>6</sup></a>. Distributed databases, and especially fast distributed transactions, are a famously hard design problem, with tons of interesting trade-offs, lots of subtle traps, and a need for a strong correctness argument. Formal methods allowed us to move faster and think bigger about what we wanted to build.</p></li></ul></li><li><p><a href="https://medium.com/@hugolu87/lets-never-use-the-phrase-data-observability-ever-again-2d331f389585">Hugo Lu</a>: Which leads to this &#8220;Data Observability Paradox&#8221; &#8212; although they claim to solve data quality they cannot. They can tell you where the problem is, but they do not solve the root cause. Indeed, the root cause is solved by having robust infrastructure (ingestion, orchestration, alerting etc) but most commonly, individuals not caring enough about the data. A cultural problem &#8212; not one that can be solved with Software.</p></li><li><p><a href="https://davidsj.substack.com/p/modellion">David Jayatillake</a>: Let&#8217;s start with a TLDR; Medallion Architecture is not a form of data modeling. It is associated with data modeling, and data modeling happens within it &#8230; I would prefer naming like <strong>staging</strong>, <strong>model</strong> and <strong>presentation</strong>. This is much closer to what people already know and expresses what actually happens in the layers. Bronze, silver and gold make it easier to explain to non-technical users. That&#8217;s the only reason why the product marketers have gone for Medallion architecture, although whether non-technical users really need to understand &#8220;how the sausage is made&#8221; is another question.</p></li><li><p><a href="https://www.oneusefulthing.org/p/15-times-to-use-ai-and-5-not-to">Ethan Mollick</a> (suggestions on when and when not to use AI, I took one of each): </p><ul><li><p><em>When</em>: Work where you need a first pass view at what a hostile, friendly, or naive recipient might think.</p></li><li><p><em>When not</em>: When the effort is the point. In many areas, people need to struggle with a topic to succeed - writers rewrite the same page, academics revisit a theory many times. By shortcutting that struggle, no matter how frustrating, you may lose the ability to reach the vital &#8220;aha&#8221; moment.</p></li></ul></li></ul><h2>Interesting topic #1: Another incident, another config change</h2><p>I loved Lorin Hochstein's &#8220;<a href="https://surfingcomplexity.blog/2024/11/28/quick-takes-on-the-latest-cloudflare-public-incident-write-up/">quick takes</a>&#8220; of <a href="https://blog.cloudflare.com/cloudflare-incident-on-november-14-2024-resulting-in-lost-logs/">Cloudflare's November 14, 2024, incident</a> (which led to log data loss). Beyond that it was triggered by a config change, the post highlights several recurring patterns in system failures.</p><ol><li><p>Saturation and Overload</p></li><li><p>Safety Mechanisms Backfiring</p></li><li><p>Complex Interactions and Latent Bugs</p></li></ol><p>It&#8217;s a great read, with references to:</p><ul><li><p>Brendan Gregg&#8217;s <a href="https://www.brendangregg.com/usemethod.html">USE method</a> that has shaped my own approach to running and monitoring distributed data systems. </p></li><li><p>David Woods' Theory of Graceful Extensibility [<a href="https://www.researchgate.net/publication/327427067_The_Theory_of_Graceful_Extensibility_Basic_rules_that_govern_adaptive_systems/link/5b92b4584585153a5303568c/download">download from here</a>] (which explores how complex systems adapt to increasing demands or pressures beyond their designed capacity, focusing on their ability to stretch and evolve rather than collapse under stress).</p></li><li><p>Lorin&#8217;s own work on safety mechanisms (such as his blog post <a href="https://surfingcomplexity.blog/2017/06/24/a-conjecture-on-why-reliable-systems-fail/">A Conjecture on Why Reliable Systems Fail</a>).</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BpLG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c33b041-643f-4a10-a8df-fa7fb2a780de_500x756.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BpLG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c33b041-643f-4a10-a8df-fa7fb2a780de_500x756.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BpLG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c33b041-643f-4a10-a8df-fa7fb2a780de_500x756.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BpLG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c33b041-643f-4a10-a8df-fa7fb2a780de_500x756.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BpLG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c33b041-643f-4a10-a8df-fa7fb2a780de_500x756.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BpLG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c33b041-643f-4a10-a8df-fa7fb2a780de_500x756.jpeg" width="300" height="453.6" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c33b041-643f-4a10-a8df-fa7fb2a780de_500x756.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:756,&quot;width&quot;:500,&quot;resizeWidth&quot;:300,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Two button meme.\nLeft button: automated recovery good.\nRight button: complexity bad.\nCaption: adding automation adds complexity.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Two button meme.
Left button: automated recovery good.
Right button: complexity bad.
Caption: adding automation adds complexity." title="Two button meme.
Left button: automated recovery good.
Right button: complexity bad.
Caption: adding automation adds complexity." srcset="https://substackcdn.com/image/fetch/$s_!BpLG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c33b041-643f-4a10-a8df-fa7fb2a780de_500x756.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BpLG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c33b041-643f-4a10-a8df-fa7fb2a780de_500x756.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BpLG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c33b041-643f-4a10-a8df-fa7fb2a780de_500x756.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BpLG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c33b041-643f-4a10-a8df-fa7fb2a780de_500x756.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">From <a href="https://surfingcomplexity.blog/2024/11/28/quick-takes-on-the-latest-cloudflare-public-incident-write-up/">Quick takes on the latest Cloudflare public incident write-up</a></figcaption></figure></div><p>He also discusses the tension between automated recovery and the additional complexity that such systems introduce.</p><h2>Interesting topic #2: So many data modeling methodologies (for warehousing)</h2><p>TIL of Activity Schema, which I hadn&#8217;t heard of before, so I wondered if there were more (data warehousing) data modeling methodologies I didn&#8217;t know of, and what were the differences?</p><p>Here is a summary (feel free to curse me for my summarization choices). Later are some links to bloggers and practitioners that explore these modeling methodologies in far more detail.</p><ul><li><p><strong>Dimensional modeling (Kimball)</strong></p><ul><li><p>Needs little introduction. Arranges data into fact tables (quantitative pieces of data such as sales amounts, units sold) and dimension tables for descriptive attributes (customer, product, location, time). Forms a star or snowflake schema. Optimized for BI.</p></li><li><p><strong>Pros:</strong> Great for users to understand and write analytical queries against. The star schema reduces the need for complex joins, which can be expensive.</p></li><li><p><strong>Cons:</strong> Not super flexible. Not so great at fast changing transactional data.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8JhQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccc5821-a8be-4bbc-b192-fa80ddb7d364_678x749.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8JhQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccc5821-a8be-4bbc-b192-fa80ddb7d364_678x749.png 424w, https://substackcdn.com/image/fetch/$s_!8JhQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccc5821-a8be-4bbc-b192-fa80ddb7d364_678x749.png 848w, https://substackcdn.com/image/fetch/$s_!8JhQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccc5821-a8be-4bbc-b192-fa80ddb7d364_678x749.png 1272w, https://substackcdn.com/image/fetch/$s_!8JhQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccc5821-a8be-4bbc-b192-fa80ddb7d364_678x749.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8JhQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccc5821-a8be-4bbc-b192-fa80ddb7d364_678x749.png" width="309" height="341.35840707964604" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ccc5821-a8be-4bbc-b192-fa80ddb7d364_678x749.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:749,&quot;width&quot;:678,&quot;resizeWidth&quot;:309,&quot;bytes&quot;:48380,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8JhQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccc5821-a8be-4bbc-b192-fa80ddb7d364_678x749.png 424w, https://substackcdn.com/image/fetch/$s_!8JhQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccc5821-a8be-4bbc-b192-fa80ddb7d364_678x749.png 848w, https://substackcdn.com/image/fetch/$s_!8JhQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccc5821-a8be-4bbc-b192-fa80ddb7d364_678x749.png 1272w, https://substackcdn.com/image/fetch/$s_!8JhQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccc5821-a8be-4bbc-b192-fa80ddb7d364_678x749.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul></li><li><p><strong>Normalized modeling (Inmon)</strong></p><ul><li><p>Focuses on creating a centralized, normalized enterprise data warehouse in Third Normal Form (3NF) to serve as a single source of truth for the organization, with a focus on consistency. Data from multiple source systems is integrated into a unified structure.</p></li><li><p><strong>Pros:</strong> Great for data quality as well as integration with other systems as the data model is optimized for consistency and logical organization (rather than optimized for a specific workload like dimensional modeling is).</p></li><li><p><strong>Cons</strong>: Relies on data marts as query performance is poor (think of a data mart as a business unit specific DW tailored to a more focused use case). Seems like a lot more work to maintain this organization-wide data model.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n1xl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F912ca3fc-b748-4888-8cdd-a20945faa2c8_1114x701.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n1xl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F912ca3fc-b748-4888-8cdd-a20945faa2c8_1114x701.png 424w, https://substackcdn.com/image/fetch/$s_!n1xl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F912ca3fc-b748-4888-8cdd-a20945faa2c8_1114x701.png 848w, https://substackcdn.com/image/fetch/$s_!n1xl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F912ca3fc-b748-4888-8cdd-a20945faa2c8_1114x701.png 1272w, https://substackcdn.com/image/fetch/$s_!n1xl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F912ca3fc-b748-4888-8cdd-a20945faa2c8_1114x701.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n1xl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F912ca3fc-b748-4888-8cdd-a20945faa2c8_1114x701.png" width="458" height="288.20287253141834" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/912ca3fc-b748-4888-8cdd-a20945faa2c8_1114x701.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:701,&quot;width&quot;:1114,&quot;resizeWidth&quot;:458,&quot;bytes&quot;:65042,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!n1xl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F912ca3fc-b748-4888-8cdd-a20945faa2c8_1114x701.png 424w, https://substackcdn.com/image/fetch/$s_!n1xl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F912ca3fc-b748-4888-8cdd-a20945faa2c8_1114x701.png 848w, https://substackcdn.com/image/fetch/$s_!n1xl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F912ca3fc-b748-4888-8cdd-a20945faa2c8_1114x701.png 1272w, https://substackcdn.com/image/fetch/$s_!n1xl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F912ca3fc-b748-4888-8cdd-a20945faa2c8_1114x701.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul></li><li><p><strong>Event-centric modeling (Activity Schema)</strong></p><ul><li><p>Focuses on capturing and organizing data around events or activities (e.g., a purchase, login, or page view) and storing them in a single central activity table known as the <strong>activity stream</strong>. <a href="https://github.com/ActivitySchema/ActivitySchema/blob/main/2.0.md">v2</a> allows for one table per activity. Each activity has a number of attributes that it is authoritative on, such as the web page visited, or value of the purchase etc. Activities in this single table are differentiated by an activity type string column. Each activity can optionally be linked to one or more entities (dimensions), such as the subject of the activity (the product purchased) or the actor (the user who did the purchase), or the location, and so on.</p></li><li><p><strong>Pros</strong>: With a shared event table, it is great for understanding actions over time, such as tracking user behavior, system logs, IoT data, or transactions. Captures raw detailed data that supports deep and flexible analysis.</p></li><li><p><strong>Cons</strong>: Can be challenging computationally (and storage) due to high cardinality of raw event data. Analytical queries involving joins or aggregations on high-cardinality columns (e.g., aggregating data by user, session, or time) can be slow and resource-intensive. Maintaining indexes can be challenging. High cardinality is a natural consequence of storing detailed, event-level data. There are a number of optimization techniques to mitigate these high-cardinality issues (e.g. data partitioning, aggregation, moving some attributes into dimensions, sampling, multiple activity stream tables etc).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ml3G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db8bdb5-eff4-48a4-a00d-ee6e7b16ed1e_756x704.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ml3G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db8bdb5-eff4-48a4-a00d-ee6e7b16ed1e_756x704.png 424w, https://substackcdn.com/image/fetch/$s_!ml3G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db8bdb5-eff4-48a4-a00d-ee6e7b16ed1e_756x704.png 848w, https://substackcdn.com/image/fetch/$s_!ml3G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db8bdb5-eff4-48a4-a00d-ee6e7b16ed1e_756x704.png 1272w, https://substackcdn.com/image/fetch/$s_!ml3G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db8bdb5-eff4-48a4-a00d-ee6e7b16ed1e_756x704.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ml3G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db8bdb5-eff4-48a4-a00d-ee6e7b16ed1e_756x704.png" width="357" height="332.44444444444446" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5db8bdb5-eff4-48a4-a00d-ee6e7b16ed1e_756x704.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:704,&quot;width&quot;:756,&quot;resizeWidth&quot;:357,&quot;bytes&quot;:59892,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ml3G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db8bdb5-eff4-48a4-a00d-ee6e7b16ed1e_756x704.png 424w, https://substackcdn.com/image/fetch/$s_!ml3G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db8bdb5-eff4-48a4-a00d-ee6e7b16ed1e_756x704.png 848w, https://substackcdn.com/image/fetch/$s_!ml3G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db8bdb5-eff4-48a4-a00d-ee6e7b16ed1e_756x704.png 1272w, https://substackcdn.com/image/fetch/$s_!ml3G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5db8bdb5-eff4-48a4-a00d-ee6e7b16ed1e_756x704.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul></li><li><p><strong>Data Vault </strong></p><ul><li><p>Organizes data into three core components: hubs, links, and satellites. <strong>Hubs</strong> store the unique business keys (e.g., customer IDs, product IDs) representing core business entities. <strong>Links</strong> capture the relationships between these hubs (e.g., which customer placed which order) and support many-to-many relationships. <strong>Satellites</strong> store the descriptive attributes of hubs and links. All store metadata for load timestamps and source system identifiers. Satellites enable an append-only approach as changes to attributes are simply appended, rather than overwriting, enabling detailed historical tracking and auditability. No need for Slowly Changing Dimensions (SCD).</p></li><li><p><strong>Pros</strong>: The modular and append-only design makes it easier to maintain incrementally, and even by different teams. It is highly flexible to change and schema evolution. It&#8217;s historical tracking is ideal for highly regulated environments.</p></li><li><p><strong>Cons</strong>: Queries are more complex (and expensive) than say dimensional modeling. It is also a less intuitive data model for users and analysts, so there may be some reliance on data marts. Due to its quite different data model, there is an associated learning curve though there is some Data Vault support in tooling to help.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xja8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c7a913-6b1e-445e-9ae4-15797f9220fe_922x597.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xja8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c7a913-6b1e-445e-9ae4-15797f9220fe_922x597.png 424w, https://substackcdn.com/image/fetch/$s_!Xja8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c7a913-6b1e-445e-9ae4-15797f9220fe_922x597.png 848w, https://substackcdn.com/image/fetch/$s_!Xja8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c7a913-6b1e-445e-9ae4-15797f9220fe_922x597.png 1272w, https://substackcdn.com/image/fetch/$s_!Xja8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c7a913-6b1e-445e-9ae4-15797f9220fe_922x597.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xja8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c7a913-6b1e-445e-9ae4-15797f9220fe_922x597.png" width="461" height="298.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0c7a913-6b1e-445e-9ae4-15797f9220fe_922x597.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:597,&quot;width&quot;:922,&quot;resizeWidth&quot;:461,&quot;bytes&quot;:55098,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Xja8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c7a913-6b1e-445e-9ae4-15797f9220fe_922x597.png 424w, https://substackcdn.com/image/fetch/$s_!Xja8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c7a913-6b1e-445e-9ae4-15797f9220fe_922x597.png 848w, https://substackcdn.com/image/fetch/$s_!Xja8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c7a913-6b1e-445e-9ae4-15797f9220fe_922x597.png 1272w, https://substackcdn.com/image/fetch/$s_!Xja8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c7a913-6b1e-445e-9ae4-15797f9220fe_922x597.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul></li><li><p><strong>Anchor modeling</strong></p><ul><li><p>It has some similarities with Data Vault, as it focuses on separating core entities (<strong>anchors</strong>) from their <strong>attributes</strong> as well as relationships between entities (known as <strong>ties</strong>). However, anchor modeling is more highly normalized and is less focused on auditability than Data Vault, with a stronger focus on adaptability and schema evolution. One of the primary goals of Anchor Modeling is to support schema flexibility and evolution without disrupting existing structures. Therefore each attribute gets its own table, new attributes can be added without modifying existing tables, ensuring non-disruptive schema updates. This is a more extreme level of normalization than other methodologies. New attributes or relationships can be added without altering existing tables. Schema changes are handled as non-disruptive extensions. Each attribute and tie table track historical changes using validity period columns (ValidFrom, ValidTo), enabling point-in-time analysis.</p></li><li><p><strong>Pros</strong>: Very adaptable to change. Good support for historical analysis and point-in-time queries.</p></li><li><p><strong>Cons</strong>: Similar to Data Vault, except there is less support in tooling. Due to the one-table-per-attribute, there can be more joins.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FL0v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42851f58-1fe9-485b-98c4-78093821450f_805x537.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FL0v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42851f58-1fe9-485b-98c4-78093821450f_805x537.png 424w, https://substackcdn.com/image/fetch/$s_!FL0v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42851f58-1fe9-485b-98c4-78093821450f_805x537.png 848w, https://substackcdn.com/image/fetch/$s_!FL0v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42851f58-1fe9-485b-98c4-78093821450f_805x537.png 1272w, https://substackcdn.com/image/fetch/$s_!FL0v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42851f58-1fe9-485b-98c4-78093821450f_805x537.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FL0v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42851f58-1fe9-485b-98c4-78093821450f_805x537.png" width="427" height="284.8434782608696" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42851f58-1fe9-485b-98c4-78093821450f_805x537.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:537,&quot;width&quot;:805,&quot;resizeWidth&quot;:427,&quot;bytes&quot;:53585,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FL0v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42851f58-1fe9-485b-98c4-78093821450f_805x537.png 424w, https://substackcdn.com/image/fetch/$s_!FL0v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42851f58-1fe9-485b-98c4-78093821450f_805x537.png 848w, https://substackcdn.com/image/fetch/$s_!FL0v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42851f58-1fe9-485b-98c4-78093821450f_805x537.png 1272w, https://substackcdn.com/image/fetch/$s_!FL0v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42851f58-1fe9-485b-98c4-78093821450f_805x537.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul></li><li><p><strong>Wide-table / One Big Table (OBT) modeling</strong></p><ul><li><p>Combines data from multiple sources into a denormalized single table.</p></li><li><p><strong>Pros</strong>: Great for read performance, no joins required. Practical - especially when you are using a columnar storage system such as ClickHouse, Snowflake, BigQuery etc. Even better if it can be maintained via pre-aggregation.</p></li><li><p><strong>Cons</strong>: Not flexible. Harder to maintain as data shape changes. Harder to keep consistent.</p></li></ul></li></ul><p>These methodologies also cover more than just data modeling, such as how data goes through stages of processing and how data is queried from BI tools.</p><p>There are a number of people who write about this stuff (not an exhaustive list):</p><ul><li><p>Joe Reis and his <a href="https://practicaldatamodeling.substack.com/">Practical Data Modeling substack</a></p></li><li><p>Simon Sp&#228;ti, who maintains his <a href="https://www.ssp.sh/brain/">Second Brain</a>, with plenty of content on <a href="https://www.ssp.sh/brain/data-modeling">data modeling</a>.</p></li><li><p>Kent Graziano <a href="https://kentgraziano.com/category/data-vault/">writes a lot about Data Vault</a>.</p></li><li><p>Hans Hultgren also <a href="https://hanshultgren.wordpress.com/">writes a lot about Data Vault</a>.</p></li><li><p>Dave Wells <a href="https://www.eckerson.com/blogs/data-management">writes about data modeling</a> and data management in general.</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Humans of the Data Sphere! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Humans of the Data Sphere Issue #4 November 22nd 2024]]></title><description><![CDATA[Your biweekly dose of insights, observations, commentary and opinions from interesting people from the world of databases, AI, streaming, distributed systems and the data engineering/analytics space.]]></description><link>https://www.hotds.dev/p/humans-of-the-data-sphere-issue-4</link><guid isPermaLink="false">https://www.hotds.dev/p/humans-of-the-data-sphere-issue-4</guid><dc:creator><![CDATA[Jack Vanlightly]]></dc:creator><pubDate>Fri, 22 Nov 2024 14:41:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50bf85b-a06e-4504-9d93-83d7c3c3419c_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Humans of the Data Sphere issue #4!</p><p>Best meme (referring to the idea of <a href="https://github.com/frectonz/pglite-fusion">storing SQLite databases in a Postgres database</a>):</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Humans of the Data Sphere! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kMYj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966f6ea9-cf7e-408e-88fd-07d86474b6bb_622x401.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kMYj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966f6ea9-cf7e-408e-88fd-07d86474b6bb_622x401.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kMYj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966f6ea9-cf7e-408e-88fd-07d86474b6bb_622x401.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kMYj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966f6ea9-cf7e-408e-88fd-07d86474b6bb_622x401.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kMYj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966f6ea9-cf7e-408e-88fd-07d86474b6bb_622x401.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kMYj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966f6ea9-cf7e-408e-88fd-07d86474b6bb_622x401.jpeg" width="424" height="273.3504823151125" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/966f6ea9-cf7e-408e-88fd-07d86474b6bb_622x401.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:401,&quot;width&quot;:622,&quot;resizeWidth&quot;:424,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!kMYj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966f6ea9-cf7e-408e-88fd-07d86474b6bb_622x401.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kMYj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966f6ea9-cf7e-408e-88fd-07d86474b6bb_622x401.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kMYj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966f6ea9-cf7e-408e-88fd-07d86474b6bb_622x401.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kMYj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966f6ea9-cf7e-408e-88fd-07d86474b6bb_622x401.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://x.com/BonesMoses/status/1858923178728308906">By Shaun Thomas</a></figcaption></figure></div><h2>Quotable Humans</h2><ul><li><p><a href="https://bsky.app/profile/allendowney.bsky.social/post/3l7xvzjyerj2g">Allen Downey</a>: In August I had the pleasure of presenting a talk at posit::conf, called A Future of Data Science, in which I assert that data science exists because statistics missed the boat on computation.</p></li><li><p><a href="https://bsky.app/profile/eugeneyan.bsky.social/post/3lafmvmz5762z">Eugene Yan</a> (and <a href="https://eugeneyan.com/writing/conf-lessons/">blog post</a>): Here are 39 lessons I took away from conferences this year. <em>[a selection follows]</em></p><ul><li><p>4. Machine learning involves trade-offs. Recall vs. precision. Explore vs. exploit. Relevance vs. diversity vs. serendipity. Accuracy vs. speed vs. cost. The challenge is figuring out the right balance for your user experience.</p></li><li><p>5. Set realistic expectations. Most problems have a ceiling on what can be achieved, especially those that involve predicting the behavior of unpredictable humans (e.g., search, recommendations, fraud). It may not make sense to aim beyond the ceiling, unless you&#8217;re doing core research.</p></li><li><p>7. Evals are a differentiator and moat. Over the past two years, teams with solid evals have been able to continuously ship reliable, delightful experiences. No one regrets investing in a robust evaluation framework.</p></li><li><p>9. Brandolini&#8217;s law: The energy needed to refute bullshit is an order of magnitude larger than needed to produce it. The same applies to using LLMs. Generating ~~slop~~ content is easy relative to evaluating and guardrailing the defects. But the latter is how we earn&#8212;and keep&#8212;customer trust.</p></li><li><p>12. Build with an eye toward the future. Flexibility beats specialization in the long run. Remember The Bitter Lesson. An LLM that&#8217;s a bit worse now will likely outperform a custom finetune later, especially as LLMs get cheaper (two orders of magnitude in 18 months!), faster, and more capable.</p></li></ul></li><li><p><a href="https://bsky.app/profile/jennajordan.me/post/3lazg4aayns2x">Jenna Jordan</a>: Sometimes I feel like my superpower has become just knowing the right people to put in a room together and then getting them to talk together about stuff. I can debug things best by having a mental model of the socio-technical system - the code and the people who have tacit domain knowledge.</p></li><li><p><a href="https://bsky.app/profile/alexmillerdb.bsky.social/post/3lb6pdvdmnv2e">Alex Miller</a>: How did we all end up omitting the "Tree" and just saying "LSMs"? Without it, we're just saying "log-structured merges have great write amplification", as if nouns just don't matter anymore. No one calls a B-tree a B.</p><ul><li><p><a href="https://bsky.app/profile/shachaf.net/post/3lb6qblb22c24">shachaf</a>: I think this is the answer -- there's no actual tree anywhere, unless you consider all binary searches to be implicit trees. I don't think the level structure itself is very tree-like. (And the basic LSM idea, a log compacted into mergeable snapshots, works with even less tree-like structures.)</p></li></ul></li><li><p><a href="https://bsky.app/profile/rakyll.org/post/3lbgqmkejb22m">&#8234;Jaana Dogan</a>: (A popular) unpopular opinion: When you design by committee, you are mostly focusing on designing pieces that are narrow and poorly put together to make the individuals in the committee happy, rather than building anything that is cohesive and representative of the broader problem space.</p><ul><li><p><a href="https://bsky.app/profile/sidd.io/post/3lbgvz7viss26">Siddharth Goel</a>: Best idea should win. I believe committees are important since you would want the feedback rather than building something in a silo. However, if it comes down the &#8220;happiness&#8221; then I sense politics rather than meritocracy.</p></li></ul></li><li><p><a href="https://bsky.app/profile/rakyll.org/post/3lbgppoonp22a">Jaana Dogan</a>: No one gets promoted for removing chaos or saying no to prematurely built artifacts that are guaranteed to drag the company down. Until this culture doesn't change, I don't expect anything to change.</p></li><li><p><a href="https://bsky.app/profile/sungkim.bsky.social/post/3lbfszcjzqc2b">Sung Kim</a>: Oh wow! A surprising result from Databricks when measuring embeddings and rerankers on internal evals.</p><p>1- Reranking few docs improves recall (expected).</p><p>2- Reranking many docs degrades quality (!).</p><p>3- Reranking too many documents is quite often worse than using embedding model alone (!!).</p><ul><li><p>Paper: Drowning in Documents: Consequences of Scaling Reranker Inference (<a href="http://arxiv.org/abs/2411.11767">arxiv.org/abs/2411.11767</a>)</p></li></ul></li><li><p><a href="https://bsky.app/profile/apurvamehta.com/post/3layudnadic2p">Apurva Mehta</a> <em>kicked off a long thread about what stream processing is, with this post</em>: I'm finding two divergent interpretations of 'stream processing'. For some, it's primarily 'better' data processing, eg. streaming is better than batch.</p><p>For others, it's a way to build applications and experiences that wouldn't be possible in a non event-driven fashion. <em>[some interesting replies, see the thread for better context]</em></p><ul><li><p><a href="https://bsky.app/profile/micahw.com/post/3laz77efkdc2c">Micah Wylde</a>: I agree with this distinction&#8212;building real-time datasets vs. building event-drive applications. The former leans towards "stream processors" like Flink or Arroyo which are complete systems that host your code. The latter towards libraries like KStreams/Restate that are embedded in your code.</p></li><li><p><a href="https://bsky.app/profile/chris.blue/post/3laz5tmuib22t">Chris Riccomini</a>: Makes me think of push vs. pull. When something needs to happen based on an event, push (reactive) is required. OTOH, when you want to read stuff, pull (incremental materialized views) works fine.</p></li></ul></li><li><p><a href="https://bsky.app/profile/nicoritschel.com/post/3lbf7t7kbjk2k">&#8234;Nico Ritschel</a>: The Iceberg on pg via duckdb space is heating up. With write (&amp; compaction) support, too!</p></li><li><p><a href="https://bsky.app/profile/gunnarmorling.dev/post/3lbfgltf4nk25">Gunnar Morling</a>: It always makes me sad a little when seeing legacy Java API types like java.util.Date being used in newly written code. Is there any prescriptive build-time checker people are using to flag usage of not-quite-officially-deprecated-yet-non-recommended types like this?</p></li><li><p><a href="https://bsky.app/profile/ssp.sh/post/3lbf3xudbes2z">Simon Sp&#228;ti</a>: Data modeling is one of the most essential tasks when starting a data project. But why don't we take more care of it? Why did we write the same metrics differently across departments? Why do we keep reinventing data models with each new tool we adopt?</p></li><li><p><a href="https://bsky.app/profile/andypavlo.bsky.social/post/3lbet2p7yv22f">Andy Pavlo</a>: Correction: @glaredb.bsky.social is moving *away* from DataFusion! Their talk discusses the problems with building a DBMS using off-shelf parts. Like @duckdb.org, the new GlareDB rewrite borrows ideas from the Germans' HyPer system but it's written in Rust. YouTube <a href="https://www.youtube.com/watch?v=Sor3KZpmbHg">video</a>.</p></li><li><p><a href="https://bsky.app/profile/abbeyperini.dev/post/3lb5nc2ayc22g">Abbey Perini</a>: Another day, another developer is convinced they can find a tech solution to a human problem.</p></li><li><p><a href="https://bsky.app/profile/lalithsuresh.bsky.social/post/3lbaoqoyrjk2b">&#8234;Lalith Suresh</a>: The single-most valuable tool when doing latency measurements is an ECDF (empirical cumulative distribution function). Collect every single latency sample, plot the ECDF to look at the *entire distribution*, and resist the temptation to compute summaries until you can explain the ECDF.</p><ul><li><p>Why? Summaries (avg, median, ranges etc) routinely mask pathological behaviors (tail latencies, skews, step behaviors etc). All these problems show up visibly in an ECDF.</p></li></ul></li><li><p><a href="https://bsky.app/profile/chris.blue/post/3lbahryj54c2v">Chris Riccomini</a>: Maybe the driver for data lakehouse adoption is actually B2B SaaS integration (prequel.co). Even if you've got Snowflake/BQ, if all your SaaS vendors are exposing data through Iceberg/Parquet, you're gonna adopt that. Once adopted, might as well go all in.</p></li><li><p><a href="https://bsky.app/profile/pauldix.bsky.social/post/3lajybojgys2z">Paul Dix</a>: So I have this theory that DataFusion, despite being a SQL engine, will actually enable a new breed of data systems to create non-SQL languages for working with data.</p></li><li><p><a href="https://x.com/fchollet/status/1858186932041269604">Fran&#231;ois Chollet</a>: Asking lots of "dumb" questions isn't a sign of stupidity. If anything it is more likely to be the sign of a person who is very strict about always keeping a crystal clear mental model of the topic at hand -- the questions are just a symptom of their perpetual model refinement process. Mildly correlates with intelligence, and highly correlates with competence.</p></li><li><p><a href="https://x.com/aedmans/status/1858057629550916080">Alex Edmans</a>: I asked my guest speaker the one thing a young person starting a career can do to stand out. He said "inspire trust". It's not about showing how clever you are, but that you're reliable, motivated, truthful, and ethical. I love that advice, and it's relevant for all seniorities.</p></li><li><p><a href="https://bsky.app/profile/debasishg.bsky.social/post/3lb27dzfaes2w">&#8234;Debasish Ghosh</a>: Good refactoring vs Bad refactoring - <a href="https://www.builder.io/blog/good-vs-bad-refactoring">https://www.builder.io/blog/good-vs-bad-refactoring</a></p><p>- Precondition for good refactoring: understand the context and the code</p><p>- Post condition for good refactoring: maintain refactoring invariants for unit and integration tests (<a href="https://buttondown.com/hillelwayne/archive/refactoring-invariants">https://buttondown.com/hillelwayne/archive/refactoring-invariants</a>)</p></li><li><p><a href="https://bsky.app/profile/rahulj51.bsky.social/post/3lb6wjetem22x">&#8234;Rahul Jain</a>: A good tip for data engineering architecture is to treat a "Table" as a logical entity and not tie it with the way it is materialized or mapped to other subsystems. A table can be anything - a set of files, a view, the result of a query. Its definition and physical manifestation should be decoupled.</p></li><li><p><a href="https://bsky.app/profile/chris.blue/post/3lbe6up3y2c2n">Chris Riccomini</a>: This does make me wonder: are we on the cusp of many, many IVM implementations? If so, gives me strong vector search vibes. Useful, but, "is this a feature or a product," uneasiness. <em>[editor&#8217;s note: IVM stands for Incremental View Maintenance]</em></p><ul><li><p><a href="https://bsky.app/profile/gwenshap.bsky.social/post/3lbeawumxmc2g">Gwen Shapira</a>: Vector search is a wonderful Postgres feature. </p><p>On the other hand, JSON is also a wonderful Postgres feature and MongoDB seems... fine?</p></li><li><p><a href="https://bsky.app/profile/gunnarmorling.dev/post/3lbef2b5w3k2b">Gunnar Morling</a>: Yeah, I've always felt once pg_ivm is in a usable state, it will render many external solutions mostly unnecessary.</p></li></ul></li><li><p><a href="https://bsky.app/profile/alemartinello.bsky.social/post/3lbe4ghyx422d">Chris Riccomini</a>: Found this Benn Stancil post. It's wrestling something that I've felt for a while. Creating an "analytics engineer" was a mistake. AE is too narrow a role. They're getting squeezed on budget 'cuz their cost &gt; value. AEs are flailing to find something.. reverse ETL, data products, semantic layers.</p></li><li><p><a href="https://bsky.app/profile/alemartinello.bsky.social/post/3lbe4ghyx422d">Alessandro Martinello</a>: Because I thought my main product was data, and the slides were just a wrapper for that. Now, I believe that to make changes the insights are my main product</p></li><li><p><a href="https://bsky.app/profile/imightbemary.bsky.social/post/3lbah6bvk2222">Katie Bauer</a>: Product managers and designers get credit for all kinds of things that didn't literally do, because they rightfully recognize that they're part of the team that built something. This is no different from the role a data professional plays.</p></li><li><p><a href="https://bsky.app/profile/jdlong.cerebralmastication.com/post/3lb7y6u7pa22o">JD Long</a>: In discussions of data engineering (DE) there&#8217;s huge focus on DE feeding data science and analytics. But rarely is there discussion around DE feeding finops (accounting &amp; finance).</p></li><li><p><a href="https://bsky.app/profile/joereis.bsky.social/post/3lb4enrtiu22c">Joe Reis</a>: I see some people confusing the Medallion architecture (bronze, silver, gold) with data modeling. This is a workflow that might facilitate data modeling, but it&#8217;s NOT a data model. </p></li><li><p>Via <a href="https://joereis.substack.com/p/the-quality-paradox">Joe Reis</a>:</p><ul><li><p>Peopleware: Quality, far beyond that required by the end user, is a means to higher productivity.</p></li><li><p>Peopleware: A policy of &#8220;Quality - If Time Permits&#8221; will assure that no quality at all sneaks into the product.</p></li></ul></li><li><p><a href="https://bsky.app/profile/emollick.bsky.social/post/3layiw5atyc2p">Ethan Mollick</a>: There is a lot of energy going into fine-tuning models, but specialized medical AI models lost to their general versions 38% of the time, only won 12%. Before spending millions on specialized training, might be worth exploring what base models can do with well-designed prompts.</p></li><li><p><a href="https://bsky.app/profile/emollick.bsky.social/post/3las7c2irv224">Ethan Mollick</a>: Paper shows that AI (in this case a diffusion model) accelerates innovation. Among key findings: 1) GenAI increases novel discoveries: a 39% increase in patent filings! 2) It boosts the best performers by acting as a co-intelligence 3) It takes away some of the fun parts of work</p></li><li><p><a href="https://x.com/lauriewired/status/1858975441723552006">LaurieWired</a>: CPU % usage is really complicated. On Apple Silicon, you could use as little as 27% of the CPU's maximum frequency, yet Activity Monitor will show 100% usage of the core. Why? It all has to do with active residency.</p><ul><li><p>One of the coolest options on linux is PSI, or "Pressure Stall Information". PSI focuses on task delays, instead of traditional CPU metrics. With PSI, you can pinpoint whether CPU, memory, or I/O pressure is causing application slowdowns. The docs on http://kernel.org have a great overview of how this measurement works: <a href="https://t.co/rJeoplE6xc">https://docs.kernel.org/accounting/psi.html</a>. In any case, it's important to keep in mind that different operating systems measure CPU usage differently. A process may be slowing down for reasons you may not expect!</p></li></ul></li><li><p><a href="https://muratbuffalo.blogspot.com/2024/11/dbsp-automatic-incremental-view.html">Murat Demirbas</a>: DBSP is a simplified version of differential dataflow. <a href="https://muratbuffalo.blogspot.com/2017/11/on-dataflow-systems-naiad-and-tensorflow.html">I talked about differential dataflow in 2017 here.</a> Differential dataflow represented time as a lattice, DBSP represents it as a single array. In other words, in DBSP time is consecutive and each state requires a unique predecessor. In differential dataflow, time is defined as a partial order to capture causality and concurrency. That is a better model for distributed systems, but that introduces a lot of complexity. DBSP makes a big simplification when it assumes linear synchronous time, and probably opens up issues related to managing out-of-order inputs, incorporating data from multiple streams, and tracking progress.&nbsp;</p><p>But the simplification buys us powerful properties. The chain rule below emerges as a particularly powerful composition technique for incremental computation. If you apply two queries in sequence and you want to incrementalize that composition, it's enough to incrementalize each query independently. This is big. This allows independent optimization of query components, enabling efficient and modular query processing.&nbsp;</p></li><li><p><a href="https://www.graphiumlabs.com/blog/the-real-ai-revolution">Nisan Haramati</a>: but at the very core, the real physical revolution is the ability to perform huge matrix computations at scales beyond the capacity of any single computer, and the mind boggling rate at which this capacity has been increasing over the last few years. What NVIDIA is selling is time compression. You can now execute 10,000 <em>linear compute years</em> of training (if they were run on one single-threaded CPU) in less than a day.&nbsp;&#8230; I think they (LLMs) are the first example of a generalizable application utilizing this technology we now have access to.&nbsp;</p></li><li><p><a href="https://www.graphiumlabs.com/blog/the-real-ai-revolution">Nisan Haramati</a>: In his <a href="http://www.perfdynamics.com/Manifesto/USLscalability.html">Universal Scalability Law (USL)</a>, Neil Gunther describes four phases, which can be labelled as:</p><ul><li><p>1. Roughly Linear - early scaling, no/low contention</p></li><li><p>2. Slowing down - increasing contention reduces efficiency</p></li><li><p>3. Plateau - the cost of contention cost rises to the point of "eating up" the value added by new resources</p></li><li><p>4. Negative returns - where the operational cost of new resources actually <em>diminishes</em> the overall system capacity</p></li></ul></li><li><p><a href="https://davidasboth.com/impostor-syndrome">David Asboth</a>: We shouldn't be afraid to question basic assumptions; in fact, progress often lies there. Think of it like a reverse impostor syndrome: by freeing yourself from the weight of knowing everything, you boldly go into a meeting as someone who is ignorant but eager to learn.</p></li><li><p><a href="https://transactional.blog/blog/2024-modern-database-hardware">Alex Miller</a>: <em>[wrote about hardware advances and database architectures, a couple of quotes follow, but really the whole thing is pure gold (if a little depressing considering the realities of the cloud discussed at the end)]</em></p><ul><li><p>Marc Richards put together a nice <a href="https://talawah.io/blog/linux-kernel-vs-dpdk-http-performance-showdown/">Linux Kernel vs DPDK benchmark</a>, that ends with DPDK offering a 50% increase in throughput, followed by an enumeration of the slew of drawbacks one accepts to gain that 50%. It seems to be a tradeoff most databases aren&#8217;t interested in, and even ScyllaDB has mostly dropped its investment into it.</p></li><li><p>Similar to SMR, this reduces the cost of a ZNS SSD as compared to a "regular" SSD, but there&#8217;s an additional focus on application-driven<sup>[4]</sup> garbage collection being more efficient, thus decreasing total write amplification and increasing drive lifetime. Consider LSMs on SSDs, which already operate via incremental appending and large erase blocks. Removing the FTL between an LSM and the SSD opens <a href="https://scholar.google.com/scholar?cluster=17379606248569225336">opportunity for optimizations</a>. More recently, Google and Meta have collaborated on a proposal for <a href="https://www.micron.com/about/blog/storage/innovations/eliminating-the-io-blender-promise-of-flexible-data-placement">Flexible Data Placement (FDP)</a>, which acts as more of a hint for grouping writes with related lifetimes than strictly enforcing the partitioning as ZNS does. The goal is to enable an easier upgrade path where an SSD could ignore the FDP part of the write request and still be semantically correct, just have worse performance or write amplification.</p></li></ul></li><li><p><a href="https://www.linkedin.com/blog/engineering/infrastructure/stateful-workload-operator-stateful-systems-on-kubernetes-at-linkedin">Michael Youssef, byzheyi Y and Daniel Cheng</a>: we present our Stateful Workload Operator, an alternative model to the traditional approach: all stateful applications now share a common operator with a single custom resource, while application-specific customizations are handled by pluggable external policy engines. At LinkedIn, we've inverted the traditional stateful application operator model, providing application owners with a generic building block and a centralized point to manage storage, external integrations, tooling, and other features.</p><ul><li><p>The benefits of using StatefulSet were minimal, and it would have only reduced a small portion of the overall code complexity versus developing our own pod management. By developing our own custom resources, we were able to overcome these challenges, achieve the flexibility we needed, and align more closely with our specific requirements.</p></li></ul></li><li><p><a href="https://modal.com/blog/the-future-of-ai-needs-more-flexible-gpu-capacity">Erik Bernhardsson</a>: <em>[shares his thoughts on serverless inference]</em></p><ul><li><p>So why is most GPU demand driven by training even though inference is where you make the money? &#8230;for the economics of this to make sense <em>eventually</em>, we need to see a much larger % of GPU spend going towards inference.</p></li><li><p>Pooling lots of users into the same underlying pool of compute can improve utilization drastically. It reduces amount of capacity that has to be reserved in aggregate. Instead of provisioning for the sum of the peaks, you can provision for the peak of the sum. This is a much smaller number!</p></li><li><p>Fast initialization of models is a hard problem. A typical workload needs to fire up a Python interpreter with a lot of modules, and load gigabytes of model weights onto the GPU. Doing this <em>fast</em> (as in, seconds or less) takes a lot of low-level work.</p></li></ul></li></ul><h2>Published Humans</h2><ul><li><p><a href="https://arxiv.org/pdf/2409.14160">Hype, Sustainability, and the Price of the Bigger-is-Better Paradigm in AI (paper)</a>: With the growing attention and investment in recent AI approaches such as large language models, the narrative that the larger the AI system the more valuable, powerful and interesting it is is increasingly seen as common sense. But what is this assumption based on, and how are we measuring value, power, and performance? And what are the collateral consequences of this race to ever-increasing scale? Here, we scrutinize the current scaling trends and trade-offs across multiple axes and refute two common assumptions underlying the &#8216;bigger-is-better&#8217; AI paradigm: </p><ul><li><p>1) that improved performance is a product of increased scale, and </p></li><li><p>2) that all interesting problems addressed by AI require large-scale models. Rather, we argue that this approach is not only fragile scientifically, but comes with undesirable consequences. </p><ul><li><p>First, it is not sustainable, as its compute demands increase faster than model performance, leading to unreasonable economic requirements and a disproportionate environmental footprint. </p></li><li><p>Second, it implies focusing on certain problems at the expense of others, leaving aside important applications, e.g. health, education, or the climate. </p></li><li><p>Finally, it exacerbates a concentration of power, which centralizes decision-making in the hands of a few actors while threatening to disempower others in the context of shaping both AI research and its applications throughout society</p></li></ul></li></ul></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qPaW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842a5682-e8ac-4738-850d-714df65675f6_612x407.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qPaW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842a5682-e8ac-4738-850d-714df65675f6_612x407.png 424w, https://substackcdn.com/image/fetch/$s_!qPaW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842a5682-e8ac-4738-850d-714df65675f6_612x407.png 848w, https://substackcdn.com/image/fetch/$s_!qPaW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842a5682-e8ac-4738-850d-714df65675f6_612x407.png 1272w, https://substackcdn.com/image/fetch/$s_!qPaW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842a5682-e8ac-4738-850d-714df65675f6_612x407.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qPaW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842a5682-e8ac-4738-850d-714df65675f6_612x407.png" width="436" height="289.9542483660131" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/842a5682-e8ac-4738-850d-714df65675f6_612x407.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:407,&quot;width&quot;:612,&quot;resizeWidth&quot;:436,&quot;bytes&quot;:74340,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!qPaW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842a5682-e8ac-4738-850d-714df65675f6_612x407.png 424w, https://substackcdn.com/image/fetch/$s_!qPaW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842a5682-e8ac-4738-850d-714df65675f6_612x407.png 848w, https://substackcdn.com/image/fetch/$s_!qPaW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842a5682-e8ac-4738-850d-714df65675f6_612x407.png 1272w, https://substackcdn.com/image/fetch/$s_!qPaW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F842a5682-e8ac-4738-850d-714df65675f6_612x407.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Interesting topic #1: Using modeling and simulation in distributed systems</h2><p>Forgive me for including a topic I just wrote about, but literally on the same day that I blogged about using simulation to understand properties and characteristics of complex systems, Datadog engineers (Arun Parthiban, Sesh Nalla, Cecilia Wat-Kim) released<a href="https://www.datadoghq.com/blog/engineering/formal-modeling-and-simulation/"> a post on the same topic</a>.</p><p>The blog explores the complexities of building distributed systems and how traditional testing methods often fall short at the system level. The blog explores how the team combined formal modeling, lightweight simulations, and chaos testing to analyze the design, expected performance and real-world behaviors of their massive scale queueing system called Courier. It&#8217;s an interesting read: <a href="https://www.datadoghq.com/blog/engineering/formal-modeling-and-simulation/">How we use formal modeling, lightweight simulations, and chaos testing to design reliable distributed systems</a></p><p>For my part, I finally wrote about my own use of modeling and simulation over my career in distributed data systems in two blog posts. </p><ul><li><p><a href="https://jack-vanlightly.com/blog/2024/11/19/obtaining-statistical-properties-through-modeling-and-simulation">Obtaining statistical properties through modeling and simulation</a></p></li><li><p><a href="https://jack-vanlightly.com/blog/2024/11/21/the-law-of-large-numbers-a-foundation-for-statistical-modeling-in-distributed-systems">The Law of Large Numbers: A Foundation for Statistical Modeling in Distributed Systems</a></p></li></ul><p>I would also be remiss if I didn&#8217;t include blog posts by Marc Brooker (distinguished engineer at AWS). Marc uses simulation regularly in blog posts to explore algorithms, and this blog post directly advocates for use of simulation: <a href="https://brooker.co.za/blog/2022/04/11/simulation.html">Simple Simulations for System Builders</a>.</p><p>If anyone knows of other accessible material on real-world usage of simulation in engineering, then please let me know.</p><h2>Interesting topic #2: Incremental View Maintenance (IVM)</h2><p>A database view is basically a stored query that can be queried by name (typically read-only). A materialized view physically stores the result of a view, and is updated via the process of Incremental View Maintenance (IVM), and not directly by user queries. IVM is the process of updating materialized views efficiently by applying only the changes (inserts, updates, or deletes) made to the underlying data, rather than recomputing the entire view from scratch. IVM poses a number of challenges such as efficiently (and consistently) handling complex queries with joins, aggregates, nested queries, correlated subqueries, and so on. </p><p>Materialized views are typically used to reduce the cost of reads that need to be run frequently (such as dashboards, user facing analytics etc). We trade off some write overhead for read performance. The benefit to the reads should, on balance, make up for the additional write costs, just as is the case with database indexes.</p><p>With that preamble out of the way, I have a number of articles and papers that cover the topic of IVM:</p><ul><li><p>Differential dataflow (<a href="https://materialize.com/">Materialize </a>being the prominent vendor built on this approach)</p><ul><li><p><a href="https://www.cidrdb.org/cidr2013/Papers/CIDR13_Paper111.pdf">The paper</a></p></li><li><p><a href="https://muratbuffalo.blogspot.com/2017/11/on-dataflow-systems-naiad-and-tensorflow.html">Murat Demirbas blog post that covers in part, Differential dataflow</a></p></li></ul></li><li><p>DBSP (<a href="https://www.feldera.com/">Feldera </a>being the prominent vendor built on this approach)</p><ul><li><p>The paper, <a href="https://muratbuffalo.blogspot.com/2024/11/dbsp-automatic-incremental-view.html">DBSP: Automatic Incremental View Maintenance for Rich Query</a></p><p><a href="https://muratbuffalo.blogspot.com/2024/11/dbsp-automatic-incremental-view.html">Languages</a></p></li><li><p><a href="https://muratbuffalo.blogspot.com/2024/11/dbsp-automatic-incremental-view.html">Murat Demirbas&#8217; blog post on DBSP</a></p></li><li><p><a href="https://www.youtube.com/watch?v=J4uqlG1mtbU">YouTube video on DBSP</a></p></li></ul></li><li><p>pg_ivm (A Postgres extension for IVM)</p><ul><li><p><a href="https://github.com/sraoss/pg_ivm">The GitHub repo</a>.</p></li><li><p><a href="https://www.youtube.com/watch?v=xPpFEN0V2rY">Yugo Nagata - pg_ivm - Extensions for Rapid Materialized View Update (PGConf.EU 2024)</a> [video]</p></li></ul></li><li><p>Snowflake </p><ul><li><p>Snowflake&#8217;s paper, <a href="https://dl.acm.org/doi/pdf/10.1145/3589776">What&#8217;s the Difference? Incremental Processing with Change Queries in Snowflake</a>, doesn&#8217;t actually discuss IVM itself, but does explore the topic of materializing changes to a table as a stream. I have also performed an analysis of <a href="https://jack-vanlightly.com/blog/2024/9/19/table-format-comparisons-change-queries-and-cdc">change streams in the open table formats</a>.</p></li></ul></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Humans of the Data Sphere! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Humans of the Data Sphere Issue #3 November 12th 2024]]></title><description><![CDATA[Your biweekly dose of insights, observations, commentary and opinions from interesting people from the world of databases, AI, streaming, distributed systems and the data engineering/analytics space.]]></description><link>https://www.hotds.dev/p/humans-of-the-data-sphere-issue-3</link><guid isPermaLink="false">https://www.hotds.dev/p/humans-of-the-data-sphere-issue-3</guid><dc:creator><![CDATA[Jack Vanlightly]]></dc:creator><pubDate>Tue, 12 Nov 2024 08:38:01 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5bd09efc-35bb-447f-8191-225ff44ec366_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Humans of the Data Sphere issue #3! Another whirlwind tour of what humans are saying across the data sphere, plus a quick-dive and survey of the interesting topic of compute-compute separation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zJzK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29c03d38-7a7d-4474-9b82-c27e9ab8a248_1000x998.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zJzK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29c03d38-7a7d-4474-9b82-c27e9ab8a248_1000x998.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zJzK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29c03d38-7a7d-4474-9b82-c27e9ab8a248_1000x998.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zJzK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29c03d38-7a7d-4474-9b82-c27e9ab8a248_1000x998.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zJzK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29c03d38-7a7d-4474-9b82-c27e9ab8a248_1000x998.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zJzK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29c03d38-7a7d-4474-9b82-c27e9ab8a248_1000x998.jpeg" width="362" height="361.276" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29c03d38-7a7d-4474-9b82-c27e9ab8a248_1000x998.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:998,&quot;width&quot;:1000,&quot;resizeWidth&quot;:362,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zJzK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29c03d38-7a7d-4474-9b82-c27e9ab8a248_1000x998.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zJzK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29c03d38-7a7d-4474-9b82-c27e9ab8a248_1000x998.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zJzK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29c03d38-7a7d-4474-9b82-c27e9ab8a248_1000x998.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zJzK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29c03d38-7a7d-4474-9b82-c27e9ab8a248_1000x998.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://bsky.app/profile/jkxo.bsky.social/post/3lag6qu5x222a">https://bsky.app/profile/jkxo.bsky.social/post/3lag6qu5x222a</a></figcaption></figure></div><h2>Quotable Humans</h2><ul><li><p><a href="https://bsky.app/profile/jepsen.mastodon.jepsen.io.ap.brid.gy/post/3laelyijgxtp2">Jepsen</a>: Last year we reported that MySQL and MariaDB's "Repeatable Read" was badly broken. The MariaDB team has been hard at work, and they've added a new flag, `--innodb-snapshot-isolation=true`, which causes "Repeatable Read" to prevent Lost Update, Non-repeatable Read, and violations of Monotonic Atomic View. It looks like MariaDB might, with this setting, offer Snapshot Isolation at "RR". :-)</p></li><li><p><a href="https://bsky.app/profile/antonmry.bsky.social/post/3l7qq4b3fdf2f">Anton</a>: There's a clear trend to migrate from Avro to Protobuf for streaming pipelines. This presentation by Uber was a great example. They showed several improvements they are contributing to Flink to make it possible: <a href="https://www.flink-forward.org/berlin-2024/agenda#streamlining-real-time-data-processing-at-uber-with-protobuf-integration">https://www.flink-forward.org/berlin-2024/agenda#streamlining-real-time-data-processing-at-uber-with-protobuf-integration</a> </p><ul><li><p>I think the main benefit is to use the same format everywhere. That was the reason for Uber, and it would be the same for New Relic (used in OpenTelemetry) if we fully migrate at some point.</p></li></ul></li><li><p><a href="https://materializedview.io/p/duckdb-is-not-a-data-warehouse">Chris Riccomini</a>: Even if a company wanted to use DuckDB as their data warehouse, they couldn&#8217;t. DuckDB can&#8217;t handle the largest queries an enterprise might wish to run. MotherDuck <a href="https://motherduck.com/blog/redshift-files-hunt-for-big-data/">has rightly pointed out</a> that <a href="https://motherduck.com/blog/big-data-is-dead/">most queries are small</a>. What they don&#8217;t say is that the most valuable queries in an organization <em>are</em> large: financial reconciliation, recommendation systems, advertising, and others. These are the revenue drivers. They might comprise a minority of all the queries an organization runs, but they make the money.</p></li><li><p><a href="https://motherduck.com/blog/pg-mooncake-columnstore/">Pranav Aurora</a>: pg_mooncake builds on this by introducing a native columnstore table to Postgres&#8211;supporting inserts, updates, joins, and soon, indexes. These tables are written as Iceberg or Delta tables (parquet files + metadata) in your object store. It leverages pg_duckdb for its vectorized execution engine and deploys it as a part of the extension.</p></li><li><p><a href="https://bsky.app/profile/jakthom.bsky.social/post/3la7l2vzx6f2t">Jake Thomas</a>: (in the context of rising use of object storage): Once upon a time we pulled data out of prod databases and put it in larger/olap/dedicated stores/DW's for pretty much one reason: running analytical queries was too slow/impactful to prod infra. That reasoning is becoming less valid, which makes one rethink if the complexity/cost is worth it.</p></li><li><p><a href="http://which means that basically every bit of compute &amp; storage could be intermediated by a catalog...  in theory it also means that your catalog could shop queries coming from a generic endpoint to the cheapest engine for that specific query.">Jacob Matson</a>: which means that basically every bit of compute &amp; storage could be intermediated by a catalog... in theory it also means that your catalog could shop queries coming from a generic endpoint to the cheapest engine for that specific query.</p></li><li><p><a href="https://bsky.app/profile/cpard.bsky.social/post/3la6dtcbjpr27">Kostas Pardalis</a>: There are two types of consumers of a catalog. Humans and machines and they are very different. There&#8217;s a lot of engineering going on in scaling catalogs for systems like Snowflake and a folder plus some lineage does not suffice.</p></li><li><p><a href="https://cloud.google.com/resources/devops/state-of-devops">DORA Report 2024</a>: </p><ul><li><p>Unstable organizational priorities lead to meaningful decreases in productivity and substantial increases in burnout, even when organizations have strong leaders, good internal documents, and a user-centric approach to software development.</p></li><li><p>Optimistically, and consistent with our findings that AI has positively</p><p>impacted development professionals&#8217; performance, respondents reported that</p><p>they expect the quality of their products to continue to improve as a result of AI over the next one, five, and 10 years. However, respondents also reported</p><p>expectations that AI will have net-negative impacts on their careers, the environment, and society, as a whole, and that these negative impacts will be</p><p>fully realized in about five years time.</p></li><li><p>Developers are more productive, less prone to experiencing burnout, and more likely to build high quality products when they build software with a user-centered mindset. &#8230; This approach gives developers confidence that the features they are working on have a reason for being. Suddenly, their work has meaning: to ensure people have a superb experience when using their products and services. There&#8217;s no longer a disconnect between the software that&#8217;s developed and the world in which it lives.</p></li></ul></li><li><p><a href="https://bsky.app/profile/jeremymorrell.bsky.social/post/3l7lprpvlty2c">Jeremy Morrell</a> (on wide events/o11y 2.0): Nope, these are all old ideas, but I&#8217;d argue that this is very unevenly understood / adopted across industry. Responses to my post generally fall into &#8220;I&#8217;ve never heard of this kind of approach before&#8221; or &#8220;we&#8217;ve been doing this for a decade+&#8221; with very little in between</p></li><li><p><a href="https://bsky.app/profile/rbn.bsky.social/post/3l7z4eh6rof2x">Reuben Bond</a>: Raft was optimized for understandability over simplicity &#129335; Chris Jensen &amp; @heidihoward.bsky.social wrote about LogPaxos, which they say is simpler than Raft or MultiPaxos: https://decentralizedthoughts.github.io/2021-09-30-distributed-consensus-made-simple-for-real-this-time/. CASPaxos is simpler but likely less broadly applicable than log-based consensus</p></li><li><p><a href="https://bsky.app/profile/petercorless.bsky.social/post/3lagyu3gccl2n">Peter Corless</a>: There's still a lot of work to put into all of this. But the worlds of Observability and real-time analytics are on a collision course.</p></li><li><p><a href="https://emptysqua.re/blog/mongodb-predictive-scaling-experiment/">A. Jesse Jiryu Davis and Matthieu Humeau</a> (on predictive scaling): </p><ul><li><p>This means servers can be overloaded or underloaded for long periods! An underloaded server is a waste of money. An overloaded server is bad for performance, and if it&#8217;s really slammed it could interfere with the scaling operation itself.</p></li><li><p>The Forecasters and Estimator cooperate to predict each replica set&#8217;s future CPU on any instance size available. E.g., they might predict that 20 minutes in the future, some replica set will use 90% CPU if it&#8217;s on M40 servers, and 60% CPU if it&#8217;s on more powerful M50 servers.</p></li><li><p>Our goal is to forecast a customer&#8217;s CPU utilization, but we can&#8217;t just train a model based on recent fluctuations of CPU, because that would create a circular dependency: if we predict a CPU spike and scale accordingly, we eliminate the spike, invalidating the forecast. Instead we forecast metrics unaffected by scaling, which we call &#8220;customer-driven metrics&#8221;, e.g. queries per second, number of client connections, and database sizes. We assume these are <strong>independent</strong> of instance size or scaling actions. (Sometimes this is false; a saturated server exerts backpressure on the customer&#8217;s queries. But customer-driven metrics are normally exogenous.)</p></li></ul></li><li><p><a href="https://ludic.mataroa.blog/blog/get-me-out-of-data-hell/">Ludicity</a>: The word enterprise means that we do this in a way that makes people say "Dear God, why would anyone ever design it that way?", "But that doesn't even help with security" and "Everyone involved should be fired for the sake of all that is holy and pure."</p></li><li><p><a href="https://www.decodable.co/blog/revisiting-the-outbox-pattern">Gunnar Morling</a>: (on the outbox pattern)</p><ul><li><p>If you want to achieve consistency in a distributed system, such as an ensemble of cooperating microservices, there is going to be a cost. This goes for the outbox pattern, as well as for the potential alternatives discussed in the next section. As such, there are valid criticisms of the outbox pattern, but in the end it&#8217;s all about trade-offs: does the outbox put an additional load onto your database? Yes, it does (though it usually is insignificant, in particular when using a log-based outbox relay implementation). Does it increase complexity? Potentially. But this will be a price well worth paying most of the time, in order to achieve consistency amongst distributed services.</p></li><li><p>While alternatives do exist, they each come with their own specific trade-offs, around a number of aspects such consistency, availability, queryability, developer experience, operational complexity, and more. The outbox pattern puts a strong focus on consistency and reliability (i.e. eventual consistency across services is ensured also in case of failures), availability (a writing service only needs a single resource, its own database) and letting developers benefit from all the capabilities of their well-known datastore (instant read-your-own-writes, queries, etc.).</p></li></ul></li><li><p><a href="https://leehanchung.github.io/blogs/2024/10/08/reasoning-understanding-o1/">Han Lee</a>: In Thinking, Fast and Slow, Daniel Kahneman defined System 1 as the automatic, intuitive mode of thinking, and System 2 as the slower, more analytical mode. In the context of autoregressive language models, the usual inference process is akin to System 1 &#8212; models generate answers directly. Reasoning is System 2 thinking - models or systems takes time to deliberate to solve more complex problems.</p></li><li><p><a href="https://bsky.app/profile/spite.vc/post/3la56yjiqfc26">Josh Willis</a>: The fact that DuckDB isn't a data warehouse...is the whole point of DuckDB! Once you pull your head out of the snow or the bricks or wherever you spend most of your data engineering time, you will discover that there are data pipeline problems *everywhere* that benefit from data modeling and SQL!</p></li><li><p><a href="https://bsky.app/profile/spite.vc/post/3la5bo4y2rk25">Josh Willis</a>: too often, folks say "data quality problem" when they mean "we don't have a good way to collaborate with our upstream dependencies" or more directly "we hate the frontend and backend engineering teams, they don't care about data"</p></li><li><p><a href="https://bsky.app/profile/b0rk.jvns.ca/post/3la4ulel3es2v">Julia Evans</a>: I feel like half of programming is remembering how weird stuff works and the other half is setting things up so that you do not have to remember the weird stuff</p></li><li><p><a href="https://bsky.app/profile/lutzh.bsky.social/post/3l7s6xsqbb22x">&#8234;Lutz H&#252;hnken</a>: Did you ever realize that when data engineers look at events, they see them differently than Event-Driven Architecture / Domain-Driven Design folks?</p></li><li><p><a href="https://bsky.app/profile/jakthom.bsky.social/post/3l7t6aqrrsj2u">Jake Thomas</a>: all these people be talking about ai, zero disk architectures, and open table formats while I'm giddily stuffing DuckDB into Prometheus exporters &#129335;&#8205;&#9794;&#65039;&#129335;&#8205;&#9794;&#65039;&#129335;&#8205;&#9794;&#65039; https://github.com/jakthom/hercules</p></li><li><p><a href="https://bsky.app/profile/ryannedolan.bsky.social/post/3l7iozcfgf72y">Ryanne Dolan</a>: BigTech is moving to object storage too, but not cuz it's cheaper. The idea is you no longer need every system to be distributed and durable. Everything can be stateless and simple, cuz your storage is distributed and durable.</p></li><li><p><a href="https://x.com/kenneth0stanley/status/1854300636327952598">Kenneth Stanley</a>: Two things that both evolution and neural networks share in common is they both thrive on scale, and they were both once dismissed as obsolete to AI. The deep evolution moment is awaiting. </p></li><li><p><a href="https://x.com/fchollet/status/1854246566753890733">Fran&#231;ois Chollet</a>: Similarly, there are several research directions today seen as long-abandoned failures, that are only waiting for the right amount of attention and the right level of compute scale to shine. Genetic algorithms are one of them.</p></li><li><p><a href="https://x.com/emollick/status/1852404690857632090">Ethan Mollick</a>: I keep hearing from executives that they expect that a new generation of "AI natives" will show them how to use AI. I think this is a mistake: 1) Our research shows younger people do not really get AI or how to integrate into work 2) Experienced managers are often good prompters</p></li><li><p><a href="https://x.com/emollick/status/1854536506813173948">Ethan Mollick</a>: We are just not used to abundant "intelligence" (of a sort), which leads people to miss a huge value of AI. Don't ask for an idea, ask for 30. Don't ask for a suggestion on how to end a sentence, ask for 20 in different styles. Don't ask for advice, ask for many strategies. Pick</p></li><li><p><a href="https://x.com/sh_reya/status/1852385012328673367">Shreya Shankar</a>: Whenever I talk to ML/AI researchers, many are surprised that complex and long document processing with LLMs is so hard. I find it strange how little attention (comparatively) is given to this, given that data processing probably has the highest market cap of all applications</p></li><li><p><a href="https://www.linkedin.com/posts/shah-soumil_ive-been-running-some-tests-with-snowflakes-activity-7257014317663817728-wHem?utm_source=share&amp;utm_medium=member_desktop">Soumil S</a>: In my experiment, I set up two types of tables&#8212;managed Iceberg tables registered via Polaris within Snowflake, and unmanaged Iceberg tables also registered via Polaris. I attempted to join these tables in both Snowflake and Spark, with mixed results: while Snowflake handled the join seamlessly, Spark wasn&#8217;t able to join the internal and external catalogs. To me, this feels like a potential limitation, as Spark doesn&#8217;t support joining across internal and external catalogs registered through Polaris.</p><ul><li><p><a href="https://www.linkedin.com/feed/update/urn:li:activity:7257014317663817728?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7257014317663817728%2C7258011364412022784%29&amp;replyUrn=urn%3Ali%3Acomment%3A%28activity%3A7257014317663817728%2C7258069743511728128%29&amp;dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287258011364412022784%2Curn%3Ali%3Aactivity%3A7257014317663817728%29&amp;dashReplyUrn=urn%3Ali%3Afsd_comment%3A%287258069743511728128%2Curn%3Ali%3Aactivity%3A7257014317663817728%29">Vikram Singh Chandel</a>: hmm interesting, so strategically we should not only work on Iceberg as a unified format but a unified catalog that does not limit vendor-specific features</p></li><li><p><a href="https://www.linkedin.com/feed/update/urn:li:activity:7257014317663817728?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7257014317663817728%2C7257030252915224577%29&amp;dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287257030252915224577%2Curn%3Ali%3Aactivity%3A7257014317663817728%29">Roy Hasson</a>: That's expected behavior. If you make both tables external they can be joined by external engines. If you make them internal/managed then really only snowflake can join them. It's unfortunate, but that's the behavior and why internal/managed tables are a bit of a lock-in.</p></li></ul></li><li><p><a href="https://blog.lancedb.com/columnar-file-readers-in-depth-backpressure/">Weston Pace</a>: Whenever we talk about backpressure we also often talk about push vs. pull. In a <strong>push</strong>-based system a producer creates and launches a task as soon as data is available. This makes parallelism automatic but backpressure is tricky. In a <strong>pull</strong>-based system the consumer creates a task to pull a batch of data and process it. This makes backpressure automatic but parallelism is tricky. The reality is that every multi-threaded scanner / query engine is doing both push and pull <em>somewhere</em> if you look hard enough.</p></li><li><p><a href="https://bsky.app/profile/imightbemary.bsky.social/post/3laacus6u5b2l">Katie Bauer</a>: It's 2024. </p><p>LinkedIn overflows with thought leaders proclaiming AI will get better and cheaper, if we just wait 6 months.</p><p>Data quality is still a mess, despite insistence that AI will finally justify investments.</p><p>Sparkles are stamped on UIs everywhere, ruining a perfectly good emoji.</p></li><li><p><a href="https://sympathetic.ink/2024/11/07/The-Advent-Of-The-Open-Data-Lake.html">Julien Le Dem</a>: A query engine reduces the cost of scanning columnar data in a few ways:</p><ul><li><p>Projection push down: By reading only the columns it needs.</p></li><li><p>Predicate push down: * By skipping the rows that it doesn&#8217;t need to look at. This typically leverages embedded statistics. * By better skipping ahead while decoding values. Simply by leveraging understanding the underlying encodings. Skipping in Run Length Encoding or fixed width encodings is really cheap.</p></li><li><p>Vectorization: By using vectorized conversion from the on-disk Parquet columnar representation to the in-memory Arrow representation.</p></li></ul></li><li><p><a href="https://x.com/wightmanr/status/1714683949409247558">Ross Wightman</a>: Utilization is a poor metric by itself. You can easily hit 100% where the GPU is doing a lot of waiting. Power consumption is a better (but not perfect) measure. If you're burning watts it's usually doing something useful. High util, no watts is not good.</p></li><li><p><a href="https://transactional.blog/how-to-learn/disk-io">Alex Miller</a>: Regardless of using buffered or unbuffered IO, it&#8217;s wise to be mindful of the extra cost of appending to a file versus overwriting a pre-allocated block within a file. Appending to a file changes the file&#8217;s size, which thus incurs additional filesystem metadata operations. Instead, consider using fallocate(2) to extend the file in larger chunks</p></li><li><p><a href="https://technicalwriting.dev/data/embeddings.html">Kayce Basques</a>: Here&#8217;s the mental leap. <em>Embeddings are similar to points on a map</em>. Each number in the embedding array is a <em>dimension</em>, similar to the X-Coordinates and Y-Coordinates from earlier. When an embedding model sends you back an array of 1000 numbers, it&#8217;s telling you the point where that text <em>semantically</em> lives in its 1000-dimension space, relative to all other texts. When we compare the distance between two embeddings in this 1000-dimension space, what we&#8217;re really doing is <strong>figuring out how semantically close or far apart those two texts are from each other</strong>.</p></li><li><p><a href="https://www.ciodive.com/news/gartner-symposium-keynote-AI/730486/">Hung LeHong</a>: The truth is that you&#8217;ve been in the mud for the last year, working hard to find all those benefits that were promised by AI, it&#8217;s not been easy.</p></li><li><p><a href="https://leehanchung.github.io/blogs/2024/09/20/ai-winter/">Han Lee</a>: This principle extends beyond corporate life and into the world of AI. Personally, I address the first group <strong>producers</strong> and the second group <strong>promoters</strong>. And in the current AI ecosystem, we&#8217;re seeing far more <strong>promoters</strong> than <strong>producers</strong> &#8212; sometimes promoters disguised as producers. This phenomenon starts at the source: academia</p></li><li><p><a href="https://www.superdatascience.com/podcast/833">Martin Goodson</a> (Super Data Science 833, 23 min): I do that think that a lot of ML research does come down to understanding data, understanding statistics, understanding the way that data can screw you over and confuse you. I've been confused so much by data, it's stayed with me to my core.</p><p>...</p><p>There's a lot of stuff that I learned in statistics that is useless now and is a waste of time. It's quite a traditional field and it hasn't moved very quickly. People are still being taught stuff that isn't really that useful, I think there should be much more emphasis on computational methods. There is a lot of stuff you can safely ignore in statistics, but you do need the approach, the attitude and skeptism about data and really understand about bias.</p></li><li><p><a href="https://www.superdatascience.com/podcast/833">Martin Goodson</a> (SDS 833, on over-hyped academia and AI, 1h12min): You could become a self-proclaimed expert quite easily by reading stuff on arXiv and you can read loads of papers, and get to become a self proclaimed expert quite easily. There are many problems, I'll highlight one, one is that the academics that are publishing this stuff are over claiming, the titles of the papers are just wildly, they don't have the evidence to claim what they're claiming. We do have people that come to the meetup and they give a talk, and they just make up stuff that is just is very over-hyped, the claims. Once you put them under scrutiny, it just falls apart. They don't have the evidence.</p></li></ul><h2>Helpful Humans</h2><ul><li><p><a href="https://avi.im/blag/2024/disaggregated-storage/">v explains what disaggregated storage is at a high level</a>.</p></li><li><p><a href="https://www.crunchydata.com/blog/4-ways-to-create-date-bins-in-postgres-interval-date_trunc-extract-and-to_char">Christopher Winslett provides examples if different date binning methods with Postgres</a>.</p></li><li><p><a href="https://www.decodable.co/blog/schema-evolution-in-change-data-capture-pipelines">Hans-Peter Grahsl writes about schema evolution in real-time data pipelines</a>.</p></li><li><p><a href="https://hbsp.harvard.edu/inspiring-minds/an-ai-prompting-template-for-teaching-tasks">Ethan Mollick and Lilach Mollick write about using AI to build sophisticated prompts for repeated tasks</a>.</p></li><li><p><a href="https://transactional.blog/how-to-learn/disk-io">Alex Miller goes through all the disk IO operations and their relationships memory, page cache, disk cache and disk storage</a>.</p></li><li><p><a href="https://dataengineeringcentral.substack.com/p/duckdb-inside-postgres">Daniel Beach kicks the tires on DuckDB in Postgres and compares performance on a 50M record dataset</a>.</p></li></ul><h2>Interesting topic - compute-compute separation</h2><p>A week ago, Yaroslav Tkachenko expressed his <a href="https://www.linkedin.com/feed/update/urn:li:activity:7259619437132054528/">enthusiam </a>for ClickHouse Cloud&#8217;s new compute-compute separation feature. This <a href="https://www.linkedin.com/posts/jack-vanlightly-1153b44a_clickhouse-cloud-live-update-november-2024-activity-7259825222466355201-L5_q/">led </a>to us discovering some of the other systems that had introduced this architecture in the past. Let&#8217;s look now at what compute-compute separation is, and some real-world examples!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Humans of the Data Sphere! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>By now we&#8217;ve all heard about the benefits of compute-storage separation. The idea is that large distributed data system architectures become both simpler and more elastic. The compute layer is a stateless layer that can be scaled elastically, moved around, killed and restarted with relative abandon. The storage layer remains a tough distributed systems problem, but these days, we let the hyperscaler handle that part for us in the form of object storage.</p><p>Two quotes are relevant here:</p><ul><li><p>One from Ryanne Dolan in this issue put it nicely: &#8220;<em>The idea is you no longer need every system to be distributed and durable. Everything can be stateless and simple, cuz your storage is distributed and durable.</em>&#8220;</p></li><li><p><a href="https://jack-vanlightly.com/blog/2024/3/19/tableflow-the-stream-table-kafka-iceberg-duality">One from myself</a>, I know, shameless self-plug: &#8220;<em>In data system design, cost is a kind of unstoppable force that rewrites architectures every decade or so, and that is happening right now. AWS, GCP and Azure have been consistent in driving down the costs and driving up the reliability of their object storage services over time. S3 et al are the only game in town and the cheapest form of storage; hence any system has to build on it and cannot really be cheaper or more reliable. You can't compete with S3 because AWS doesn't provide the primitives in the cloud to rebuild it. Your only other choice is to get some space in a co-lo and start racking your own hard drives and solid-state drives. S3 may or may not be the ideal storage interface for a diverse set of data systems from a design point of view, but in terms of economics, it is unbeatable and inevitable.</em>&#8220;</p></li></ul><p>Compute-compute separation is a logical consequence, or next step if you will, of compute-storage separation. Therefore, we can think of compute-compute separation as a shorthand for compute-compute-storage separation.</p><p>The basic idea of compute-compute separation is that we can isolate different workloads that operate over the same data, in different stateless compute pools. As long as the underlying storage can handle the aggregate load, then we get improved performance isolation as the compute-side of the workloads is running on different compute resources.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3qYg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d4ad88-6719-455f-8921-4af1778225f3_854x450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3qYg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d4ad88-6719-455f-8921-4af1778225f3_854x450.png 424w, https://substackcdn.com/image/fetch/$s_!3qYg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d4ad88-6719-455f-8921-4af1778225f3_854x450.png 848w, https://substackcdn.com/image/fetch/$s_!3qYg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d4ad88-6719-455f-8921-4af1778225f3_854x450.png 1272w, https://substackcdn.com/image/fetch/$s_!3qYg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d4ad88-6719-455f-8921-4af1778225f3_854x450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3qYg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d4ad88-6719-455f-8921-4af1778225f3_854x450.png" width="442" height="232.903981264637" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3d4ad88-6719-455f-8921-4af1778225f3_854x450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:854,&quot;resizeWidth&quot;:442,&quot;bytes&quot;:26833,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3qYg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d4ad88-6719-455f-8921-4af1778225f3_854x450.png 424w, https://substackcdn.com/image/fetch/$s_!3qYg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d4ad88-6719-455f-8921-4af1778225f3_854x450.png 848w, https://substackcdn.com/image/fetch/$s_!3qYg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d4ad88-6719-455f-8921-4af1778225f3_854x450.png 1272w, https://substackcdn.com/image/fetch/$s_!3qYg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3d4ad88-6719-455f-8921-4af1778225f3_854x450.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Compute-compute (and storage) separation)</figcaption></figure></div><p>Let&#8217;s use the following definition: <em>compute-compute(-storage) separation is the isolation of different workloads, that operate over the same data, in different stateless compute pools.</em></p><p>So who is doing this? I have five examples for you (though doubtless there are many more), in the order of publication:</p><ol><li><p><strong>Snowflake</strong> were the first to implement compute-compute separation (that I know of) with the design of their Virtual Warehouses (VW) that operate over object storage. Snowflake was the first to my knowledge to create a massive scale data system based on object storage. Snowflake really has been a pioneer and it&#8217;s amazing how long it&#8217;s taken the rest of the industry to catch up. Read the Snowflake paper: <a href="https://event.cwi.nl/lsde/papers/p215-dageville-snowflake.pdf">The Snowflake Elastic Data Warehouse</a> (published 2016). Some choice quotes:</p><ol><li><p>VWs are pure compute resources. They can be created, destroyed, or resized at any point, on demand. Creating or destroying a VW has no effect on the state of the database. It is perfectly legal (and encouraged) that users shut down all their VWs when they have no queries. This elasticity allows users to dynamically match their compute resources to usage demands, independent of the data volume.</p></li><li><p>Each user may have multiple VWs running at any given time, and each VW in turn may be running multiple concurrent queries. Every VW has access to the same shared tables, without the need to physically copy data.</p></li></ol></li><li><p><strong>CockroachDB Serverless</strong> (2022) doesn&#8217;t use the term compute-compute separation but in fact that is exactly what it is - just applied to a serverless multitenant system. Unlike Snowflake, it does not use object storage for its storage layer, but a Raft-based replicated storage system that uses Pebble (a KV store similar to RocksDB). CockroachDB is a distributed OLTP SQL database, that stores data on disks rather than an object store, for latency reasons. However, the storage layer is a shared multitenant storage layer; the difference between this and object storage is that it is a component of CockroachDB serverless, not the hyperscaler. The compute layer is also multitenant, with each tenant operating in different Kubernetes pods with controlled resource limits. This is the compute-compute separation part, each tenant gets a slice of compute and is prevented from consuming compute resources of other tenants. Each per-tenant compute pool operates over a shared storage layer. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H2rc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53ef9f63-b150-4a0a-b44b-3b39f4b5ae9c_3077x1602.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H2rc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53ef9f63-b150-4a0a-b44b-3b39f4b5ae9c_3077x1602.jpeg 424w, https://substackcdn.com/image/fetch/$s_!H2rc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53ef9f63-b150-4a0a-b44b-3b39f4b5ae9c_3077x1602.jpeg 848w, https://substackcdn.com/image/fetch/$s_!H2rc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53ef9f63-b150-4a0a-b44b-3b39f4b5ae9c_3077x1602.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!H2rc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53ef9f63-b150-4a0a-b44b-3b39f4b5ae9c_3077x1602.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H2rc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53ef9f63-b150-4a0a-b44b-3b39f4b5ae9c_3077x1602.jpeg" width="1456" height="758" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53ef9f63-b150-4a0a-b44b-3b39f4b5ae9c_3077x1602.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:758,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:226133,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!H2rc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53ef9f63-b150-4a0a-b44b-3b39f4b5ae9c_3077x1602.jpeg 424w, https://substackcdn.com/image/fetch/$s_!H2rc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53ef9f63-b150-4a0a-b44b-3b39f4b5ae9c_3077x1602.jpeg 848w, https://substackcdn.com/image/fetch/$s_!H2rc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53ef9f63-b150-4a0a-b44b-3b39f4b5ae9c_3077x1602.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!H2rc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53ef9f63-b150-4a0a-b44b-3b39f4b5ae9c_3077x1602.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://www.cockroachlabs.com/blog/how-we-built-cockroachdb-serverless/">How we built a serverless SQL database</a></figcaption></figure></div><ol><li><p>I wrote an extensive <a href="https://jack-vanlightly.com/analyses/2023/11/21/serverless-cockroachdb-asds-chapter-4-part-1">write-up on CockroachDB Serverless</a> in 2023 as part of <a href="https://jack-vanlightly.com/blog/2023/11/14/the-architecture-of-serverless-data-systems">The Architecture of Serverless Data Systems</a>.</p></li><li><p>CockroachDB also have a <a href="https://assets.ctfassets.net/00voh0j35590/6FswAaw2GUVwnRWNHWmvHM/416089a7edf4a46c281d837a9042f33d/cockroach-labs-architecture-of-a-serverless-database.pdf">PDF whitepaper</a> and a <a href="https://www.cockroachlabs.com/blog/how-we-built-cockroachdb-serverless/">blog post</a>.</p></li><li><p>To my knowledge CRDB Serverless doesn&#8217;t provide separate pools for the same tenant, that is, multiple pools over the same data (only the same storage). According to my own definition, CRDB Serverless doesn&#8217;t quite qualify as compute-compute separation, but given that the storage layer is shared by all tenants, I think it&#8217;s close enough. It also is an interesting case because it shows there is some diversity in these architectures.</p></li></ol></li><li><p><strong>Rockset</strong> <a href="https://rockset.com/blog/introducing-compute-compute-separation/">blogged</a> about compute-compute separation in March 2023. Rockset uses RocksDB as it&#8217;s storage layer for hot data, making it the second of my examples not to be using object storage as the primary storage layer (at least for hot data). </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VsMv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9413fb0a-bf29-43cf-abbe-0b348063f7af_3344x1874.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VsMv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9413fb0a-bf29-43cf-abbe-0b348063f7af_3344x1874.png 424w, https://substackcdn.com/image/fetch/$s_!VsMv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9413fb0a-bf29-43cf-abbe-0b348063f7af_3344x1874.png 848w, https://substackcdn.com/image/fetch/$s_!VsMv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9413fb0a-bf29-43cf-abbe-0b348063f7af_3344x1874.png 1272w, https://substackcdn.com/image/fetch/$s_!VsMv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9413fb0a-bf29-43cf-abbe-0b348063f7af_3344x1874.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VsMv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9413fb0a-bf29-43cf-abbe-0b348063f7af_3344x1874.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9413fb0a-bf29-43cf-abbe-0b348063f7af_3344x1874.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Multiple applications on shared real-time data&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Multiple applications on shared real-time data" title="Multiple applications on shared real-time data" srcset="https://substackcdn.com/image/fetch/$s_!VsMv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9413fb0a-bf29-43cf-abbe-0b348063f7af_3344x1874.png 424w, https://substackcdn.com/image/fetch/$s_!VsMv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9413fb0a-bf29-43cf-abbe-0b348063f7af_3344x1874.png 848w, https://substackcdn.com/image/fetch/$s_!VsMv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9413fb0a-bf29-43cf-abbe-0b348063f7af_3344x1874.png 1272w, https://substackcdn.com/image/fetch/$s_!VsMv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9413fb0a-bf29-43cf-abbe-0b348063f7af_3344x1874.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://rockset.com/blog/introducing-compute-compute-separation/">Multiple applications on shared real-time data</a></figcaption></figure></div></li><li><p><strong>Warpstream</strong> <a href="https://www.warpstream.com/blog/zero-disks-is-better-for-kafka">blogged </a>about Agent Groups this year, and how they allow for different consumer workloads to operate over the same Kafka topics without affecting each other. Warpstream has implemented the Kafka API over object storage.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lzw1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcf00ede-3870-4835-ac0a-44d78522f836_1239x994.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lzw1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcf00ede-3870-4835-ac0a-44d78522f836_1239x994.png 424w, https://substackcdn.com/image/fetch/$s_!Lzw1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcf00ede-3870-4835-ac0a-44d78522f836_1239x994.png 848w, https://substackcdn.com/image/fetch/$s_!Lzw1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcf00ede-3870-4835-ac0a-44d78522f836_1239x994.png 1272w, https://substackcdn.com/image/fetch/$s_!Lzw1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcf00ede-3870-4835-ac0a-44d78522f836_1239x994.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lzw1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcf00ede-3870-4835-ac0a-44d78522f836_1239x994.png" width="1239" height="994" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bcf00ede-3870-4835-ac0a-44d78522f836_1239x994.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:994,&quot;width&quot;:1239,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Lzw1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcf00ede-3870-4835-ac0a-44d78522f836_1239x994.png 424w, https://substackcdn.com/image/fetch/$s_!Lzw1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcf00ede-3870-4835-ac0a-44d78522f836_1239x994.png 848w, https://substackcdn.com/image/fetch/$s_!Lzw1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcf00ede-3870-4835-ac0a-44d78522f836_1239x994.png 1272w, https://substackcdn.com/image/fetch/$s_!Lzw1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcf00ede-3870-4835-ac0a-44d78522f836_1239x994.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p><strong>ClickHouse</strong> in July added <a href="https://clickhouse.com/docs/en/cloud/reference/compute-compute-separation">compute-compute separation to their docs</a>. In their docs it says &#8220;Compute-compute separation allows users to create multiple compute node groups, each with its own endpoint, that are using the same object storage folder, and thus, with the same tables, views, etc.&#8220;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VOPF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce23d84-c370-410b-81f4-3bbc35aea180_787x595.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VOPF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce23d84-c370-410b-81f4-3bbc35aea180_787x595.png 424w, https://substackcdn.com/image/fetch/$s_!VOPF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce23d84-c370-410b-81f4-3bbc35aea180_787x595.png 848w, https://substackcdn.com/image/fetch/$s_!VOPF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce23d84-c370-410b-81f4-3bbc35aea180_787x595.png 1272w, https://substackcdn.com/image/fetch/$s_!VOPF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce23d84-c370-410b-81f4-3bbc35aea180_787x595.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VOPF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce23d84-c370-410b-81f4-3bbc35aea180_787x595.png" width="787" height="595" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ce23d84-c370-410b-81f4-3bbc35aea180_787x595.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:595,&quot;width&quot;:787,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:45336,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VOPF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce23d84-c370-410b-81f4-3bbc35aea180_787x595.png 424w, https://substackcdn.com/image/fetch/$s_!VOPF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce23d84-c370-410b-81f4-3bbc35aea180_787x595.png 848w, https://substackcdn.com/image/fetch/$s_!VOPF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce23d84-c370-410b-81f4-3bbc35aea180_787x595.png 1272w, https://substackcdn.com/image/fetch/$s_!VOPF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ce23d84-c370-410b-81f4-3bbc35aea180_787x595.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://clickhouse.com/docs/en/cloud/reference/compute-compute-separation">Warehouses, or Compute-Compute Separation (Private Preview)</a></figcaption></figure></div><p></p></li></ol><p>These are all examples of compute-compute separation within a single platform. But if we were to take it one level further, then we would be seeing platform-platform(-storage) separation. This is another trend that is brewing with the rise of both Iceberg et al and also DuckDB (that is being inserted into more and more places).</p><p>On this last topic, I&#8217;ll leave you with this quote: </p><blockquote><p>The not-so-subtle undertone of the "small data" and duckdb.org movement is decentralized analytics. Magic truly happens when compute/storage are separated but then also decentralized. &#8212; <a href="https://bsky.app/profile/jakthom.bsky.social/post/3l7qi7tg5vc2q">Jake Thomas</a></p></blockquote><p></p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Humans of the Data Sphere! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Humans of the Data Sphere Issue #2 October 28th 2024]]></title><description><![CDATA[Your biweekly dose of insights, observations, commentary and opinions from interesting people from the world of databases, AI, streaming, distributed systems and the data engineering/analytics space.]]></description><link>https://www.hotds.dev/p/humans-of-the-data-sphere-issue-2</link><guid isPermaLink="false">https://www.hotds.dev/p/humans-of-the-data-sphere-issue-2</guid><dc:creator><![CDATA[Jack Vanlightly]]></dc:creator><pubDate>Mon, 28 Oct 2024 11:07:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50bf85b-a06e-4504-9d93-83d7c3c3419c_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><em>&#8220;The hardest problem in computer science is neither naming things nor off by one errors. It&#8217;s talking to other people.&#8220; &#8212; <a href="https://bsky.app/profile/julien.ledem.net/post/3kyerhoxuji2j">Julien Le Dem</a></em></p></blockquote><p>If you came to HOTDS for some Hot Data Science, then I&#8217;m afraid you&#8217;ll be disappointed, but don&#8217;t worry, we&#8217;ve got a wide variety of interesting people from across the data sphere and beyond &#128516;</p><p>Ps: A huge number of us dist sys, infra, data infra, messaging/streaming, data eng/analytics, database peeps on Twitter have made the jump to Bluesky, it&#8217;s much better there, come and join us!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Humans of the Data Sphere! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Here are a few Bluesky starter packs to get you going (they contain a list of people to follow):</p><ul><li><p><a href="https://bsky.app/starter-pack-short/U1hZhum">Distributed Systems</a></p></li><li><p><a href="https://bsky.app/starter-pack-short/8TdEfdK">Data People Starter Pack</a></p></li><li><p><a href="https://bsky.app/starter-pack-short/SCZe42X">Infrastructure Engineers</a></p></li><li><p><a href="https://bsky.app/starter-pack-short/Nd8hieE">Database </a></p></li><li><p><a href="https://bsky.app/starter-pack-short/7TBN5rX">Statistics</a></p></li><li><p><a href="https://bsky.app/starter-pack-short/Acp7hmk">Postgres people</a></p></li></ul><p>The very quotable Julien Le Dem <a href="https://bsky.app/profile/julien.ledem.net/post/3l76qb7hnpp2q">said </a>it: &#8220;<em>Data Twitter is dead, long live data Bluesky.</em> &#128202;&#8220;</p><h2>Quotable humans</h2><ul><li><p><a href="https://www.linkedin.com/posts/lhochstein_my-whole-shtick-is-that-i-believe-updating-activity-7245204907274690560-gYJ8?utm_source=share&amp;utm_medium=member_desktop">Lorin Hochstein</a>: My whole shtick is that I believe updating people's mental models will have a more significant positive impact on the system than discussing action items, but boy is that a tough sell.</p></li><li><p><a href="https://materializedview.io/p/small-batch-artisanal-etl-is-back">Chris Riccomini</a>: Pipeline ownership has shifted as well. WePay had a team of data engineers to manage our data pipelines. These days, we&#8217;re asking ML, AI, analytics, and product engineers to build data pipelines. [&#8230;] There are challenges to this approach. If everyone is managing their own data pipelines, there will duplication. There is also likely to be inefficiency as engineers opt for simpler solutions rather than cheaper ones. Moreover, the pipelines could become a tangled mess with no clear ownership as employees come and go. [&#8230;] But I think dlt has recognized something: data consumers want control of their data pipelines.</p></li><li><p><a href="https://x.com/forrestbrazeal/status/1451189473383890946">Forest Brazeal</a>: I used the word "footgun" among engineers this week and found out that several people didn't know what it meant!&nbsp;</p></li><li><p><a href="https://www.superdatascience.com/podcast/827">Richie Fink on Super Data Science 827, Polars, Past, Present and Future</a>: There&#8217;s also quite some misconception about what (Apache) Arrow is. That&#8217;s because PyArrow, the library, does not only do Arrow memory but also Arrow compute. Sometimes people say &#8220;it&#8217;s fast because of Arrow&#8221; and that doesn&#8217;t make any sense. First, Arrow is a specification of how memory should be ordered for specific data types. That&#8217;s all Arrow is. That&#8217;s the same as JSON is a specification for how to store the bytes of a JSON serialized data structure. JSON is not a very optimal way to store data, so it&#8217;s not very good for performance; Arrow is much better, if you are doing columnar data processing.</p></li><li><p><a href="https://x.com/BenjDicken/status/1846586055048540648">Ben Dicken</a>: Did you know that a random SSD read is multiple orders of magnitude slower than a random memory read? I made a little visual that really drives the point home. This is why memory buffers and caches are so important, especially for I/O heavy workloads like databases.</p></li><li><p><a href="https://x.com/craigkerstiens/status/1849112719817122065">Craig Kerstiens</a>: I mentioned recently that anytime I encounter a database without constraints I run into data integrity issues. Could not agree more with taking full advantage of them.&nbsp;</p></li><li><p><a href="https://bsky.app/profile/alexmillerdb.bsky.social/post/3l7hbqvvpo22o">Alex Miller</a>: I have a personal fondness for papers/posts which present two very distinct and opposing designs as just two extremes of some spectrum of design trade-offs.  LSMs vs B-Trees is a space in which I've seen a few rather different pitches of what that design spectrum could look like.</p></li><li><p><a href="https://x.com/JohnKutay/status/1848174965796884729">John Kutay</a>: TIL #duckdb uses Adaptive Radix Trees as one if its two key indexing methods&#8230; At their core, radix trees optimize for space by compressing paths where nodes only have a single child. Instead of wasting memory with unnecessary branches, it collapses them, leading to reduced storage overhead compared to a traditional trie.</p></li><li><p><a href="https://materializedview.io/p/virtual-machines-are-getting-better">Chris Riccomini</a>: NVIDIA&#8217;s cuda-checkpoint is particularly important. CUDA offers GPU APIs meant for generic computation (not gaming). Such APIs are widely used in AI models and LLMs. As developers execute operations on a GPU, the GPU&#8217;s memory accumulates state. This GPU data is very difficult to read directly, which poses a problem if you wish to snapshot a machine&#8217;s state. Now cuda-checkpoint offers a simple, bare-bones, free tool to do GPU checkpoint and recovery.</p><ul><li><p>For serverless functions, unikernels such as Unikraft now boast single digit boot times and fast snapshotting. This should enable faster cold starts and scale-to-zero, which will result in cost savings. Many unikernels tout increased security in multi-tenant environments, as well. As unikernels add Kubernetes support, I expect adoption to increase, so non-serverless workloads like microservices will benefit.</p></li></ul></li><li><p><a href="https://x.com/kellabyte/status/1847041418730106969">Kelly Sommers</a>: How do you decide when something that is essentially a data pipeline job belongs in a data orchestration tool instead of a bunch of micro services reading, transforming &amp; writing data using some scheduling lib?</p><p>Sometimes diff to decide when to disrupt a teams comfort choices.</p></li><li><p><a href="https://x.com/JohnKutay/status/1846997358271164569">John Kutay</a>: I always recommend CDC for analytics on transactional data. OLTP systems rely heavily on efficient management of the buffer cache for high-speed data access. Analytical queries can increase cache pressure by loading large amounts of data that may not be reused frequently, pushing out more critical OLTP-related data from the cache.</p></li><li><p><a href="https://bsky.app/profile/esammer.bsky.social/post/3l7dxi5dqnu26">Eric Sammer</a>: The current discourse on disaggregated compute and storage in data infra says local disk is bad. I think this lacks nuance. Local persistent disk (e.g. EBS) is bad. Ephemeral local disk should be embraced as a block cache for reads and staging of writes to durable storage. The cost/op is a win.</p></li><li><p><a href="https://sympathetic.ink/2024/10/10/The-Future-Of-Lineage.html">Julien Le Dem</a>: Modern data engineering is emancipating ourselves from an uncontrolled flow of upstream changes that hinders our ability to deliver quality data.</p></li><li><p><a href="https://sympathetic.ink/2024/10/10/The-Future-Of-Lineage.html">Julien Le Dem</a>: The final step of standardization is to move the responsibility of producing lineage metadata to the producer of data itself. As it emerges as a common need for all data practitioners, lineage becomes a requirement for all data tools, open source or proprietary.</p></li><li><p><a href="https://x.com/craigkerstiens/status/1848410109291938009">Craig Kerstiens</a>: If you're not running PgBouncer check your idle connection count:</p><p>SELECT count(*), state</p><p>FROM pg_stat_activity</p><p>GROUP BY state;</p></li><li><p><a href="https://x.com/mipsytipsy/status/1848164468481540284">Charity Majors</a>: This is a hard truth about data-driven products. You can have a world-class team, great ideas, and tons of funding, but your ability to build a great user experience will always be bounded by how bits get laid out on disk -- decisions made long before any of you were even there.</p></li><li><p><a href="https://x.com/mipsytipsy/status/1848160648624316695">Charity Majors</a>: Catching up and closing tabs on a month or so if missed blog posts, and here's another dandy: "The Observability CAP Theorem", by @_cartermp. Everybody wants:</p><ul><li><p>1, fast queries</p><p>2, long retention</p><p>3, rich context</p><p>4, low cost</p></li><li><p>You can pick two, *maybe* three.</p></li></ul></li><li><p><a href="https://x.com/gunnarmorling/status/1847024755263918577">Gunnar Morling</a>: Thoroughly thinking about and describing the possible failure modes of a proposed design will put you ahead of 90% of software engineers.</p></li><li><p><a href="https://x.com/SeattleDataGuy/status/1844908402490712506">SeattleDataGuy</a>: Let's just fix it in SQL - It can seem really easy to fix business logic in the SQL layer rather than from the source. However, this means, in the long-run, anytime that business logic changes, your team needs to update the SQL as well. It's far more impactful to get the source team to ensure the data is right where they create it rather than in the data warehouse.</p></li><li><p><a href="https://x.com/AlekseyCharapko/status/1844462275807293811">Aleksey Charapko</a>: My student Owen (@owenhilyard) shares his thoughts on DPDK at the DPDK Summit: "DPDK in Databases: Why Isn't It More Common?" TLDR: DPDK is hard, and there is an impedance mismatch between DPDK and DB engineers in creating good network abstractions.</p></li><li><p><a href="https://www.linkedin.com/posts/vinothchandar_are-the-table-format-wars-entering-the-final-activity-7248144974444175360-PdSK">Vinoth Chandar</a>: There is an unhealthy romanticism for war analogies in our industry. After all, we are here to build software, not take sides in wars &#128578;. Thankfully, this does not matter since <a href="https://www.linkedin.com/feed/hashtag/?keywords=opensource&amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7248144974444175360">hashtag#opensource</a> does not need vendor blessings to thrive. It just needs a strong community intent on building software.</p></li><li><p><a href="https://x.com/MarcJBrooker/status/1848391994525016379">Marc Brooker</a>: "But what about&nbsp; time-to-market?" has been one of the objections to automated reasoning&nbsp; and formal methods forever, but in many domains they allow us to get to&nbsp; market faster. This is especially true in security, availability, and durability-critical domains.</p></li><li><p><a href="https://x.com/BonesMoses/status/1847743182240698716">Shaun Thomas</a>: BRIN indexes are criminally underused in general. I need to sit down and do a writeup for good use cases for BRIN and KNN indexes.</p></li><li><p><a href="https://x.com/fchollet/status/1847791200583241797">Fran&#231;ois Chollet</a>: If you take a problem that is known to be solvable by expert humans via pure pattern recognition (say, spotting the top move on a chess board) and that has been known to be solvable via convnets as far back as 2016, and you train a model on ~5B chess positions across ~10M games, and you find that the model can solve the problem at the level of a human expert, that isn't an example of out-of-distribution generalization. That is an example of local generalization -- precisely the thing you expect deep learning to be able to do.</p></li><li><p><a href="https://x.com/emollick/status/1848582933499810062">Ethan Mollick</a>: E-commerce companies are doing a good job in their A/B testing, avoiding p-hacking themselves. (This wasn't the case several years back when A/B testing was newer). <em>Referring to</em>:</p><ul><li><p><a href="https://alexmiller.phd/research/p-hacking/ab-testing-p-hacking.pdf">https://alexmiller.phd/research/p-hacking/ab-testing-p-hacking.pdf</a></p></li><li><p>In recent years, randomized experiments (or &#8220;A/B tests&#8217;) have become commonplace in many industrial settings as managers increasingly seek the aid of scientific rigor in their decision-making. However, just as this practice has proliferated among firms, the problem of &#119901;-hacking&#8212;whereby experimenters adjust their sample size or try several statistical analyses until they find one that produces a statistically significant &#119901;-value&#8212;has emerged as a prevalent concern in the scientific community. Notably, many commentators have highlighted how A/B testing software enables and may even encourage &#119901;-hacking behavior.&nbsp;</p></li></ul></li><li><p><a href="https://x.com/emollick/status/1847412650839347619">Ethan Mollick</a>: It is morally wrong to use AI detectors when they produce false positives that smear students in ways that hurt them and where they can never prove their innocence. Do not use them.</p></li><li><p><a href="https://x.com/nisanharamati/status/1849146392813469896">Nisan Haramati</a>: Which is why it's really important to consider how cost behaves as a system scales. A system whose unit-cost increases with scale (particularly when it grows beyond its optimal operational size) does not actually satisfy "can always grow larger" [...] And it leads to the question that Graphium Labs is working on: can we design a system whose per-unit cost of operation does not overtake the value that the system produces, as the system grows well into the extreme scale range?</p></li><li><p><a href="https://www.p99conf.io/session/the-next-chapter-in-the-sordid-love-hate-relationship-between-dbs-and-oses/">Andy Pavlo</a> at <a href="https://www.p99conf.io/">P99 Conf</a>: So we&#8217;ve been working on a new key/value storage system called BPF-DB. The goal is to provide a transaction storage engine, with a simplistic API with sets and gets, wrapped up in transactions. The idea is to allow developers to build more full featured systems using BPF-DB as the backing storage. Think of something like RocksDB (for eBPF).</p></li><li><p><a href="https://x.com/mim_djo/status/1847556094136332722">Mim</a>: maybe the most important discussion that will determine the future of delta table and iceberg, I hope cool heads will prevails :) <a href="https://lists.apache.org/thread/wyon0kvroxsmkxh153444xzscwbb68o1">https://lists.apache.org/thread/wyon0kvroxsmkxh153444xzscwbb68o1</a>&nbsp;</p></li><li><p><a href="https://news.ycombinator.com/item?id=41896893">CharlieDigital</a>: Didn't look too deeply, but one of the keys with Cypher (at least in the context of graph databases) is that it has a nice way of representing `JOIN` operations as graph traversals.</p><ul><li><p>MATCH (p:Person)-[r]-(c:Company) RETURN p.Name, c.Name</p></li><li><p>Where `r` can represent any relationship (AKA `JOIN`) between the two collections `Person` and `Company` such as `WORKS_AT`, `EMPLOYED_BY`, `CONTRACTOR_FOR`, etc.</p></li><li><p>So I'd say that linear queries are one of the things I like about Cypher, but the clean abstraction of complex `JOIN` operations is another huge one.</p></li></ul></li><li><p><a href="https://news.ycombinator.com/item?id=41896869">CharlieDigital</a>: If you haven't been following it, I recently found out that it is now supported in a limited capacity by Google Spanner[0]. The openCypher initiative started a few years back and it looks like it's evolved into the (unfortunate moniker) GQL[1]. So it may be the case that we'll see more Cypher out in the wild.</p><ul><li><p>[0]<a href="https://cloud.google.com/spanner/docs/graph/opencypher-reference"> </a><a href="https://cloud.google.com/spanner/docs/graph/opencypher-refer%E2%80%A6">https://cloud.google.com/spanner/docs/graph/opencypher-refer&#8230;</a></p></li><li><p>[1]<a href="https://neo4j.com/blog/cypher-gql-world/"> https://neo4j.com/blog/cypher-gql-world/</a></p></li></ul></li><li><p><a href="https://jeremymorrell.dev/blog/a-practitioners-guide-to-wide-events/">Jeremy Morrell</a>: Adopting Wide Event-style instrumentation has been one of the highest-leverage changes I&#8217;ve made in my engineering career.</p></li><li><p><a href="https://dl.acm.org/doi/pdf/10.1145/3662010.3663442">Simple, Efficient, and Robust Hash Tables for Join Processing</a>:</p><ul><li><p>Joins are asymmetric. Most joins are asymmetric, with one side often much smaller than the other. Hash joins exploit this asymmetry by building a hash table on the smaller side and probing it using the larger side. As the sides are often orders of magnitude different in size, the probing phase must be kept extraordinarily efficient.</p></li><li><p>Joins are selective. The asymmetry of the sides also manifests in terms of join selectivity: Many probe-side tuples will not find matches. Therefore, it is crucial to efficiently eliminate tuples without a join partner from the large probe side. Bloom filters are ideal for this task.</p></li></ul></li><li><p><a href="https://alexmiller.phd/research/p-hacking/ab-testing-p-hacking.pdf">An investigation of &#119901;-hacking in e-commerce A/B testing</a>:&nbsp;</p><ul><li><p>As empirical science and statistics evolved and became institutionalized throughout the 20th century, this simple rule-of-thumb gradually solidified into a widespread convention for evaluating statistical evidence, with the &#119901;=0.05 threshold often being treated as a definitive cutoff.2 In recent decades, however, the scientific community has increasingly scrutinized the utility, applicability, and consequences of widespread reliance on significance testing that dichotomizes results based on &#119901;-values in this way.</p></li><li><p>Given that academic researchers, often with doctoral degrees and graduate training in statistics, have been known to engage in &#119901;-hacking behavior (Brodeur et al., 2020, 2023b, Szucs, 2016), it is reasonable to ask whether analysts in corporate environments using similar statistical techniques make similar methodological errors.</p></li></ul></li><li><p><a href="https://muratbuffalo.blogspot.com/2024/10/auto-wlm-machine-learning-enhanced.html">Murat Demirbas</a>: Finally, there are operational concerns! Reliably integrating ML into the critical path of any database management system is difficult. How do you ensure there are no surprises when faced with the long-tail of workloads? Whenever queries queue there is a risk of disproportional increase in the response time of short running queries compared to their execution time; a phenomenon often referred to as head of the line blocking (HLB). It seems like the query execution system can be a great breeding ground for metastable failures! How do you trust handing this over to a ML-based system?</p></li><li><p><a href="https://www.linkedin.com/posts/jack-vanlightly-1153b44a_evolution-of-flink-20-state-management-storage-computing-activity-7255488743011151872-T6Bx">Jack Vanlightly</a>: The original state management design in Flink wasn't optimal for the ever growing size of the state being managed by stream processing jobs. But we've seen steady evolution, from aligned to unaligned checkpointing, generic incremental checkpoints, and new state reconstruction algorithms. The next step in this evolution is cloud-native, disaggregated state storage.&nbsp;</p></li><li><p><a href="https://www.morling.dev/blog/cdc-is-a-feature-not-a-product/">Gunnar Morling</a>: In my opinion, CDC makes sense as part of a cohesive data platform which integrates all these things. These, and more: also data governance, schema management, observability, quality management, etc. Another angle for CDC productization could be to marry it closely with a database. Imagine Postgres provided out of the box a Kafka broker endpoint to which you can subscribe for getting Debezium-formatted data change events. How cool would that be? But again, that&#8217;s a feature, not a product.</p></li><li><p><a href="https://redmonk.com/jgovernor/2024/09/25/observability-as-a-day-zero-operation/">James Governor</a>: We&#8217;ve also had a long era of sprawl, where developers and organisations and engineering teams have had a lot of autonomy in the decisions they make, which has enabled productivity in some dimensions, but also major challenges in terms of complexity and lack of standardisation in databases, runtimes, monitoring tools, programming languages and so on.</p></li><li><p><a href="https://www.hackintoshrao.com/new-low-level-api-for-lakehouse-centric-compute-engines/">Karthik Rao</a>: I will argue that today&#8217;s query engines, such as Apache Spark, do not effectively interact with lake houses due to limitations in handling object storage semantics, lack of integration with catalog systems like Iceberg for governance and lineage, and inadequate support for lakehouse-specific features. I believe there is a need for a new class of lakehouse-native query engine APIs with explicit semantics for object storage and open table formats.</p></li><li><p><a href="https://www.craigkerstiens.com/2024/10/18/the-future-of-postgres/">Craig Kerstiens</a>: I&#8217;m often asked what do I think the future for Postgres holds, and my answer has been mostly the same for probably 8 years now, maybe even longer. You see for Postgres itself stability and reliability is core. So where does the new stuff come from if it&#8217;s not in the stable core&#8230; extensions.</p></li><li><p><a href="https://cloudedjudgement.substack.com/p/clouded-judgement-101824-from-systems">Jamin Ball</a>: As a result, we may see a fundamental change in how enterprise applications are built. The traditional model of a front-end application tied to a database like Oracle and a series of manual workflows might give way to AI-native applications built on AI native databases, where the database takes center stage. These AI applications will be designed to operate on top of centralized data repositories&#8212; like a data lakes or lakehouse &#8212;where AI agents gather and process information from a wide array of unstructured sources.</p></li><li><p><a href="https://shopify.engineering/building-resilient-payment-systems">Bart de Water</a>: Understanding a bit of queueing theory goes a long way in being able to reason about how a system will behave under load.</p></li><li><p><a href="https://www.dataengineeringpodcast.com/episodepage/bring-vector-search-and-storage-to-the-data-lake-with-lance">Weston Pace on Data Engineering Podcast E442</a> (23 min). So I used to work with PyArrow and Parquet data sets and there would be a lot of those sorts of configuration things. One of our goals with Lance was really to get rid of those as much as possible. We found that with these wide data types, it either becomes hard to figure out what the right setting is or its damn right impossible, there is no good setting. So with Lance, we got rid of row groups. I told my friend at the time, if the only good thing I do in my life is get rid of row groups then I will consider it a success. Hopefully that can eventually propagate back to Parquet and other file formats.</p></li><li><p><a href="https://www.dataengineeringpodcast.com/episodepage/bring-vector-search-and-storage-to-the-data-lake-with-lance">Weston Pace on Data Engineering Podcast E442</a> (40 min): Because what we&#8217;re seeing is that compression techniques, that again something that seemed relatively solved, well now people are talking about FastLanes and FSST and ALP, and all these interesting compression techniques.</p></li><li><p><a href="https://changelog.com/practicalai/292">Daniel Whitenack Practical AI E292</a>: I resonate so much with this, coming from a background as a data scientist, living through the years of being told to use Spark for this. Basically my experience in this ecosystem is, I would try to write a query and it would get the right result, but to your point Till, I would just be waiting forever for a result. So I would send the query to some other guy, whose name was Eugene and Eugene was really smart, and he could figure out a way to make it go really fast, and I never became Eugene.</p></li></ul><h2>Humans with opinions</h2><h3><a href="https://x.com/SeattleDataGuy/status/1847392288353169632">Seattle Data Guy (aka Ben Rogojan) on the Snowflake vs Databricks battle</a></h3><p><em>[X post]</em></p><p>First off..."Spark-based SaaS"...they aren't Voldemort..you can say their name.</p><p>Second...the more you think about Snowflake vs. Databricks.</p><p>The happier Snowflake and Databricks must be.</p><p>Despite there being a dozen other options when it comes to building data analytics platform.</p><p>They&#8217;ve slowly turned the narrative into Coke vs Pepsi.</p><p>Nike vs. Adidas.</p><p>Burger King vs McDonald&#8217;s.</p><p>Don't think about any other solutions.</p><p>I posted this a while back, but this seemed pertinent.</p><h3><a href="https://phillipcarter.dev/2024/09/14/the-observability-cap-theorem/">Phillip Carter on The Observability CAP Theorem</a>&nbsp;</h3><p><em>[Blog snippet]</em></p><p>The theorem</p><p>Observability has a similar dynamic as the CAP Theorem. Generally speaking, sufficient observability for nontrivial, live applications/systems involves these properties:</p><ul><li><p>Fast queries on your data right now</p></li><li><p>Enough data to access per query (days, months, years, back)</p></li><li><p>Access to all the data you care about for a given context</p></li><li><p>A bill at the end of the month that doesn&#8217;t make you cry</p></li></ul><p>Of these, you can definitely get one, probably get two, maybe get three, and you absolutely, positively cannot get all four. The only way that&#8217;s possible is if you&#8217;re just not generating much data to begin with (e.g., a small business like Basecamp).</p><p>Every year, legions of engineers are tasked by their management to get all four properties themselves after experiencing an eye-watering Datadog bill. After having some fun trying to build baby&#8217;s first large-scale data analysis system, they ultimately fail.</p><h3><a href="https://opensourcedatasummit.com/data-catalogs-panel/">Open Source Data Summit, Panel Discussion: The rise of open source data catalogs</a>&nbsp;</h3><p><em>[Video snippet]</em></p><p>What does your project and your community plan to do about structured data?</p><ul><li><p>Denny Lee (Polaris): This isn&#8217;t just for the catalog community, we&#8217;re all facing the same dilemma. We want to apply the same logic, of governance, some form of lineage with structured data, and now we need to apply that to our semi-structured and unstructured data. GenAI is everywhere now, that&#8217;s great but what were the parameters you used? What was the training data you used? What&#8217;s the lineage of all this? Can you from a fiduciary or compliance perspective explain where the source of this data is from?</p></li><li><p>Russel Spitzer (Iceberg): I wonder, and we&#8217;ve had discussions about this in the Iceberg community, if we need some way of tracking blobs, and associated metadata, as entities within the table. Both in Delta, and in Iceberg and Hudi, we have this ability to do this tracking, this lineage, and all we really need to do is extend it past the relational table into attached blobs that are connected to these tables. If we do that in one of these base table formats, then these catalogs get it for free. [&#8230;] We don&#8217;t need this to be a catalog-level concern if we can build this into the table formats themselves.</p></li></ul><h2>Helpful Humans</h2><ul><li><p>Bart de Water of Shopify wrote <a href="https://shopify.engineering/building-resilient-payment-systems">10 Tips for Building Resilient Payment Systems</a> (though I think it applies far more broadly)</p></li><li><p>Alex Merced wrote:</p><ul><li><p><a href="https://amdatalakehouse.substack.com/p/all-about-parquet-part-01-an-introduction">All About Parquet 01</a> (the first in a 10-part series on Apache Parquet).</p></li><li><p><a href="https://amdatalakehouse.substack.com/p/a-deep-dive-into-github-actions-from">A Deep Dive Into GitHub Actions From Software Development to Data Engineering</a></p></li></ul></li><li><p>Jeremy Morrell wrote <a href="https://jeremymorrell.dev/blog/a-practitioners-guide-to-wide-events/">A Practitioner's Guide to Wide Events</a></p></li><li><p>Farzad Nobar wrote <a href="https://towardsdatascience.com/time-series-from-analyzing-the-past-to-predicting-the-future-249ab99ec52d">Time Series &#8212; From Analyzing the Past to Predicting the Future</a> (an overview of statistical methods for making forecasts based on time-series data).</p></li><li><p>Brent Ozar wrote<a href="https://www.brentozar.com/archive/2024/10/how-many-indexes-is-too-many/"> How Many Indexes Is Too Many?</a> (Focused on SQL Server but broadly applicable).</p></li></ul><h2>R&amp;D humans</h2><ul><li><p>A survey of different LLM fine-tuning techniques: <a href="https://arxiv.org/abs/2408.13296">https://arxiv.org/abs/2408.13296</a></p><ul><li><p><em>The analysis differentiates between various fine-tuning methodologies, including supervised, unsupervised, and instruction-based approaches, underscoring their respective implications for specific tasks.</em></p></li><li><p><em>A structured seven-stage pipeline for LLM fine-tuning is introduced, covering the complete lifecycle from data preparation to model deployment. Key considerations include data collection strategies, handling of imbalanced datasets, model initialisation, and optimisation techniques, with a particular focus on hyperparameter tuning.</em></p></li><li><p><em>The report also highlights parameter-efficient fine-tuning methods such as Low-Rank Adaptation (LoRA) and Half Fine-Tuning, which balance resource constraints with optimal model performance.</em></p></li><li><p><em>The exploration extends to advanced fine-tuning techniques and configurations like memory finetuning, Mixture of Experts (MoE) and Mixture of Agents (MoA), demonstrating how these methods harness specialised networks and multi-agent collaboration for improved outcomes. Proximal Policy Optimisation (PPO) and Direct Preference Optimisation (DPO) are discussed as innovative approaches to aligning models with human preferences, while the benefits of pruning and routing optimisations are examined for enhancing efficiency.</em></p></li><li><p><em>In the latter sections, the report delves into validation frameworks, post-deployment monitoring, and optimisation techniques for inference. It also addresses the deployment of LLMs on distributed and cloud-based platforms. Additionally, cutting-edge topics such as multimodal LLMs and fine-tuning for audio and speech processing are covered, alongside emerging challenges related to scalability, privacy, and accountability.</em></p></li><li><p><em>This report aims to serve as a comprehensive guide for researchers and practitioners, offering actionable insights into fine-tuning LLMs while navigating the challenges and opportunities inherent in this rapidly evolving field.</em></p></li></ul></li><li><p>Two papers discussing more efficient join implementation strategies:</p><ul><li><p><a href="https://dl.acm.org/doi/pdf/10.1145/3662010.3663442">Simple, Efficient, and Robust Hash Tables for Join Processing</a></p><ul><li><p><em>Hash joins play a critical role in relational data processing and their</em></p><p><em>performance is crucial for the overall performance of a database</em></p><p><em>system. Due to the hard to predict nature of intermediate results,</em></p><p><em>an ideal hash join implementation has to be both fast for typical</em></p><p><em>queries and robust against unusual data distributions. In this paper,</em></p><p><em>we present our simple, yet effective unchained in-memory hash</em></p><p><em>table design.</em></p></li></ul></li><li><p><a href="https://www.vldb.org/pvldb/vol17/p1350-justen.pdf">POLAR: Adaptive and Non-invasive Join Order Selection via</a></p><p><a href="https://www.vldb.org/pvldb/vol17/p1350-justen.pdf">Plans of Least Resistance</a></p><ul><li><p><em>Join ordering and query optimization are crucial for query performance but remain challenging due to unknown or changing characteristics of query intermediates, especially for complex queries with</em></p><p><em>many joins. Over the past two decades, a spectrum of techniques for</em></p><p><em>adaptive query processing (AQP)&#8212;including inter-/intra-operator</em></p><p><em>adaptivity and tuple routing&#8212;have been proposed to address these</em></p><p><em>challenges. However, commercial database systems in practice do</em></p><p><em>not implement holistic AQP techniques because they increase the</em></p><p><em>system complexity (e.g., intertwined planning and execution) and</em></p><p><em>thus, complicate debugging and testing. Additionally, existing approaches may incur large overheads, leading to problematic performance regressions. In this paper, we introduce POLAR, a simple yet</em></p><p><em>very effective technique for a self-regulating selection of alternative</em></p><p><em>join orderings with bounded overhead.</em></p></li></ul></li></ul></li></ul><h2>Notable trend - Streaming state management</h2><p>Yuan Mei, Apache Flink PMC member and director of engineering at Alibaba Cloud spoke last week at Flink Forward about work to implement cloud-native disaggregated state storage in Flink 2.0.</p><p>Streaming state storage is an interesting subject and the state of the art is moving to disaggregated storage (separation of compute and storage) but also to more bespoke state stores. It turns out that there are challenges to utilizing state stores such as RocksDB in streaming workloads. No data store can serve all workloads, and we see much diversity in stream processor designs when looking across both mature and new stream processors today. Due to this diversity, many stream processors are working on building or have built native state stores to work well with their specific designs.</p><p>A number of blog posts have been written this year on this subject. It makes interesting reading to learn how stream processing often requires different state management from an OLTP database (where RocksDB is traditionally used). However, as you will see, each highlights different problems they overcome by choosing a more bespoke state store solution.</p><p>With that preamble here are a number of blog posts on this general topic:</p><ul><li><p><a href="https://www.alibabacloud.com/blog/evolution-of-flink-2-0-state-management-storage-computing-separation-architecture_601133">Evolution of Flink 2.0 State Management Storage-computing Separation Architecture</a> (Alibaba Cloud)</p><ul><li><p><em>For this reason, we can consider doing this differently. We can use DFS as primary storage and local disk as an optional cache, and DFS data is the source of truth. In this method, state data is directly and continuously written to DFS, and memory and local disks are used as caches to serve operator state access at the upper layer. The benefits of this architecture are:</em></p><ul><li><p><em>When a checkpoint is triggered, most of the state files have already been in DFS. Checkpoints can be quickly executed.</em></p></li><li><p><em>State files can be shared among operators. In some scenarios, storage resources can be greatly reduced by sharing state computing.</em></p></li><li><p><em>State query can be implemented based on remote checkpoint files and file-level APIs can be provided.</em></p></li><li><p><em>Compaction and state cleanup are no longer bound to the task manager. We can use methods such as remote compaction and load balancing to balance the overall resource usage of the cluster.</em></p></li></ul></li></ul></li><li><p><a href="https://www.feldera.com/blog/rocksdb-not-a-good-choice-for-high-performance-streaming">RocksDB: Not A Good Choice for a High-Performance Streaming</a> (Feldera project)</p><ul><li><p><em>One might argue that Rust has zero-copy deserialization libraries like rkyv that could be used together with RocksDB. Zero-copy deserialization allows directly casting the starting address of the bytes from RocksDB to an actual Rust type, eliminating CPU overhead. However, zero-copy deserialization requires proper alignment of the deserialized bytes for the target Rust type. RocksDB operates on generic byte slices (&amp;[u8]), which have an alignment requirement of 1 in Rust. Additionally, RocksDB is written in C++, which does not adhere to Rust's alignment rules. Attempting zero-copy deserialization with rkyv and RocksDB might occasionally work, but it often results in a panic due to misaligned slices</em></p></li><li><p><em>RocksDB offers an overwhelming number of configuration options, making it nearly impossible for non-experts to ensure optimal settings. The complexity is so significant that a <a href="https://dl.acm.org/doi/10.1145/3655038.3665954">HotStorage&#8217;24 paper</a> detailed training a large language model (LLM) to identify good configurations. It won the best paper award at the conference.</em></p></li></ul></li><li><p><a href="https://materialize.com/blog/why-not-rocksdb/">Why not RocksDB for streaming storage?</a> (Materialize, 2020)</p><ul><li><p><em>Each core in a Timely Dataflow cluster has a complete copy of the logical dataflow plan, and every operator is partitioned across every core. In this sharding scheme, operators on a worker are cooperatively scheduled, and have to be carefully designed to yield eagerly, or they will block other operators from executing, potentially stalling the entire dataflow graph.</em></p></li><li><p><em>And therein lies the problem with RocksDB: RocksDB is designed for liberally using background threads to perform the computation for physical compaction. In an OLTP setting, this is exactly what you want - lots of concurrent writers pushing to the higher levels of the LSM tree, lots of readers accessing immutable SSTables of the entire tree with snapshot isolation semantics, and compaction proceeding in the background with additional cores. In a streaming setting, however, those cores are better used as additional concurrency units for the dataflow execution, which means compaction happens in the foreground. And thus, scheduling when the compaction happens cannot be outsourced, and must be considered alongside all other operators.</em></p></li></ul></li><li><p><a href="https://www.responsive.dev/blog/stop-embedding-rocksdb-in-kafka-streams">Stop embedding RocksDB in your Stream Processor!</a> (Responsive)</p><ul><li><p><em>In many of these situations the RocksDB state has to be rebuilt from the underlying Kafka changelog topics. If that happens, the partitions in question will not be able to process any new events until the state is fully rebuilt, which could take a very long time for large state stores. This means that these partitions are offline for the duration of the state restoration, which could result in significant business impact.</em></p></li><li><p><em>Debugging incidents often requires you to look up state. For instance, if you can&#8217;t make sense of your join output, you&#8217;d typically want to look up your state in order to explain the output you see. Doing this with RocksDB is not straightforward: you need to know which partition the key is present on and then run an interactive query against the live application to get the state value for that key. By contrast, dedicated databases have full fledged query layers. This means that you can just issue a lookup against the key to get it&#8217;s value.</em></p></li></ul></li></ul><p><a href="https://slatedb.io/">SlateDB</a> is an interesting project that is relevant to this subject of embedded storage engines (such as RocksDB) and storage disaggregation. It&#8217;s the first mover in this area though I can&#8217;t imagine it will remain the only embedded state store built for object storage for long. Flink 2.0 has forked RocksDB to create ForSt, a RocksDB that speaks object storage (though it is being developed specifically for Flink, and not designed to be a general-purpose storage engine like SlateDB as far as I know).</p><h2>My writing</h2><ul><li><p><a href="https://jack-vanlightly.com/blog/2024/10/21/the-curse-of-conway-and-the-data-space">The Curse of Conway and the Data Space</a>. Last week I wrote about Conway&#8217;s Law and the data space. Could it be that many modern trends, and even many categories within the Modern Data Stack, have just been reactions to the negative consequences of segregating data teams from software eng teams? When you look the entire space more systemically, through the lens of Conway&#8217;s Law, it gives you a wholly different perspective.</p></li><li><p><a href="https://jack-vanlightly.com/blog/2024/10/24/the-teachers-nemesis">The Teacher&#8217;s Nemesis</a>: <em>The curse of knowledge is our own blindness as experts regarding the difficulty of learning something and the complexity of concepts we have internalized fully.</em></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Humans of the Data Sphere! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Humans of the Data Sphere Issue #1 October 15th 2024]]></title><description><![CDATA[Your biweekly dose of insights, observations, commentary and opinions from interesting people from the world of databases, AI, distributed systems and the data engineering/analytics space.]]></description><link>https://www.hotds.dev/p/humans-of-the-data-sphere-issue-1</link><guid isPermaLink="false">https://www.hotds.dev/p/humans-of-the-data-sphere-issue-1</guid><dc:creator><![CDATA[Jack Vanlightly]]></dc:creator><pubDate>Tue, 15 Oct 2024 12:45:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50bf85b-a06e-4504-9d93-83d7c3c3419c_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is issue #1 of Humans of the Data Sphere. </p><h2>Aims of the publication</h2><p>This publication aims to bring together the words of humans from across the data landscape. This is broader than just the &#8220;data space&#8221;, it encompasses all kinds of databases, messaging/streaming, OLAP, (cloud) data warehouses, lakehouses, distributed systems, and some AI and ML. My hope is that it is narrow enough to be cohesive, but broad enough for readers to be exposed to new ideas and new people that might sit just outside their normal career focus. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Humans of the Data Sphere! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This format is heavily inspired by the <a href="https://highscalability.com/">highscalability.com</a>, &#8220;Stuff the internet says on scalability&#8220; posts. While I am using a similar format as a launchpad, it&#8217;s still too early to know what HOTDS will be. Right now it reflects the subjects and people that I find most interesting and that I think will be interesting to others.</p><p>Let me know what you think of issue #1 at feedback@hotds.dev.</p><h2>Quotable humans</h2><ul><li><p><a href="https://x.com/DolanRyanne/status/1843708736411673077">Ryanne Dolan:</a> The best thing about streaming data pipelines is NOT that they are "real-time". It's that they are tremendously easier to operate.</p></li><li><p><a href="https://www.reddit.com/r/dataengineering/comments/1fu1pth/comment/lpwri9j/">sahilthapar</a>: It took a long time at my previous company but we were finally able to convince the upstream sources to own the quality of the data they send out. I totally agree with this comment, it's a slippery slope the more you "handle" it, the less likely they are to ever fix the systems.</p></li><li><p><a href="https://x.com/soumithchintala/status/1841540529240088905">Soumith Chintala</a>: "How to train a model on 10k H100 GPUs?" has now been immortalized on my blog: <a href="https://soumith.ch/blog/2024-10-02-training-10k-scale.md.html">https://soumith.ch/blog/2024-10-02-training-10k-scale.md.html</a>&nbsp;</p></li><li><p><a href="https://muratbuffalo.blogspot.com/2024/10/srds-day-2.html">Murat Demirbas</a>: Complexity creeps into distributed systems through failures, asynchrony, and change. Mahesh also confessed that he didn't realize the extent to the importance of managing change until his days in industry. While other fields in computer science have successfully built robust abstractions (such as layered protocols in networking, and block storage, process, address space abstractions in operating systems), distributed systems have lagged behind in this aspect.</p></li><li><p><a href="https://www.dataengineeringpodcast.com/episodepage/build-your-data-transformations-faster-and-safer-with-sdf">Data Engineering Podcast E400</a> (39&#8217;): Why did Snowflake evolve its own grammar? DuckDB is also creating its own grammar. The reason for this is that there is no extensibility, so the only thing that&#8217;s left is to change the language.</p></li><li><p><a href="https://x.com/rakyll/status/1838718274256937266">Jaana Dogan</a>: When I retrospectively think about all the globally successful projects I worked on, the common denominator wasn't the buy-in from everyone. A few strongly opinionated people came together, identified a major problem, built a solution extensible enough. Growth was organic from that point on.</p></li><li><p><a href="https://www.linkedin.com/posts/lhochstein_reminder-about-the-importance-of-getting-activity-7244365859836592129-CSS6">Lorin Hochstein</a>: Reminder about the importance of getting good at recovering from incidents: 1. You can&#8217;t prevent all incidents from occurring. 2. You must recover from all of the incidents that occur.</p></li><li><p><a href="https://youtu.be/yNLVmhKp8wM?t=303">SuperDataScience E825</a> (7&#8217;): My definition of data quality is a bit different from other people&#8217;s. In the software world, people think about quality as, it&#8217;s very deterministic. So I am writing a feature, I am building an application, I have a set of requirements for that application and if the software no longer meets those requirements that is known as a bug, it&#8217;s a quality issue. But in the data space you might have a producer of data that is emitting data or collecting data in some way, that makes a change which is totally sensible for their use case. As an example, maybe I have a column called timestamp that is being recorded in local time, but I decide to change that to UTC format. Totally fine, makes complete sense, probably exactly what you should do. But if there&#8217;s someone downstream of me that&#8217;s expecting local time, they&#8217;re going to experience a data quality issue. So my perspective is that data quality is actually a result of mismanaged expectations between the data producers and data consumers, and that is the function of the data contract. It&#8217;s to help these two sides actually collaborate better with each other.</p></li><li><p><a href="https://muratbuffalo.blogspot.com/2024/10/ddia-chp-8-trouble-with-distributed.html">Murat Demirbas</a>: What can go wrong? Computers can crash. Unfortunately they don't fail cleanly. <a href="https://queue.acm.org/detail.cfm?id=3458812">Fail-fast is failing fast!</a> And again unfortunately, partial failures (limping computers) are very difficult to deal with. Even worse, with the transistor density so high, we now need to deal with silent failures. We have memory corruption and even silent faults from CPUs. The<a href="https://muratbuffalo.blogspot.com/2024/09/hpts24-day-1-part-2.html"> HPTS'24 session on failures</a> was bleak indeed. That was only the beginning. Then there are network failures. And clock synchronization failures. Did we leave anything? There are m<a href="https://muratbuffalo.blogspot.com/2023/09/metastable-failures-in-wild.html">etastable failures that are emergent behavior distributed systems behavior</a>. We can then venture into more malicious cases, like Byzantine failures. If you take into account security/hacking as failures, there are so many more problems to list. There are hurricanes, natural disasters, and even cyberattacks during natural disasters. The failure modes are so many to enumerate. So maybe instead of enumerating and explaining all these in detail, it is better to give the fundamental impossibility results haunting distributed systems: Coordinated Attack Impossibility and the FLP (Fischer-Lynch-Paterson) impossibility.</p></li><li><p><a href="https://benn.substack.com/p/something-lost-something-found">Benn Stancil</a>: The mood in the room&#8212;the music in the air&#8212;however, was relief. Sure, Coalesce is less of the cheery circus it once was, but that was never sustainable anyway. Sure, the dbt product itself is slowly <a href="https://www.youtube.com/watch?v=MPklvytosy4">tilting the floor</a><a href="https://benn.substack.com/p/something-lost-something-found#footnote-4-150116950"><sup>4</sup></a> towards a line of cash registers, but dbt Labs was never going to survive by selling a <a href="https://benn.substack.com/p/how-dbt-fails?utm_source=publication-search#:~:text=At%20its%20core%2C%20dbt%20is%20a%20relatively%20thin%20piece%20of%20technology%20(and%20an%20open%2Dsource%20one%20at%20that).">thin web app</a> on top of an approachable Python package. But this version of dbt, one person told me, feels like it can last. The session that they said was most memorable was a panel of dbt execs, not for what they said, but for who they were: <a href="https://www.getdbt.com/about-us">People with long resumes</a> of successfully selling stuff.</p></li><li><p><a href="https://x.com/GergelyOrosz/status/1842137761194639751">Gergely Orosz</a>: Years back, my team was part of an outage where people couldn&#8217;t takes rides for some time (I think 30-60 minutes or so.) It was bad. In the postmortem, we always needed to list the business impact. An Eng1 with an interest in product filled it out: He put in a negative number!! <em>(commenting on)</em>:&nbsp;</p><ul><li><p><a href="https://x.com/kellabyte/status/1841903859465089218">Kelly Sommers</a>: You would be surprised how many orgs are unable to answer a simple question like &#8220;does this product make money?&#8221;. They don&#8217;t have correct things in place to separate out the costs.</p></li></ul></li><li><p><a href="https://x.com/criccomini/status/1631052369948733440">Chris Riccomini</a>: Please hook LLMs up to ops data. </p><ul><li><p>"Which team is costing me the most on my s3 bill?" </p></li><li><p>"Which service returned 500 errors between 2am and 2:15 am last night?"</p></li><li><p>"Which service is calling the profile service with missing fields?"</p></li><li><p><a href="https://x.com/themoah/status/1845878444372250941">Aviv Dozorets</a> replied: I want to see more actual data separated from the noise. &#8220;What metrics changed in upstream service before my service crashed?&#8221; &#8220;How crash of service X affected other systems (that I might be unaware of)&#8221;.</p></li></ul></li><li><p><a href="https://muratbuffalo.blogspot.com/2024/10/ddia-chp-7-transactions-part-1.html">Murat Demirbas</a>: As a user of a database you won't need to understand exactly how the database is implemented, but you need to have some mechanical sympathy, dammit.</p></li><li><p><a href="https://news.ycombinator.com/item?id=41765977">chasd00</a>: I toured a data center in Tornado alley back when leasing cages was pretty common. I asked them about disaster planning regarding getting completely wiped off the map and they sorta scoffed at me. Literally two weeks later a tornado missed them by about a 1/4 mile. Would have loved to be a fly on the wall after that.</p></li><li><p><a href="https://x.com/rakyll/status/1843122111289884752">Jaana Dogan</a>: One of the main reasons why there is so much burnout in this space. Everyone is copying everyone, pretending to be ticking all the boxes instead of trying to build a cohesive great product that solves some hard problems in ways others don&#8217;t solve. <em>(referring to):</em></p><ul><li><p><a href="https://x.com/_cartermp/status/1843030077719887946">Phillip Carter</a>: one of the things that sucks about the observability space is that it's really hard to properly evaluate all the tools/products, and everyone is incentivized to "observabilitywash" their value props to make it sound like they do everything well, when they absolutely do not</p></li></ul></li><li><p><a href="https://x.com/sspaeti/status/1842308983438152101">Simon Sp&#228;ti</a>: Why is reusability so hard in the data space? That is a fascinating question.</p></li><li><p><a href="https://x.com/fchollet/status/1844759564874387558">Fran&#231;ois Chollet</a>: One more piece of evidence to add to the pile. This was an extremely heretic viewpoint in early 2023, and now it is increasingly becoming self-evident conventional wisdom. <em>(referring to)</em>:</p><ul><li><p>&#8220;Furthermore, we investigate the fragility of mathematical reasoning in these models and demonstrate that their performance significantly deteriorates as the number of clauses in a question increases. We hypothesize that this decline is due to the fact that current LLMs are not capable of genuine logical reasoning; instead, they attempt to replicate the reasoning steps observed in their training data.&#8221; <a href="https://arxiv.org/pdf/2410.05229">GSM-Symbolic: Understanding the Limitations of Mathematical Reasoning in Large Language Models</a></p></li><li><p>Fran&#231;ois Chollet: My a-priori expectation of ChatGPT is that it will be able to solve a previously seen task but will not be able to adapt to any original task no matter how simple, because its ability to solve problems does not depend on task complexity but task familiarity.</p></li></ul></li><li><p><a href="https://x.com/sh_reya/status/1844120938436284857">Shreya Shankar</a>: the correct way of thinking about the RAG vs long context debate is that RAG is predicate pushdown and predicates should always be pushed down if possible</p></li><li><p><a href="https://x.com/AlexMillerDB/status/1845911766280380685">Alex Miller</a>: I had missed that there was *any* filesystem which supported multi-block atomic writes, but F2FS does, and there's sqlite support for leveraging it <a href="https://oslab.kaist.ac.kr/wp-content/uploads/esos_files/publication/conferences/international/HPCCT2016-108_final.pdf">https://oslab.kaist.ac.kr/wp-content/uploads/esos_files/publication/conferences/international/HPCCT2016-108_final.pdf</a>. See <a href="https://lore.kernel.org/lkml/1411707287-21760-2-git-send-email-jaegeuk@kernel.org/">https://lore.kernel.org/lkml/1411707287-21760-2-git-send-email-jaegeuk@kernel.org/</a> for API.</p></li><li><p><a href="https://x.com/fchollet/status/1842686818472616374">Fran&#231;ois Chollet</a>: It's surprisingly easy to do "hard" things -- for the most part, you need to get started and keep at it</p></li><li><p><a href="https://x.com/AlekseyCharapko/status/1842367018483261718">Aleksey Charapko</a>: It is time for a new list of papers! Papers #181-190 in our Distributed Systems Reading group! Follow the link for the schedule and instructions on how to join and participate. <a href="https://charap.co/fall-2024-reading-group-papers-papers-181-190/">https://charap.co/fall-2024-reading-group-papers-papers-181-190/</a></p></li><li><p><a href="https://x.com/YingjunWu/status/1843486482738360581">Yingjun Wu</a>: As a founder, I can confirm that the consensus within the data streaming community favors @ApacheIceberg</p></li><li><p><a href="https://x.com/BonesMoses/status/1845102690121986194">Shaun Thomas</a> (on code comments): "Self describing code" can't cite RFCs, explain an underlying algorithm, or justify project architecture decisions. Comment blocks must mean something more than pure description. If you think comments are unnecessary, you're using them wrong.</p></li><li><p><a href="https://x.com/fchollet/status/1841902521717293273">Fran&#231;ois Chollet</a>: Interesting work on reviving RNNs. <a href="https://arxiv.org/abs/2410.01201">https://arxiv.org/abs/2410.01201</a> -- in general the fact that there are many recent architectures coming from different directions that roughly match Transformers is proof that architectures aren't fundamentally important in the curve-fitting paradigm (aka deep learning). Curve-fitting is about embedding a dataset on a curve. The critical factor is the dataset, not the specific hard-coded bells and whistles that constrain the curve's shape. As long as your curve is sufficiently expressive all architectures will converge to the same performance in the large-data regime.</p></li><li><p><a href="https://x.com/gunnarmorling/status/1842246814252356091">Gunnar Morling</a>: Considering the fact that your application uses a database an implementation detail which could be replaced with something else any time, is inefficient at best, setting up yourself for failure at worst. Embrace and take advantage of the tools you're using.</p></li><li><p><a href="https://x.com/fchollet/status/1843057888375550370">Fran&#231;ois Chollet</a>: To order to get high device utilization when training, the most important best practice is to both do data prefetching (moving the next batch of data to GPU memory while the previous batch is being processed) and asynchronous logging (moving the metrics from the previous batch to host memory while the next batch is being processed).</p></li><li><p><a href="https://x.com/lauriewired/status/1840798755102380538">LaurieWired</a>: Your files are dying. That SSD you keep in the closet, the one from your old system "just in case". Yup, degrading as we speak. SSDs are *shockingly* bad at power off retention, esp if it's near it's endurance rating.</p></li><li><p><a href="https://x.com/lauriewired">LaurieWired</a>: Improving productivity is a scam; our brains are *terrible* at determining what is useful or not. Instead, focus on eliminating small fake works. Fake works feel productive, have indicators of progress, and give a similar dopamine hit; without output.</p></li><li><p><a href="https://x.com/helloiamleonie/status/1841849988898275451">Leonie</a>: Don&#8217;t underestimate the impact of reranking in your RAG pipeline.</p></li><li><p><a href="https://x.com/mattturck/status/1841623384955732189">Matt Turck</a>: Today&#8217;s market, a summary: * $3B: valuation of a pre-IPO software company, because evaluated at public market multiples at 8x $375m revenue. * Also, $3B: valuation of an AI agent thing with barely any revenue because, vibes.</p></li><li><p><a href="https://x.com/sspaeti/status/1843692790011547667">Simon Sp&#228;ti</a>: Many asked how to so-called "break into data engineering". To be honest, if you just read whitepapers, you could go far.</p></li><li><p><a href="https://news.ycombinator.com/item?id=41765799">numbsafari</a>: "Cloud 3-2-1" to the rescue&#8230; I take the typical formulation (e.g., [1]), and translate it into:</p><ul><li><p>- Keep 3 copies of your data: production + 2.</p></li><li><p>- Keep 2 snapshots, stored separately.</p></li><li><p>- Keep 1 snapshot on-hand (literally in your possession), or with a different provider.</p></li></ul></li><li><p><a href="https://x.com/patio11/status/1843991848215576577">Noah Pepper</a>: Hilarious and poetic irony that regulators are looking at breaking up Google just as technology shifts are causing their search monopoly to melt away organically.</p></li><li><p><a href="https://x.com/emollick/status/1842951218421006340">Ethan Mollick</a>: Our research a year ago found that people stopped fact checking the AI when it got good enough, and juat took what it said as right (even if it wasn&#8217;t). I think that line has firmly &amp; permanently been crossed for many text summarization applications.</p></li><li><p><a href="https://x.com/gunnarmorling/status/1846129837850652729">Gunnar Morling</a>: The biggest problem of #Java is poor perception. It's technically super-solid, but too often folks discard it based on misconceptions or information outdated years ago.</p></li><li><p><a href="https://x.com/sspaeti/status/1843690038762123272">Simon Sp&#228;ti</a>: The medallion architecture gets some hype here and there. Still, IMO, it's a revamped architecture from the classical data warehouse layering `stage -&gt; cleansing -&gt; core -&gt; mart` we have done since the inception of modeling data warehouses with simplified names and optimized for data lakes.</p></li><li><p><a href="https://x.com/emollick/status/1842186439380832581">Ethan Mollick</a>: Individuals are seeing big gains from AI. Organizations less so.</p></li><li><p><a href="https://x.com/Scholars_Stage/status/1841619960910512138">T Greer</a>: the inability of gen z to read makes me think that if I don&#8217;t switch from writing essays to giving YouTube lectures and videos in the next decade I will have consigned my self to irrelevancy.</p></li><li><p><a href="https://x.com/spyced/status/1840936123322773956">Jonathan Ellis</a>: The current state of AI is frustrating but only because we keep getting glimpses of the magic that is possible but not yet reliable.</p></li><li><p><a href="https://x.com/debasishg/status/1842648904384364917">Debasish Ghosh</a>: TIL: Parquet uses Split Bloom Filters for predicate pushdown for high cardinality columns.</p></li><li><p><a href="https://x.com/rahulj51/status/1844234025524920348">Rahul Jain</a>: Interesting how Iceberg features you can use are the venn diagram intersection of: 1. Iceberg 2. choice of processing engine 3. choice of catalog.</p></li><li><p><a href="https://x.com/rahulj51/status/1841708196647325992">Rahul Jain</a>: The best thing about data engineering subreddit is that it's more practitioners and fewer vendors. Much better place to talk DE than Twitter, imo. And the community is friendlier than&nbsp; /r/programming.</p></li><li><p><a href="https://x.com/neelesh_salian/status/1843580511949873288">Neelesh Salian</a>: At this point, let&#8217;s just accept that Iceberg is the standard format and build on top of it? I don&#8217;t see the value in having multiple formats in an organization unless you have teams who do their own thing and have settled into a format already.</p></li><li><p><a href="https://x.com/emollick/status/1842293103044276391">Ethan Mollick</a>: Among the key questions shaping the AI industry is how long Meta will keep releasing open weights models for. Gen3 (GPT-5 class)? Gen4 (GPT-6 class)? At some point the logic they have been using might shift in the face of rising risks, costs &amp; opportunities for advantage.</p></li><li><p><a href="https://x.com/GergelyOrosz/status/1843268104341880896">Gergely Orosz:</a> Claiming zero errors and hallucinations for LLMs is the equivalent of claiming 100% uptime for services. Just marketing.</p></li><li><p><a href="https://x.com/CorvusCrypto/status/1844665780522106893">Birdy</a>: You'd think that the majority of data platform engineering is solving tech problems at large scale. Unfortunately it's once again the people problem that's all-consuming.</p></li><li><p><a href="https://x.com/shelajev/status/1843984901554794890">Oleg &#352;elajev</a>: Debezium is like the Observer pattern for your database! It taps into transaction logs and propagates changes to the outside world.</p></li><li><p><a href="https://x.com/gunnarmorling/status/1609958952040599552">Gunnar Morling</a> <em>(reposted from 2023)</em>: One data architecture I expect we'll see more in 2023 is #SQLite/#DuckDB deployed as caches at the edge, updated via change feeds from system-of-record: stellar read performance due to close local proximity to users and fully queryable data models tailored for specific use cases.</p></li><li><p><a href="https://x.com/SeattleDataGuy/status/1843744004724424917">Seattle Data Guy</a>: If you don't set a consistent coding/design standard, people will all create their own inconsistent coding/design standard.</p></li><li><p><a href="https://x.com/allballbearings/status/1843821901669675352">Jay Graves</a>: You can build the most beautiful data visualization layer in the history of history and most users will still ask for an Excel export.</p></li><li><p><a href="https://x.com/YingjunWu/status/1843169478873665572">Yingjun Wu</a>: Small data is the future. But that doesn&#8217;t mean big data is dead&#8212;it means the old "big data problems" can now be solved on smaller scales, often with just a few machines or even a single machine. There&#8217;s no longer a strong need to stress test systems at a thousand-node level because, for most real-world workloads, focusing on smaller-scale settings makes more sense. That said, single-node systems aren&#8217;t the universal solution. Systems still need to be distributed to overcome memory limitations, ensure fault tolerance, and maintain high availability. We&#8217;ll continue to see specialized systems emerge for different use cases&#8212;there&#8217;s still no "one size fits all.</p></li><li><p><a href="https://x.com/houlihan_rick/status/1844387127754383399">Rick Houlihan</a>: Every RDBMS backed service I have ever seen is denormalized in some way when it needs to scale out. No matter what database you use, when it comes to performance and efficiency, friends don't let friends join tables.</p></li><li><p><a href="https://x.com/j_foerst/status/1844023863476400440">Jakob Foerster</a>: When I discussed quitting Google to do a Phd, my manager, Steve Cheng,&nbsp; gave me the advice of "6 shots": Doing something meaningful usually takes about 5 years and we are productive for roughly 30 years. That gives you 6 attempts. So pick each one carefully and give it your best.</p></li><li><p><a href="https://x.com/petereliaskraft/status/1845525076801986732">Peter Kraft</a>: &#8220;Everybody knows that you deploy software on servers--physical machines with fixed pools of resources. But what if things were more flexible?&nbsp; What if CPUs and memory were disaggregated so you could allocate them in seconds from a network-attached pool? I really like this paper&#8230;</p><ul><li><p><a href="https://x.com/BonesMoses/status/1845649086776500555">Shaun Thomas</a>: It's an interesting concept, but it requires a complete overhaul of both hardware and OS design, and still must contend with PACELC tradeoffs. You can't defeat the speed of light.</p></li></ul></li><li><p><a href="https://x.com/ylecun/status/1845193021584728365">Yann LeCun</a>: Worth repeating: Do not confuse retrieval with reasoning. Do not confuse rote learning with understanding. Do not confuse accumulated knowledge with intelligence.</p></li><li><p><a href="https://muratbuffalo.blogspot.com/2024/10/srds-day-1.html">Murat Demirbas</a>: Cristina said that adversarial testing using byzantine adversary (for example, adversarial testing for congestion control) is better than straightforward application of fuzzing, which is most commonly used in security/networking conferences. She then introduced their approach to adversarial testing. They use an abstract model to generate abstract strategies, map abstract strategies to concrete strategies, and execute concrete strategies. Formal methods play a crucial role in this process. They help clarify system specifications, make implicit assumptions explicit, and identify flaws through counterexamples.</p></li><li><p><a href="https://www.scylladb.com/2024/10/08/scylladb-and-memcached/">ScyllaDB</a>: Second: performance converges over time. In-memory caches have been (for a long time) regarded as one of the fastest infrastructure components around. Yet, it&#8217;s been a few years now since caching solutions started to look into the realm of flash disks. These initiatives obviously pose an interesting question: If an in-memory cache can rely on flash storage, then why can&#8217;t a persistent database also work as a cache?</p></li><li><p><a href="https://towardsdatascience.com/data-architecture-lessons-learned-3589b152a8a6">Bernd Wessely</a>: The definition of the &#8216;data engineering lifecycle&#8217;, as helpful and organizing it might be, is actually a direct consequence of silo specialization.</p><p>It made us believe that ingestion is the unavoidable first step of working with data, followed by transformation before the final step of data serving concludes the process. It almost seems like everyone accepted this pattern to represent what data engineering is all about..</p></li></ul><h2>Humans With Opinions</h2><p>It&#8217;s easy to talk about how things work, harder to take a reasoned position on a subject.</p><p>These are some opinions I found interesting.</p><h3><a href="https://roundup.getdbt.com/i/150235613/cross-platform-dbt-mesh">Tristan Handy (of DBT) on Cross-Platform DBT Mesh</a></h3><p><em>[snippet]</em></p><p>I fundamentally do not believe we are going to see one, or even two, winners in the data platform space. This is not Windows in the &#8216;90s, or even iOS and Android in 2012: the data platform ecosystem is not a monopoly or a duopoly; at best it is an oligopoly with 6-10 real players. But in reality I think it is better to just think about it as a competitive market.</p><p>This is good for users&#8212;no one needs the Oracle-vs-Microsoft dynamic that existed in 2003 at the start of my career. But it also creates complexity and bifurcation. Because today, different teams that use different data platforms inside the same company typically do not know about or have any access to the data assets that live inside the other platform. This leads to duplication, inefficiency, and inaccuracy.</p><p>Under the hood, dbt&#8217;s new cross-platform ref capabilities are powered by its support for Iceberg. Iceberg without dbt can be a real pain to use, but I am a huge believer in its ability to move the market in practitioner-favorable ways. I&#8217;m delighted by our ability to abstract away the complexity behind a perfectly dbtonic interface.</p><h3><a href="https://x.com/sriramsubram/status/1840500889473442246">Sriram Subramanian on S3 and the hype train</a></h3><p><em>[whole X post]</em></p><p>There is a general trend created by developer marketing that influences how developers adopt a technology and also affects how others build new technologies.</p><p>A few examples</p><ol><li><p>Big data is dead; long live small data</p></li><li><p>Any data system not built on s3 will become obsolete</p></li><li><p>All infra providers need to support all deployment options - SaaS, BYOC embedded.</p></li></ol><p>This is far from reality and the truth is way more nuanced. The unfortunate downside to this is that new infrastructure companies will end up blindly following the trends vs understanding what is needed for their use case and users.</p><p>To make this point clear, consider the deployment case above (option 3). There are many things to consider to decide what deployment options you want to support for your customers -</p><ol><li><p>Can you devise an architecture that unifies all three deployment modes? How much more time will it take to do so well? Can the experience across all deployment modes be exactly the same?</p></li><li><p>What do your target users want? What is their level of trust? Are you really secure by choosing to support BYOC model?</p></li><li><p>Can you build a data plane that is truly stateless for BYOA? If not, you need full access to your customer&#8217;s account. Can you build an embedded offering for your system? Can it be in feature parity? How does permissions work? Does it solve any problems for your users? Can you instead dockerize your offering?</p></li><li><p>What is the impact on GTM? How many pricing options are you going to support? Can you enable your sales to explain all the different options clearly to end users? How does it affect the total number of GTM assets to be created? Does your margin profile fundamentally change between them?</p></li><li><p>How does product prioritization work? How does support work if the user needs help on your embedded or BYOC offering?</p></li><li><p>Can you capture a significant market with just one of the deployment options, have more focus, and better execution?</p></li></ol><p>You can possibly do the same for every major architecture decision. Each technology decision has many implications and will depend greatly on the use case and customers you are solving for.&nbsp;</p><p>Build from first principles, focus, strategize, listen to your customers, and execute.</p><h3><a href="https://www.linkedin.com/posts/royhasson_beyond-lakehouse-table-formats-activity-7245260660358492161-9Ikx?utm_source=share&amp;utm_medium=member_desktop">Roy Hasson opines on the planned convergence of Apache Iceberg and Delta Lake</a></h3><p><em>[whole LinkedIn post]</em></p><p>So how will the formats evolve into convergence?&nbsp;</p><p>The idea they shared highlight the following:</p><p>1. Converging the data format to provide a single, consistent way to write and store physical data. Unifying how columns are represented, how deletes are encoded, data types, etc. This is a massive win!</p><p>2. Although both formats have a lot in common, maintaining separate metadata format for the time being is preferred to give each community autonomy and ability to innovate for their users. If the data layer is consistent (per #1) both table formats can operate independently without requiring users to duplicate physical data.</p><p>What should users do if they want to store data today? They recommend, not surprising...</p><p>3. Utilize the Unity Catalog as a way to enable readers to translate between formats. So if your engine can only read Iceberg and the data is using Delta format, the catalog can quickly generate the appropriate manifests to make the table readable via Iceberg. Databricks does this today with Unity Catalog and Uniform.</p><p>This is where things fall apart for me...</p><p>With regards to the catalog and format conversion, I agree with the premise, however I'm hesitant because this feels like a Databricks lock-in to get users into Unity Catalog and Delta. Yes you could read Iceberg with this approach, but not write it. The interoperability is one way - Delta to Iceberg. If I'm not a Databricks customer and prefer Iceberg as my format of choice, this approach will not work for me.</p><p>My expectation is that if #1 becomes a reality (and it should sooner than later), engine's ability to support both Iceberg and Delta equally becomes significantly simpler (popular engines already, for the most part, support both formats). So why do I need the potential lock-in of Uniform and Unity Catalog?</p><p>If you're in the Databricks ecosystem, then Unity Catalog is a great product with governance, security and lots of other goodies. But if you're not, than why force me into this setup?</p><p>Anyway, interesting conversation and insight into how Databricks is thinking about this table format interoperability challenge.</p><h3><a href="https://charity.wtf/2020/11/01/questionable-advice-the-trap-of-the-premature-senior/">Charity Majors on the danger of premature seniority</a></h3><p><em>[snippet]</em></p><p>What you are experiencing now is the alluring comfort of premature seniority. You&#8217;re the smartest kid in the room, you know every corner of the system inside and out, you win every argument and anticipate every objection and you are part of every decision and you feel so deeply, pleasingly needed by the people around you.</p><p>It&#8217;s a trap.</p><p>Get the fuck out of there.</p><h3><a href="https://www.oneusefulthing.org/p/ai-in-organizations-some-tactics">Ethan Mollick on AI in organizations: Some tactics</a></h3><p><em>[snippet]</em></p><p>Over the past few months, we have gotten increasingly clear evidence of two key points about AI at work:</p><ol><li><p>A large percentage of people are using AI at work. We know this is happening in the EU, <a href="https://bfi.uchicago.edu/insights/the-adoption-of-chatgpt/">where a representative study of knowledge workers in Denmark</a> from January found that 65% of marketers, 64% of journalists, 30% of lawyers, among others, had used AI at work. We also know it from a<a href="https://static1.squarespace.com/static/60832ecef615231cedd30911/t/66f0c3fbabdc0a173e1e697e/1727054844024/BBD_GenAI_NBER_Sept2024.pdf"> new study of American workers</a> in August, where a third of workers had used Generative AI at work in the last week. (ChatGPT is by far the most used tool in that study, followed by Google&#8217;s Gemini)</p></li><li><p>We know that individuals are seeing productivity gains at work for some important tasks. You have almost certainly seen me reference <a href="https://www.oneusefulthing.org/p/centaurs-and-cyborgs-on-the-jagged">our work showing consultants completed 18 different tasks 25% more quickly</a> using GPT-4. But another <a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4945566">new study of actual deployments of the original GitHub Copilot for coding</a> found a 26% improvement in productivity (and this used the now-obsolete GPT-3.5 and is far less advanced than current coding tools). This aligns with self-reported data. For example, the Denmark study found that users thought that AI halved their working time for 41% of the tasks they do at work.</p></li></ol><p>Yet, when I talk to leaders and managers about AI use in their company, they often say they see little AI use and few productivity gains outside of narrow permitted use cases. So how do we reconcile these two experiences with the points above?</p><h3><a href="https://streamingdata.substack.com/i/149009237/shifting-left-to-make-it-right">Yaroslav Tkachenko&nbsp; on &#8220;Shifting left to make it right&#8221;</a></h3><p><em>[snippet]</em></p><p>&#8220;Shifting left&#8221; was mentioned during the keynotes five times (I counted). I also heard it in the hallways a lot. In case you don&#8217;t know, in the data platform context, shifting left means working more closely with operational / application development teams. For example, it means shared ownership over data products or data pipelines with the goal of stopping data artifacts from being treated as a second-class citizen. Data Mesh architecture is one of the ways to implement this principle.</p><p>It&#8217;s quite refreshing to hear this not just from consultants or vendors but large enterprises as well. I suspect that execs have finally started to understand the importance of high quality data. If you want to build actually useful user-facing &#8220;AI&#8221; products, you can&#8217;t do it without clean and fresh datasets. And yet, most of the enterprises still struggle with basic BI projects&#8230;</p><h3>Bernd Wessely on <a href="https://towardsdatascience.com/data-architecture-lessons-learned-3589b152a8a6">Data Architecture: Lessons Learned</a></h3><p>After we have built all too many brittle data pipelines, it&#8217;s time for data engineers to acknowledge that fundamental software engineering principles are just as crucial for data engineering. Since data engineering is essentially a form of software engineering, it makes sense that foundational practices such as CI/CD, agile development practices, clean coding using version control, Test Driven Design (TDD), modularized architectures, and considering security aspects early in the development cycle should also be applied in data engineering.</p><p>But the narrow focus within an engineering discipline often leads to a kind of intellectual and organizational isolation, where the greater commonalities and interdisciplinary synergies are no longer recognized. This has led to the formation of the &#8216;data engineering silo&#8217; in which not only knowledge and resources, but also concepts and ways of thinking were isolated from the software engineering discipline. Collaboration and understanding between these disciplines became more difficult. I think this undesirable situation needs to be corrected as quickly as possible.</p><p>Unfortunately, the very same silo thinking seems to start with the hype around artificial intelligence (AI) and its sub-discipline machine learning (ML). ML engineering is about to create the next big silo.</p><h2>Helpful Humans</h2><ul><li><p>Murat Demirbas explains <a href="https://muratbuffalo.blogspot.com/2024/10/ddia-chp-7-transactions-part-1.html">different transaction isolation levels</a> [<em>advanced level warning</em>].</p></li><li><p>Alex Merced</p><ul><li><p>On implementing <a href="https://amdatalakehouse.substack.com/p/change-data-capture-cdc-when-there">Change Data Capture (CDC) when there is no CDC</a></p></li><li><p>Publishes the <a href="https://amdatalakehouse.substack.com/p/ultimate-directory-of-apache-iceberg">Ultimate Directory of Apache Iceberg Resources</a></p></li></ul></li><li><p>Andy Grove on<a href="https://www.youtube.com/watch?v=o59s0d3HE1k"> accelerating Apache Spark using Apache DataFusion Comet</a> [video].</p></li><li><p>Medium Engineering<a href="https://medium.engineering/learnings-from-optimising-22-of-our-most-expensive-snowflake-pipelines-5ea6fcf57356"> shares some useful tips</a> on reducing the Snowflake bill</p></li><li><p>Alex Miller on <a href="https://transactional.blog/blog/2024-erasure-coding">Erasure Coding for Distributed Systems</a></p></li><li><p>Daniel Beach</p><ul><li><p>Gets <a href="https://dataengineeringcentral.substack.com/p/daft-vs-spark-databricks-for-delta">Daft running in Databricks</a>.</p></li><li><p>Discussed <a href="https://dataengineeringcentral.substack.com/p/should-you-use-duckdb-or-polars">Should you use DuckDB or Polars?</a></p></li></ul></li></ul><h2>Published Humans</h2><p>Two papers, two query engines, same subject: Making query optimizers that produce better query plans in the face of stale or incomplete data statistics.</p><ul><li><p><a href="https://www.vldb.org/pvldb/vol17/p4077-shankhdhar.pdf">Presto&#8217;s History-based Query Optimizer</a></p><ul><li><p>An important component of every query engine is its query optimizer. This is the part of the system responsible for taking the input query tree (typically an abstract query tree produced by the parser/analyzer) and converting it into an efficient execution plan. As the complexity of queries grows, so does the search space of possible plans, and having a good query optimizer becomes critical for navigating that search space and producing an efficient execution plan. Today, most enterprise-grade query optimizers are cost-based [7, 11, 15, 26, 28, 30, 31, 37], meaning they use a costing function to predict how computationally expensive a query plan is and select the one with the lowest cost estimate for execution. The costing module typically uses knowledge of data statistics and computation cost to compare different query plans and guide the optimizer into selecting the best query plan. This module often relies heavily on estimated data distribution and cardinalities.</p></li><li><p>First, it requires data to be analyzed before it can be queried. In addition, cardinality estimators makes a number of simplifying assumptions such as data uniformity, independence of filters and columns, etc. They are often incapable of estimating selectivity of complex expressions, such as conditional expressions, function calls, and multi-key aggregations. There have been attempts to store more complex statistics such as multi-column and join histograms, but those require additional time and space to compute, and are often non-trivial to work with. As a result, it is not surprising that even industry-strength cardinality estimators routinely produce large errors in estimation.</p></li><li><p>To overcome the challenges presented above, in this paper we present Presto&#8217;s history-based query optimizer (HBO) that has been used in production for several years at several large data infrastructure groups including those of Meta and Uber. In a nutshell, HBO tracks query execution statistics at the operator node, and uses those to predict future performance for similar queries.</p></li></ul></li><li><p>(Databricks&#8217; Photon engine) <a href="https://www.vldb.org/pvldb/vol17/p3947-bu.pdf">Adaptive and Robust &#30;ery Execution for Lakehouses at Scale</a></p><ul><li><p>Firstly, in large-scale, open Lakehouses with uncurated data, high ingestion rates, external tables, or deeply nested schemas, it is often costly or wasteful to maintain perfect and up-to-date table and column statistics. Secondly, inherently imperfect cardinality estimates with conjunctive predicates, joins and user-de&#27;ned functions can lead to bad query plans. Thirdly, for the sheer magnitude of data involved, strictly relying on static query plan decisions can result in performance and stability issues such as excessive data movement, substantial disk spillage, or high memory pressure.</p></li><li><p>The paper discusses some of the reasons for poor statistics or no statistics at all (which necessitates a query optimizer not based on statistics alone)</p><ul><li><p>Supporting raw, uncurated data (lacking statistics).</p></li><li><p>Supporting external tables (lacking statistics).</p></li><li><p>Supporting deeply nested data (lacking statistics)</p></li><li><p>Supporting rapidly evolving data and workloads (stale statistics and volatile histories).</p></li><li><p>Supporting UDFs (lacking information for cardinality estimation)</p></li><li><p>Supporting diverse workloads (amplifying bad plans)</p></li></ul></li><li><p>To address these challenges, we built an adaptive query execution (AQE) framework. The key idea is to collect statistics during query execution from task metrics of completed and ongoing query plan fragments, and subsequently re-optimize unfinished execution plan fragments into better ones based on these runtime statistics.</p></li></ul></li></ul><h2>My writing</h2><p>I&#8217;ve been writing about the table formats for months now. My latest post questions the need for table format interoperability in the long term.</p><h3>A snippet from <a href="https://jack-vanlightly.com/blog/2024/9/26/table-format-interoperability-future-or-fantasy">Table format interoperability, future or fantasy?</a></h3><p><em>[snippet]</em></p><p>The third alternative is to align the table formats at the data layer so that cross-publishing can utilize the vast majority of features, support merge-on-read without rewriting delete/DV files, and so on. If cross-publishing table formats ever really works well, it will be because the remaining table formats will have standardized some things, like partitioning, clustering, delete files and so on. There is also the potential for common standards for things like secondary indexing. This is similar to the standardized protocols that sit above TCP and UDP like DNS or BGP, supporting interoperability and core workflows, but currently there is no standardization mechanism like RFC&#8217;s for the open table format&#8217;s data layer.</p><p>But if all that did happen, why have a bunch of competing formats at all?</p><p></p><div><hr></div><p>Let me know of interesting humans at feedback@hotds.dev </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.hotds.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Humans of the Data Sphere! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Humans of the Data Sphere - Issue #0]]></title><description><![CDATA[Humans of the Data Sphere (HOTDS) is a publication that aims to bring together the words of humans from across the data landscape.]]></description><link>https://www.hotds.dev/p/humans-of-the-data-sphere-issue-0</link><guid isPermaLink="false">https://www.hotds.dev/p/humans-of-the-data-sphere-issue-0</guid><dc:creator><![CDATA[Jack Vanlightly]]></dc:creator><pubDate>Mon, 14 Oct 2024 11:04:12 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a3b05ae2-a972-4e7d-9a3f-d85819aff96f_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Humans of the Data Sphere (HOTDS) is a publication that aims to bring together the words of humans from across the data landscape. This is broader than just the &#8220;data space&#8221;, it encompasses all kinds of databases, messaging/streaming, OLAP, (cloud) data warehouses, lakehouses, distributed systems, and to some extent AI and ML. It&#8217;s narrow enough to be cohesive, but broad enough for readers to be exposed to new ideas and new people that might sit just outside their normal career focus.</p><p>This format is heavily inspired by the <a href="https://highscalability.com/">highscalability.com</a>, &#8220;Stuff the internet says on scalability&#8220; posts. While I am using a similar format as a launchpad, it&#8217;s still too early to know what HOTDS will be.</p><p>I&#8217;m happy to receive suggested quotes, articles and papers from others, provided you give me a quotable section to include in a HOTDS issue. Also feel free to suggest interesting people to follow.</p><p>If you&#8217;re wondering who I am, go over to <a href="https://jack-vanlightly.com">https://jack-vanlightly.com</a> to see my writings on distributed data systems, formal verification, as well as strategy and commentary posts.</p><p></p>]]></content:encoded></item></channel></rss>