{"id":29005,"date":"2026-07-30T23:56:51","date_gmt":"2026-07-30T21:56:51","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=29005"},"modified":"2026-07-30T23:56:54","modified_gmt":"2026-07-30T21:56:54","slug":"polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/","title":{"rendered":"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Abstract:<\/strong> The assumption that a single type of data storage can serve every workload no longer holds at ultra-large scale. This paper examines storage in a globally distributed ride-hailing platform, where each workload is mapped to a storage engine whose guarantees match its access pattern, consistency requirement, and query shape. The mapping is justified through the <strong>PACELC framework<\/strong>, which labels each operational database by its behaviour both during network partitions and during normal operation. Object storage is treated separately as a shared layer for blobs, cold history copies, and lakehouse files. This paper pursues three primary goals. First, it establishes a PACELC-labelled reference mapping of the platform\u2019s operational databases, grounded in published components of the Uber stack. Second, it demonstrates how cross-service correctness, via the <strong>saga<\/strong> and <strong>transactional-outbox<\/strong> patterns, and the analytical pipeline can reuse common <strong>change-data-capture<\/strong> infrastructure while separating operational saga topics from analytical replication topics. Third, it provides a scoped assessment of convergence trends that reduce the number of distinct systems an infrastructure must operate. The analysis is a conceptual synthesis argued from published system properties rather than an empirical benchmark.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Index Terms:<\/strong> ultra-large-scale systems, polyglot persistence, PACELC, distributed databases, sharding, change data capture, saga pattern, lakehouse<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1 Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The relational database was historically applied across a wide range of workloads, from interactive requests to long-running reports. Stonebraker and C\u00b8 etintemel argued early on that a single database architecture cannot satisfy all requirements. They predicted a split into specialised storage systems tailored for distinct workload categories such as online transaction processing, data warehousing, stream processing, and text search <a id=\"cite-1\" href=\"#ref-1\">[1]<\/a>. Twenty years later, per-workload engine selection is standard practice in large systems. This paper examines the resulting design space, in which a storage engine is chosen per workload, and uses a globally distributed ride-hailing platform as a running example.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This platform qualifies as an ultra-large-scale system. Northrop et al. define such a system as an infrastructure whose scale in at least one dimension makes conventional software methods inadequate, and describe it as a socio-technical ecosystem rather than a single application <a id=\"cite-2\" href=\"#ref-2\">[2, pp. 11, 125]<\/a>. Four of their defining criteria bear directly on storage. Control is decentralised, with no central authority over the data or its daily operation <a href=\"#ref-2\">[2, p. 13]<\/a>. The elements are heterogeneous, independently developed, and changing <a href=\"#ref-2\">[2, p. 16]<\/a>. The system evolves and deploys continuously while it keeps running <a href=\"#ref-2\">[2, p. 15]<\/a>, and hardware and software failures are routine rather than rare <a href=\"#ref-2\">[2, p. 19]<\/a>. A ride-hailing platform shows each of these traits. Its features are split across independently owned services, so no single component controls the full data model. Each service selects a storage engine suited to its own workload. The platform runs across several regions without pause, and at that scale individual node and network failures are expected. These four criteria shape the storage decisions in the sections that follow.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The main division in this storage design space is between operational and analytical systems. Operational systems handle short keyed reads and writes for interactive requests. Analytical systems scan and aggregate larger data sets for reporting and business analysis. These patterns are commonly called <strong>OLTP (Online Transaction Processing)<\/strong> and <strong>OLAP (Online Analytical Processing)<\/strong> <a id=\"cite-3\" href=\"#ref-3\">[3, p. 5]<\/a>. The difference is not only in the queries. Operational and analytical systems require distinct internal data layouts because they handle different data types, access patterns, and user groups <a href=\"#ref-3\">[3, p. 25]<\/a>. One physical representation cannot serve both well.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The same tension appears inside the operational side. Sadalage and Fowler build on Neal Ford\u2019s 2006 idea of polyglot programming and apply it to storage. They note that a store which is highly available and scalable enough for a shopping cart cannot answer relationship queries such as products bought by a customer\u2019s friends, and they call this mixed approach <strong>polyglot persistence<\/strong> <a id=\"cite-4\" href=\"#ref-4\">[4]<\/a>. The point generalises: session data, cart data, and order data do not require the same availability, consistency, or backup guarantees.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A ride-hailing platform exhibits both extremes. On one side, constant location updates from millions of vehicles create high throughput demand, measured as requests or data volume processed per second. On the other side, payments occur less often but must commit with low response time and durable correctness. Response time includes all delays observed by the client and is best treated as a distribution rather than a single number <a href=\"#ref-3\">[3, p. 41]<\/a>. The higher percentiles, or <strong>tail latencies<\/strong>, require optimisation because they influence the responsiveness experienced by end users <a href=\"#ref-3\">[3, p. 40]<\/a>, and this effect is amplified when one end-user request fans out to several backend calls <a href=\"#ref-3\">[3, p. 41]<\/a>. No single engine can simultaneously optimise for millions of short-lived location writes per second and strict transactional correctness for payments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Getting this choice right affects <strong>reliability<\/strong> and <strong>maintainability<\/strong>. Reliability means that the system continues to work correctly under faults, while maintainability covers operability, simplicity, and evolvability <a href=\"#ref-3\">[3, pp. 43, 52\u201356]<\/a>. Storage design determines many of these qualities.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The remainder of the paper treats storage as one problem spanning both planes. Section 2 establishes the consistency lens (CAP and PACELC). Section 3 develops the operational (OLTP) storage landscape as a polyglot mapping and adds a treatment of sharding. Section 4 addresses correctness across stores through the saga and transactional-outbox patterns. Section 5 extends the picture to the analytical (OLAP) plane with change data capture, a lakehouse, and a shared object-storage layer. Section 6 covers convergence trends, Section 7 states limitations, and Section 8 concludes. The mapping is argued from published system properties rather than from new measurements.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2 Consistency Foundations: CAP and PACELC<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Choosing a storage engine per workload is only useful if the guarantee each engine gives up can be stated precisely. In a distributed system the central property being traded is consistency, and the classic tool for reasoning about it is the <strong>CAP theorem<\/strong>. It is a useful starting point, but on its own it lacks the resolution needed for the design decisions in later sections, so this section establishes a more complete lens.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Brewer initially proposed CAP as a conjecture. Gilbert and Lynch later provided the formal proof, demonstrating that an asynchronous network cannot simultaneously ensure data availability and <strong>linearizability<\/strong> during message drops <a id=\"cite-5\" href=\"#ref-5\">[5]<\/a>. Atomic consistency here means linearizability. That is, there exists a total order on all operations such that each read observes the most recent completed write, as if there were a single copy of the data <a href=\"#ref-5\">[5]<\/a>. The popular summary of CAP claiming that systems can only pick two out of three guarantees is misleading <a href=\"#ref-3\">[3, p. 415]<\/a>. Brewer later clarified that selecting two out of three guarantees is an inaccurate model. The theorem only rules out achieving perfect availability and consistency during rare network partitions, leaving the rest of the design space open <a id=\"cite-6\" href=\"#ref-6\">[6]<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A further limitation concerns its scope. The formal CAP theorem covers only linearizability and network partitions. It ignores common operational issues such as latency and node failures, which limits its practical value for modern system design <a href=\"#ref-3\">[3, p. 415]<\/a>. CAP constrains the design only while a partition is actually occurring. It is silent about the trade-off a system faces during normal operation, which is most of the time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">During normal operation the trade-off is between consistency and latency. Keeping replicas strongly consistent has a cost paid on every request, not only during failures. Strong consistency imposes an acceptable cost in data centres connected by fast and reliable networks <a href=\"#ref-3\">[3, p. 401]<\/a>. The performance penalty never completely disappears. A linearizable read from a quorum system requires synchronous read repair <a href=\"#ref-3\">[3, p. 412]<\/a>. Geographically distributed setups force follower regions to forward writes and linearizable reads synchronously over the network to the central leader <a href=\"#ref-3\">[3, p. 414]<\/a>. Strong consistency incurs a latency cost during normal operation, not only during failures.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Abadi extends CAP into the <strong>PACELC framework<\/strong> to cover normal operation. PACELC defines how a system balances availability against consistency during a partition, and how it balances latency against consistency when the network works normally <a id=\"cite-7\" href=\"#ref-7\">[7]<\/a>. It addresses an oversight in CAP, because the consistency and latency trade-off of replicated systems is present at all times, whereas CAP applies only to rare network partitions <a href=\"#ref-7\">[7]<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PACELC therefore attaches two labels to each store instead of one. A store is described by a pair: its partition-time behaviour (PA or PC) and its normal-time behaviour (EL or EC), written together as, for example, PC\/EC or PA\/EL. Abadi classifies default Dynamo, Cassandra, and Riak as PA\/EL, and fully ACID systems as PC\/EC <a href=\"#ref-7\">[7]<\/a>, categories that recur in Section 3.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Eventual consistency<\/strong> provides no strict bounds on replication delay, allowing replicas to fall behind indefinitely <a href=\"#ref-3\">[3, p. 209]<\/a>. Replication lag typically stays below a second during normal operation and increases to minutes under heavy load or network degradation <a href=\"#ref-3\">[3, p. 209]<\/a>. The relevant design concern is the kind of guarantee being relaxed. Kleppmann and Riccomini distinguish between <strong>timeliness<\/strong> and <strong>integrity<\/strong>. An eventually consistent store may relax timeliness by serving stale reads, while the application must still preserve integrity and avoid data corruption or loss <a href=\"#ref-3\">[3, p. 571]<\/a>. This distinction permits placing a store on the EL side without giving up correctness. The EL side accepts stale reads, but it does not accept lost or corrupted data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The remainder of the paper applies this framework to each operational database. Each is placed on the PACELC map according to what its workload can tolerate. Payments and order state sit on the PC\/EC side, paying latency for correctness. Live location and active-ride state sit on the PA\/EL side, accepting staleness for speed and availability. <a href=\"#figure-1\">Fig. 1<\/a> places the platform\u2019s main stores on the two PACELC axes; the full per-store mapping follows in Section 3.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\" id=\"figure-1\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik.png\"><img loading=\"lazy\" decoding=\"async\" width=\"760\" height=\"537\" data-attachment-id=\"29023\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/grafik-24\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik.png\" data-orig-size=\"760,537\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}\" data-image-title=\"grafik\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik.png\" alt=\"\" class=\"wp-image-29023\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik.png 760w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-300x212.png 300w\" sizes=\"auto, (max-width: 760px) 100vw, 760px\" \/><\/a><figcaption class=\"wp-element-caption\"><strong>Fig. 1:<\/strong> PACELC placement of the platform&#8217;s main stores. The horizontal axis is normal-time behaviour (EC to EL). The vertical axis is partition-time behaviour (PC to PA). Correctness-first stores occupy the PC\/EC quadrant and latency-first stores occupy the PA\/EL quadrant. Ratings sits at the tolerant edge of the PA\/EL group. The figure previews the mapping in <a href=\"#table-1\">Table 1<\/a>.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">3 Polyglot Operational Storage<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><em>A. Ownership and Boundaries<\/em><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Polyglot persistence<\/strong> is the practice of a single application using several stores, each chosen for a different job <a href=\"#ref-4\">[4]<\/a>. To apply it, the boundaries between stores must first be decided. In a microservice architecture the boundary is the service itself. Each service usually owns its database and exposes its data through its API <a href=\"#ref-3\">[3, pp. 21\u201322]<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This isolation exists because shared tables couple services through schema, performance, and deployment. If several services depend on the same database structure, schema changes and independent deployment become harder <a href=\"#ref-3\">[3, pp. 21\u201322]<\/a>, <a id=\"cite-8\" href=\"#ref-8\">[8, pp. 224, 551]<\/a>. This keeps storage decisions behind the service boundary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Where these boundaries should be drawn is a modelling question, and Domain-Driven Design gives it a name. A <strong>bounded context<\/strong> defines the exact boundaries of a domain model. This ensures development teams agree on internal consistency rules and explicit external integration points <a id=\"cite-9\" href=\"#ref-9\">[9, p. 413]<\/a>. Each bounded context keeps its own model consistent internally and integrates with others through explicit translation at the boundary. Storage is split along this same line, giving one service, one bounded context, and one owned store. While this split is ideal, a bounded context may span multiple services and a single service may own more than one store if needed. Nonetheless, this work uses a one-to-one mapping because it shows the per-workload storage choice clearly. It also establishes that consistency is expected to hold inside a store, not automatically across stores.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Richardson\u2019s <strong>Database per Service<\/strong> pattern formalises this ownership model by assigning each service its own data store <a id=\"cite-10\" href=\"#ref-10\">[10, pp. 34, 46, 58]<\/a>. Once storage is private per service, each owner is free to select the engine that fits its workload, which turns Database per Service into polyglot persistence in practice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This freedom carries a cost, because splitting data across private stores removes two guarantees a single database provided automatically. The first is cross-store querying. Data distributed across multiple operational systems becomes difficult to query together, creating data silos <a href=\"#ref-3\">[3, p. 6]<\/a>. Section 5 addresses this problem with analytics and a lakehouse. The second is the cross-store transaction. Private service databases move the burden of data consistency to the application layer, and standard distributed transactions are generally avoided in microservices because they create tight coupling <a href=\"#ref-3\">[3, p. 21]<\/a>. The Database per Service architecture therefore needs the saga pattern to maintain data consistency <a href=\"#ref-10\">[10, p. 46]<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><em>B. Mapping workloads to stores<\/em><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">With ownership settled, each service selects the engine that fits its workload, and the <strong>PACELC framework<\/strong> from Section 2 supplies the terms that justify each choice. <a href=\"#table-1\">Table 1<\/a> lists the platform\u2019s operational stores and <a href=\"#figure-2\">Fig. 2<\/a> arranges them into two bands by consistency behaviour on a shared object-storage layer. Each PACELC label shows the behaviour of the specific configuration assumed here. The same storage solution under a different configuration may be best classified using a different label.<\/p>\n\n\n\n<div id=\"table-1\" class=\"alignwide\">\n\t<figure class=\"wp-block-table\">\n\t\t<table style=\"min-width:1100px\">\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th>#<\/th>\n\t\t\t\t\t<th>Service \/ data<\/th>\n\t\t\t\t\t<th>Access pattern<\/th>\n\t\t\t\t\t<th>Engine (class)<\/th>\n\t\t\t\t\t<th>PACELC \/ class<\/th>\n\t\t\t\t\t<th>Main reason<\/th>\n\t\t\t\t\t<th>Accepted cost<\/th>\n\t\t\t\t<\/tr>\n\t\t\t<\/thead>\n\t\t\t<tbody>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>1<\/td>\n\t\t\t\t\t<td>Payment<\/td>\n\t\t\t\t\t<td>rare writes, durable commit<\/td>\n\t\t\t\t\t<td>Distributed SQL<sup>1<\/sup><\/td>\n\t\t\t\t\t<td><strong>PC\/EC<\/strong><\/td>\n\t\t\t\t\t<td>durable commit, correct final state<\/td>\n\t\t\t\t\t<td>higher latency<\/td>\n\t\t\t\t<\/tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>2<\/td>\n\t\t\t\t\t<td>Order<\/td>\n\t\t\t\t\t<td>saga participant, keyed by transaction<\/td>\n\t\t\t\t\t<td>Distributed SQL<\/td>\n\t\t\t\t\t<td><strong>PC\/EC<\/strong><\/td>\n\t\t\t\t\t<td>saga participant, correct ride state<\/td>\n\t\t\t\t\t<td>higher latency<\/td>\n\t\t\t\t<\/tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>3<\/td>\n\t\t\t\t\t<td>Matching Service<\/td>\n\t\t\t\t\t<td>authoritative match state<\/td>\n\t\t\t\t\t<td>Distributed SQL<\/td>\n\t\t\t\t\t<td><strong>PC\/EC<\/strong><\/td>\n\t\t\t\t\t<td>one ride reserves one driver<\/td>\n\t\t\t\t\t<td>lower availability under partition<\/td>\n\t\t\t\t<\/tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>4<\/td>\n\t\t\t\t\t<td>User<\/td>\n\t\t\t\t\t<td>profile \/ authentication<\/td>\n\t\t\t\t\t<td>Distributed SQL<\/td>\n\t\t\t\t\t<td><strong>PC\/EC<\/strong><\/td>\n\t\t\t\t\t<td>correct profiles and authentication<\/td>\n\t\t\t\t\t<td>higher read\/write latency<\/td>\n\t\t\t\t<\/tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>5<\/td>\n\t\t\t\t\t<td>Vehicle<\/td>\n\t\t\t\t\t<td>fleet registry (seat count, class)<\/td>\n\t\t\t\t\t<td>Distributed SQL<\/td>\n\t\t\t\t\t<td><strong>PC\/EC<\/strong><\/td>\n\t\t\t\t\t<td>correct eligibility checks<\/td>\n\t\t\t\t\t<td>higher read\/write latency<\/td>\n\t\t\t\t<\/tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>6<\/td>\n\t\t\t\t\t<td>Driver<\/td>\n\t\t\t\t\t<td>driver profile \/ status<\/td>\n\t\t\t\t\t<td>Distributed SQL<\/td>\n\t\t\t\t\t<td><strong>PC\/EC<\/strong><\/td>\n\t\t\t\t\t<td>correct driver status<\/td>\n\t\t\t\t\t<td>higher read\/write latency<\/td>\n\t\t\t\t<\/tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>7<\/td>\n\t\t\t\t\t<td>Live Location<\/td>\n\t\t\t\t\t<td>millions of GPS writes per second<\/td>\n\t\t\t\t\t<td>Redis<sup>2<\/sup><\/td>\n\t\t\t\t\t<td><strong>PA\/EL<\/strong><\/td>\n\t\t\t\t\t<td>very low latency for transient writes<\/td>\n\t\t\t\t\t<td>stale values after failover<\/td>\n\t\t\t\t<\/tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>8<\/td>\n\t\t\t\t\t<td>Active Rides<\/td>\n\t\t\t\t\t<td>frequently accessed ride session state<\/td>\n\t\t\t\t\t<td>Redis<\/td>\n\t\t\t\t\t<td><strong>PA\/EL<\/strong><\/td>\n\t\t\t\t\t<td>low-latency session state<\/td>\n\t\t\t\t\t<td>state rebuild after failover<\/td>\n\t\t\t\t<\/tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>9<\/td>\n\t\t\t\t\t<td>Route<\/td>\n\t\t\t\t\t<td>trajectory, high write volume<\/td>\n\t\t\t\t\t<td>Cassandra<sup>3<\/sup><\/td>\n\t\t\t\t\t<td><strong>PA\/EL<\/strong><\/td>\n\t\t\t\t\t<td>high write volume, append-heavy<\/td>\n\t\t\t\t\t<td>stale reads under relaxed quorum<\/td>\n\t\t\t\t<\/tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>10<\/td>\n\t\t\t\t\t<td>Completed ride history copy<\/td>\n\t\t\t\t\t<td>recent trip history, then archive<\/td>\n\t\t\t\t\t<td>Cassandra; object storage for old history<\/td>\n\t\t\t\t\t<td><strong>PA\/EL<\/strong><\/td>\n\t\t\t\t\t<td>low-cost trip-history reads and archive<\/td>\n\t\t\t\t\t<td>copy may lag behind the authoritative record<\/td>\n\t\t\t\t<\/tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>11<\/td>\n\t\t\t\t\t<td>Ratings<\/td>\n\t\t\t\t\t<td>append, staleness-tolerant<\/td>\n\t\t\t\t\t<td>Cassandra<\/td>\n\t\t\t\t\t<td><strong>PA\/EL<\/strong><\/td>\n\t\t\t\t\t<td>append-heavy, staleness-tolerant<\/td>\n\t\t\t\t\t<td>stale reads under relaxed quorum<\/td>\n\t\t\t\t<\/tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>12<\/td>\n\t\t\t\t\t<td>Media \/ large objects<\/td>\n\t\t\t\t\t<td>object upload, read-mostly<\/td>\n\t\t\t\t\t<td>Object storage<sup>4<\/sup><\/td>\n\t\t\t\t\t<td>Shared layer<\/td>\n\t\t\t\t\t<td>low-cost durable storage for large files<\/td>\n\t\t\t\t\t<td>no cross-object transactions, asynchronous cross-region replication<\/td>\n\t\t\t\t<\/tr>\n\t\t\t<\/tbody>\n\t\t<\/table>\n\t\t<figcaption class=\"wp-element-caption\"><strong>Table 1:<\/strong> PACELC classification of the platform&#8217;s operational databases and the\nshared object-storage layer, with the reason for each choice and the cost the\narchitecture accepts.\n<p class=\"has-small-font-size\"><sup>1<\/sup> e.g. Google Spanner, CockroachDB, YugabyteDB.<br><sup>2<\/sup> Redis Cluster with hash-based sharding and asynchronous replication. This topology can lose acknowledged writes on failover, which is why the store carries a PA\/EL label.<br><sup>3<\/sup> Apache Cassandra.<br><sup>4<\/sup> Amazon S3 and Ceph are examples. Object storage is treated as a shared layer outside the database PACELC labels. Amazon S3 provides strong read-after-write and list consistency within a region <a href=\"#ref-11\">[11]<\/a>, while cross-region replication <a href=\"#ref-12\">[12]<\/a> and lifecycle transitions <a href=\"#ref-13\">[13]<\/a> are asynchronous.<\/p><\/figcaption>\n\t<\/figure>\n<\/div>\n\n\n\n<figure class=\"wp-block-image size-large\" id=\"figure-2\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"439\" data-attachment-id=\"29026\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/grafik-25\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-1.png\" data-orig-size=\"2163,927\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}\" data-image-title=\"grafik\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-1-1024x439.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-1-1024x439.png\" alt=\"\" class=\"wp-image-29026\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-1-1024x439.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-1-300x129.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-1-768x329.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-1-1536x658.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-1-2048x878.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\"><strong>Fig. 2:<\/strong> Consistency-cut view of the operational tier. A service strip sits above two storage bands on a shared object-storage layer. The solid arrow shows completed ride history copies moving from Cassandra into object storage. The dashed arrow indicates the forward data flow to the analytical tier of <a href=\"#sec-analytical\">Section 5<\/a>.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The stores fall into two groups. The correctness-first group (PC\/EC) holds data where a stale or divergent read would compromise correctness or cause business harm: payments, orders, Matching Service state, and the registries for users, vehicles, and drivers. These stores pay the latency cost identified in Section 2, namely synchronous replication and reads served from an authoritative replica, because the alternative is double-booked drivers or financial loss. They are served by a <strong>distributed SQL<\/strong> engine such as Spanner, CockroachDB, or YugabyteDB, which provides strongly consistent transactions across nodes. The Matching Service depends on several of these stores at once. It reads authoritative vehicle data, such as seat count and vehicle class, and driver status to assign exactly one driver to one rider, which is why those registries take the PC\/EC side rather than tolerating staleness.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The latency-first group (PA\/EL) holds data where freshness matters less than speed and availability. Live location absorbs millions of GPS writes per second, and active-ride session state must be read with minimal latency. Both are served by an in-memory store (<strong>Redis<\/strong>), where a one-second-stale location value does not affect correctness. Route trajectories, completed ride history copies, and Ratings are high-volume and append-heavy, and are served by <strong>Cassandra<\/strong>, whose leaderless, tunable replication, detailed in Section 3-C, trades linearizability for write throughput and availability. Ratings tolerate the replication lag quantified in Section 2: a rating that appears a few seconds late does not affect correctness, so it belongs on the EL side.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The main completed ride record used for fare calculation, receipts, payment links, payouts, and disputes remains in the Order and Payment stores. Cassandra stores the history copy for rider and driver trip-history views and downstream analytics. A delay in this copy does not change the paid fare, payout, or final ride state.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These are not only hypothetical assignments. Uber operates Apache Cassandra across tens of thousands of nodes to manage data for diverse operational workloads with varying read and write ratios <a id=\"cite-14\" href=\"#ref-14\">[14]<\/a>. On the correctness-first side, Uber\u2019s Docstore is a distributed database built on top of MySQL, in front of which an integrated read-through cache called CacheFront handles extremely high read volumes while ensuring consistency via binlog change events instead of manual invalidation <a id=\"cite-15\" href=\"#ref-15\">[15]<\/a>. CacheFront illustrates how very high read volumes can be served through an integrated cache while database change-log events keep cached data aligned with the source of truth. Its use of the database change log for cache invalidation is also an instance of the change-data-capture infrastructure discussed in Sections 4 and 5.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Object storage<\/strong> (Amazon S3, Ceph) is the shared layer for large files, cold history copies, and lakehouse data. Completed ride history copies stay in Cassandra for recent trip-history reads and are archived here once they age. Amazon S3 gives strong consistency for object reads and listings within a region <a id=\"cite-11\" href=\"#ref-11\">[11]<\/a>, while cross-region replication <a id=\"cite-12\" href=\"#ref-12\">[12]<\/a> and lifecycle movement <a id=\"cite-13\" href=\"#ref-13\">[13]<\/a> are asynchronous. The analytics pipeline in Section 5 draws on the same storage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"#table-1\">Table 1<\/a> therefore turns the abstract PACELC trade-off into concrete choices. It labels each operational database, states the reason for each storage choice, and names the cost the architecture accepts. Object storage is listed as the shared layer for media, cold history, and lakehouse files rather than as a PACELC-labelled database.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><em>C. How each band keeps its guarantee<\/em><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The two bands in <a href=\"#table-1\">Table 1<\/a> reach opposite PACELC labels because they replicate data in opposite ways. The correctness-first band routes all writes through a leader while the latency-first band lets any replica accept a write. Each choice explains both the guarantee and its cost.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Leader-based replication (PC\/EC).<\/strong> Single-leader replication designates one replica to handle all client writes. This leader records the new data locally first <a href=\"#ref-3\">[3, p. 198]<\/a>. The followers then receive the updates through a replication log <a href=\"#ref-3\">[3, p. 199]<\/a>. Synchronous replication ensures the follower maintains an exact, current copy of the leader\u2019s data <a href=\"#ref-3\">[3, p. 200]<\/a>. This incurs the expected normal-time latency cost because the leader halts new writes until the replica confirms receipt <a href=\"#ref-3\">[3, p. 200]<\/a>. Fault-tolerant leader-based replication requires consensus. Common consensus algorithms such as Raft and Paxos follow a leader-based model and add automatic leader election and failover <a href=\"#ref-3\">[3, p. 442]<\/a>. Paxos, introduced by Lamport, established consensus as agreement on a single value among unreliable processes <a id=\"cite-16\" href=\"#ref-16\">[16]<\/a>. Raft manages a replicated log by electing one leader and giving that leader responsibility for the log <a id=\"cite-17\" href=\"#ref-17\">[17]<\/a>. Log entries flow in one direction only, from leader to followers. An entry becomes durable once the leader has replicated it on a majority of the servers <a href=\"#ref-17\">[17]<\/a>. This majority-commit rule lets a distributed SQL engine remain linearizable while surviving a minority of node failures, and it is why every store in the PC\/EC band accepts the leader-blocking latency as the cost required for correctness.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Leaderless replication (PA\/EL).<\/strong> The latency-first band omits the leader role and permits any replica to accept client writes <a href=\"#ref-3\">[3, p. 229]<\/a>. A <strong>quorum<\/strong> condition governs consistency. In a system of n replicas, reads require r responses and writes require w confirmations. If the sum of r and w exceeds n, the read and write sets overlap. In the simple case without concurrent writes or failed writes, this overlap lets a read include at least one replica that has seen the latest successful write <a href=\"#ref-3\">[3, pp. 231\u2013232]<\/a>. This inequality is the parameter operators configure. Configuring the read and write quorums to sum to less than the total replica count increases the risk of stale reads, but it improves overall system availability and reduces latency <a href=\"#ref-3\">[3, p. 233]<\/a>, which is the EL end of the trade-off. Availability under partition is preserved by additional mechanisms. Read repair writes fresh values back to stale replicas during reads, a background anti-entropy process reconciles differences, and a sloppy quorum allows reachable replicas to accept writes even when they are not normally responsible for that key <a href=\"#ref-3\">[3, pp. 231, 236]<\/a>. This keeps the system writeable when a strict quorum cannot be formed. Together these mechanisms form the PA response to partition.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dynamo pioneered this design by prioritising high availability over consistency during failures <a id=\"cite-18\" href=\"#ref-18\">[18]<\/a>. It functions as an eventually consistent store that relies on the identical overlapping quorum condition used in modern production systems <a href=\"#ref-18\">[18]<\/a>. Dynamo\u2019s designers justified this by the tail-latency reasoning introduced in Section 1. The designers discarded median and average latency metrics, arguing that extreme percentiles are necessary to ensure consistent performance. They based their service level agreements strictly on the 99.9th percentile <a href=\"#ref-18\">[18]<\/a>. Cassandra, which serves the Route store, the completed ride history copy, and the Ratings store in <a href=\"#table-1\">Table 1<\/a>, inherits this model directly. The system copies each item to a configured number of hosts. Depending on the client\u2019s consistency level, writes may wait for one replica, a quorum, or all replicas, while reads can likewise be served by one replica or by a quorum <a id=\"cite-19\" href=\"#ref-19\">[19]<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The quorum condition shows that the PA\/EL label is a configuration choice. Setting <em>w + r &gt; n<\/em> gives the read and write quorums an overlapping replica and improves the chance of reading the latest write under normal operation. Even with <em>w + r &gt; n<\/em>, edge cases such as concurrent writes, a write that succeeds on fewer than w replicas, and reads during node recovery can still return stale values <a href=\"#ref-3\">[3, pp. 233\u2013234]<\/a>. Setting <em>w + r \u2264 n<\/em> trades that overlap for lower latency and higher availability. An operator applies this configuration per store, and in Cassandra per query, matching each store\u2019s consistency to the workload it serves. The PC\/EC and PA\/EL labels in <a href=\"#table-1\">Table 1<\/a> therefore state a default position for each store, and for the leaderless band that position remains adjustable toward stronger consistency when a given query requires it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because a single replication choice fixes both PACELC labels together, the platform uses only the two aligned categories, PC\/EC and PA\/EL. The intermediate categories arise when a system decouples its partition-time stance from its normal-time one, as in MongoDB (PA\/EC) or PNUTS (PC\/EL) in Abadi\u2019s classification <a href=\"#ref-7\">[7]<\/a>. No workload in <a href=\"#table-1\">Table 1<\/a> requires that decoupling, so neither category appears here.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The analysis so far assumes replicas within a single region. Geographic distribution raises the normal-time cost described above. When the replicas of a PC\/EC store sit in data centres on separate continents, every linearizable read or write that must reach the leader carries the inter-region round-trip time, so the EC latency has a lower bound set by the propagation delay between regions <a href=\"#ref-3\">[3, p. 414]<\/a>. Spanner accepts this cost and manages it with synchronised clocks while sharding data across Paxos groups in data centres spread worldwide <a id=\"cite-20\" href=\"#ref-20\">[20]<\/a>. CockroachDB lowers cross-region latency by assigning Range-level leases to specific replicas. This leaseholder becomes the sole node authorised to serve strict reads and writes <a id=\"cite-21\" href=\"#ref-21\">[21, p. 3]<\/a>. Administrators can bind leaseholders to the geographical region of primary access to avoid long network hops <a href=\"#ref-21\">[21, p. 4]<\/a>. Stale read queries bypass the leaseholder entirely and resolve against the nearest local replica <a href=\"#ref-21\">[21, pp. 6\u20137]<\/a>. YugabyteDB offers similar geographic controls by assigning tablet leaders to specific preferred regions to handle local client traffic <a id=\"cite-22\" href=\"#ref-22\">[22]<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The PA\/EL band faces a related choice of region topology. Multi-leader setups process writes locally and replicate them asynchronously across regions <a href=\"#ref-3\">[3, p. 217]<\/a>. This maintains write availability during network partitions since regional leaders function independently, but introduces consistency conflicts when concurrent writes occur <a href=\"#ref-3\">[3, pp. 217, 222]<\/a>. Adly et al. confirm that asynchronous replication handles heavy loads and provides superior performance at the acceptable cost of occasionally serving stale data <a id=\"cite-23\" href=\"#ref-23\">[23, p. 108]<\/a>. This multi-leader option applies to the Cassandra stores, which support active-active replication across regions. The Redis stores instead run a single primary per shard with failover, so each region reads from local replicas while writes route to the primary. On the platform the live-location and active-ride stores tolerate the resulting divergence, while the payment and order stores keep a single authoritative region and pay the cross-region latency for correctness.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><em>D. Partitioning for scale<\/em><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Replication explains how each band keeps its consistency guarantee, but it does not by itself explain how a single store sustains that write volume. Horizontal partitioning, also called <strong>sharding<\/strong>, provides that capacity. Partitioning divides the dataset so that every distinct record belongs to exactly one shard <a href=\"#ref-3\">[3, p. 251]<\/a>. Sharding and replication are normally combined by storing copies of each shard on multiple nodes <a href=\"#ref-3\">[3, p. 251]<\/a>. The replication analysis of Section 3-C therefore applies within each shard, while sharding distributes shards across the cluster.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In practice, two schemes are primarily used. Key-range sharding keeps keys sorted within each shard, which makes range scans efficient, but it can create a hot shard when many writes target nearby keys <a href=\"#ref-3\">[3, p. 257]<\/a>. Hash sharding distributes skewed data evenly across nodes using a hash function <a href=\"#ref-3\">[3, p. 258]<\/a>. This approach makes range queries inefficient because keys within a specific range end up scattered across multiple shards <a href=\"#ref-3\">[3, p. 261]<\/a>. Skewed distributions overload individual shards and create hot spots <a href=\"#ref-3\">[3, pp. 255\u2013256]<\/a>. Changes to the node count require the system to rebalance the data distribution and force clients to update their request routing paths <a href=\"#ref-3\">[3, pp. 255, 265]<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Both PACELC bands rely on sharding, using the two schemes. In the PC\/EC band, CockroachDB applies range partitioning to split data into ordered chunks of roughly 64 MiB and assigns a Raft consensus group to each block <a href=\"#ref-21\">[21]<\/a>. Spanner similarly distributes partitioned data geographically across independent Paxos state machines <a href=\"#ref-20\">[20]<\/a>. In each case the per-shard consensus group is the same mechanism described in Section 3-C, applied once per shard. In the PA\/EL band, Dynamo implements consistent hashing to map keys onto a ring structure. It utilises virtual nodes to ensure new hardware assumes a proportional share of the existing load <a href=\"#ref-18\">[18]<\/a>. Cassandra partitions data through a similar consistent hashing topology that assigns ring tokens to individual nodes <a href=\"#ref-19\">[19]<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The hot-spot problem is concrete for a ride-hailing platform because location data is partitioned geographically. Uber\u2019s H3 system projects a hexagonal grid onto the map and converts geographic coordinates into 64-bit indexes <a id=\"cite-24\" href=\"#ref-24\">[24]<\/a>. The system selects hexagons because the uniform distance to all neighbouring cell centres simplifies spatial analysis <a href=\"#ref-24\">[24]<\/a>. The structure operates hierarchically across 15 different resolutions <a id=\"cite-25\" href=\"#ref-25\">[25]<\/a>. An H3 cell index can serve both as a geospatial index and as a shard key. This design also makes the skew concrete: dense urban cells receive disproportionately many location writes and therefore become hot shards, which is the instance of the hot-spot problem that partitioning must manage. At the storage layer, Uber manages trip data using Schemaless, an append-only MySQL datastore that delegates the specific shard routing logic directly to the application layer <a id=\"cite-26\" href=\"#ref-26\">[26]<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Partitioning sits below the service boundary of Section 3-A. It is an implementation choice inside a store, invisible across the service API. It is nonetheless the mechanism that lets the PA\/EL stores sustain their write volume and the PC\/EC stores scale horizontally while preserving per-shard linearizability.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><em>E. Comparison with single-engine designs<\/em><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Two single-engine designs show the cost of the polyglot approach. A single distributed SQL deployment would give every workload strong consistency and one transaction boundary, which removes the need for sagas, but it would force the PC\/EC latency cost onto the live-location and route writes that can tolerate stale data, and its per-shard consensus would cap their write throughput. A single Cassandra deployment would handle that write volume and stay available under partition, but it would push payment and Matching Service correctness into application-level conflict resolution, which brings back the lost-update and double-assignment risks that the PC\/EC band removes. The polyglot mapping accepts the cost of running several engines in return for matching each workload to the guarantee it needs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Maintaining Consistency Across Services: The Saga Pattern<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Because each service owns a private database, a cross-service operation cannot rely on a single ACID transaction, and consistency across services becomes an application-level concern <a href=\"#ref-10\">[10, p. 46]<\/a>. The <strong>saga pattern<\/strong> is the standard response.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Two-phase commit (2PC)<\/strong> provides atomicity across services but imposes costs that microservice architectures reject. In a two-phase commit, participants keep resources locked while waiting for the final decision. A coordinator crash leaves these resources blocked until manual or automatic recovery occurs <a href=\"#ref-3\">[3, p. 331]<\/a>. Distributed transactions degrade performance due to extra disk synchronisation and network communication <a href=\"#ref-3\">[3, p. 329]<\/a>. Furthermore, their tight synchronous integration often causes minor component errors to trigger broader system outages <a href=\"#ref-3\">[3, p. 549]<\/a>. Newman advises using sagas instead of distributed transactions whenever possible. Distributed transactions introduce severe system complexity, create problematic failure modes, and often fail to yield the expected results <a href=\"#ref-8\">[8, p. 554]<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A saga coordinates a sequence of local ACID transactions via messages to maintain consistency within each store <a href=\"#ref-10\">[10, pp. 114, 121]<\/a>. Garcia-Molina and Salem introduced the concept by splitting long-lived transactions into subtransactions and pairing each with a compensating transaction to undo its effects <a id=\"cite-27\" href=\"#ref-27\">[27]<\/a>. Sagas commit steps locally and cannot execute automatic rollbacks. A failure in a later step triggers compensating transactions in reverse order to undo the completed steps <a href=\"#ref-10\">[10, pp. 122, 126]<\/a>. This independent execution of discrete steps removes the lengthy resource locking required by two-phase commits <a href=\"#ref-8\">[8, p. 182]<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A saga\u2019s coordination logic follows one of two structures <a href=\"#ref-10\">[10, p. 131]<\/a>. Choreography relies on decentralised event exchange between participants. <strong>Orchestration<\/strong> centralises the logic in a designated controller that commands the participants sequentially <a href=\"#ref-10\">[10, p. 132]<\/a>. This paper uses orchestration, which suits a ride\u2019s request flow because that flow crosses several PC\/EC stores that a central coordinator can drive in a defined order. A confirmed ride spans three of the PC\/EC stores in <a href=\"#table-1\">Table 1<\/a>: Order, Payment, and Matching Service. The orchestrator issues the steps in sequence, that is, create the ride record (Order), authorise the fare (Payment), and assign exactly one driver (Matching Service), each a local ACID transaction in its owning service. If driver assignment fails because none is available, the orchestrator triggers compensating transactions in reverse by releasing the payment authorisation, then cancelling the ride record. The system reaches a consistent end state without any transaction spanning the three databases. <a href=\"#figure-3\">Fig. 3<\/a> shows this forward path and its compensation.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\" id=\"figure-3\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"355\" data-attachment-id=\"29028\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/grafik-26\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-2.png\" data-orig-size=\"1049,364\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}\" data-image-title=\"grafik\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-2-1024x355.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-2-1024x355.png\" alt=\"\" class=\"wp-image-29028\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-2-1024x355.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-2-300x104.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-2-768x266.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-2.png 1049w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\"><strong>Fig. 3:<\/strong> Confirmed-ride saga across three PC\/EC stores. Solid black arrows show the forward orchestration (Order, Payment, Matching Service), each a local ACID transaction. If the Matching Service step cannot assign a driver, marked by the failure above it, the orchestrator runs the dashed compensating transactions in reverse order, cancelling the payment authorisation and then the ride record, and reaches a consistent end state without a transaction spanning the three databases.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A saga is only as reliable as the messaging beneath it. Because a saga is message-driven, each local transaction must both commit its state change and emit the message that advances the saga. Performing these as two independent operations admits the dual-write failure in which the commit succeeds but the message is lost. The <strong>transactional outbox<\/strong> removes this gap. It is a table in the service database that stores messages to be published, and the service writes the business update and the outbox row in one local ACID transaction <a href=\"#ref-10\">[10, p. 98]<\/a>. A message relay publishes these rows to the broker. At low scale, the relay can poll the outbox table. At higher scale, a log tailer reads the database commit log, such as a binlog or write-ahead log, and publishes committed outbox entries <a href=\"#ref-10\">[10, pp. 98\u201399]<\/a>. The relay guarantees at-least-once delivery, so a consumer such as Payment must be <strong>idempotent<\/strong> to avoid a double authorisation. Storing the message identifier ensures idempotence. The system can safely retry failed messages without duplicating the operational side effects <a href=\"#ref-3\">[3, p. 334]<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sagas provide atomicity, consistency, and durability but omit isolation <a href=\"#ref-10\">[10, p. 114]<\/a>. Intermediate updates become visible immediately upon local commit <a href=\"#ref-10\">[10, p. 152]<\/a>. This visibility admits three anomalies. Lost updates occur when sagas overwrite unread changes. Dirty reads happen when a transaction observes uncompleted saga updates. Nonrepeatable reads manifest when two steps read the same data and obtain different results <a href=\"#ref-10\">[10, p. 156]<\/a>. Each local transaction, including the one on the Matching Service store, is still fully ACID under distributed SQL. The isolation gap appears only between steps that commit at different times over the course of the saga. In the ride flow, a dirty read would occur if a rider-facing view reported a ride as confirmed after the Matching Service step but before a later compensation cancelled it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Applications implement specific countermeasure techniques to mitigate the impact of these concurrency anomalies <a href=\"#ref-10\">[10, p. 114]<\/a>. Richardson lists six countermeasures, summarised in <a href=\"#table-2\">Table 2<\/a> <a href=\"#ref-10\">[10, p. 162]<\/a>. For the ride flow, the Matching Service marks a candidate driver as <em>RESERVED<\/em> while the saga is in progress, so other matching sagas exclude that driver and no second assignment occurs. The Order service keeps the ride in a <em>PENDING<\/em> state until Payment and Matching Service have both completed, and only then emits <em>RideConfirmed<\/em>. Together these remove the lost-update risk on the driver and prevent the rider-facing dirty read described above, since no view reports the ride as confirmed while it can still be compensated<\/p>\n\n\n\n<figure id=\"table-2\" class=\"wp-block-table\"><table><thead><tr><th>Countermeasure<\/th><th>Mechanism<\/th><th>Illustrative use<\/th><\/tr><\/thead><tbody><tr><td>Semantic lock<\/td><td>lock held until saga ends<\/td><td>lock assigned driver<\/td><\/tr><tr><td>Commutative update<\/td><td>order-independent writes<\/td><td>fare adjustments<\/td><\/tr><tr><td>Pessimistic view<\/td><td>reorder to cut risk<\/td><td>assign before charge<\/td><\/tr><tr><td>Reread value<\/td><td>verify before overwrite<\/td><td>re-check driver free<\/td><\/tr><tr><td>Version file<\/td><td>log updates, reorder later<\/td><td>ride status log<\/td><\/tr><tr><td>By value<\/td><td>pick mechanism per risk<\/td><td>per-fare risk choice<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\"><strong>Table 2:<\/strong> Saga isolation countermeasures <a href=\"#ref-10\">[10, p. 162]<\/a>. The final column gives one illustrative ride-flow application per countermeasure; the semantic lock is developed in depth in the text.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The remaining five countermeasures address the same anomalies by other means. Commutative updates eliminate lost updates by designing operations that can execute in any order. The pessimistic view reorders a saga\u2019s steps to minimise the business risk of a dirty read. The reread value countermeasure prevents lost updates by verifying that a record is unchanged before overwriting it. The version file records the operations performed on a record so that noncommutative operations can be reordered into commutative ones. Finally, the by value countermeasure selects the concurrency mechanism per request from its business risk, choosing between a saga and a distributed transaction <a href=\"#ref-10\">[10, p. 162]<\/a>.<\/p>\n\n\n\n<h2 id=\"sec-analytical\" class=\"wp-block-heading\">5. Analytical Access to Operational Data: From Data Warehouse to Lakehouse<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The operational services described earlier serve OLTP workloads. Analytical queries have a different shape. These queries process massive record sets to generate business intelligence reports <a href=\"#ref-3\">[3, p. 5]<\/a>. In a ride-hailing platform, demand forecasting, driver-utilisation reporting, and surge-pricing analysis are OLAP workloads. Executing them against the operational stores would degrade the point-query latency those stores are provisioned for, so the two workloads are separated.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The standard target for analytical workloads is a <strong>data warehouse<\/strong>, a separate read-only copy of operational data used for queries and reporting without affecting OLTP operations <a href=\"#ref-3\">[3, p. 7]<\/a>. Data reaches the warehouse through extract, transform, and load processes. The system extracts data from operational databases via periodic dumps or continuous streams, transforms it into an analysis-friendly format, and loads it into the data warehouse <a href=\"#ref-3\">[3, p. 7]<\/a>. This consolidates the platform\u2019s polyglot operational stores into one queryable copy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Continuous extraction uses the same kind of update stream that underpins the outbox relay of Section 4. This mechanism is <strong>change data capture (CDC)<\/strong>, which observes database changes and exports them so they can be replicated to other systems <a href=\"#ref-3\">[3, p. 503]<\/a>. The same CDC infrastructure can serve both saga coordination and analytical replication. Saga events advance the ride workflow, for example ride created, payment authorised, and driver assigned. Analytical events build the lakehouse copy. They may use different fields, retention periods, and filtering. The shared parts are the outbox, log tailer, broker, event identifiers, and <strong>schema registry<\/strong>. <a href=\"#figure-4\">Fig. 4<\/a> shows this shared infrastructure.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\" id=\"figure-4\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"385\" data-attachment-id=\"29031\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/grafik-27\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-3.png\" data-orig-size=\"1079,406\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}\" data-image-title=\"grafik\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-3-1024x385.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-3-1024x385.png\" alt=\"\" class=\"wp-image-29031\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-3-1024x385.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-3-300x113.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-3-768x289.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-3.png 1079w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\"><strong>Fig. 4:<\/strong> Shared change-data-capture infrastructure. The log tailer reads committed outbox entries and publishes them to the broker. The broker exposes operational topics for saga participants and analytical topics for the lakehouse. Delivery is at least once, so consumers deduplicate by event identifier.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">With ordered event logs and idempotent consumers, heterogeneous services can use a common integration mechanism <a href=\"#ref-3\">[3, p. 549]<\/a>. A schema registry beside the broker stores valid schema versions and checks compatibility <a href=\"#ref-3\">[3, p. 190]<\/a>. CDC therefore replaces periodic bulk dumps with a low-latency, continuously maintained analytical copy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The warehouse commonly organises this data as a star schema. At its centre is a fact table whose rows represent events. Dimension tables describe entities such as rider, driver, location, and time, and are used for filtering and grouping <a href=\"#ref-3\">[3, pp. 77\u201379]<\/a>. Fact tables record the numerical measurements of business events <a id=\"cite-28\" href=\"#ref-28\">[28, p. 10]<\/a>. Dimension tables store the attributes required to filter and group those measurements <a href=\"#ref-28\">[28, p. 40]<\/a>. For the platform, a completed-ride fact table keyed on rider, driver, location, and time dimensions supports the analytical queries above.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A warehouse imposes a schema at load time while a <strong>data lake<\/strong> relaxes this. A data lake operates as a centralised repository for untransformed files. It drops the strict schemas of data warehouses and permits downstream consumers to parse the raw data exactly as needed <a href=\"#ref-3\">[3, pp. 9\u201310]<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Operating a lake and a warehouse together is costly. In a two-tier design, data is first moved into the lake and later transformed again for the warehouse, which adds complexity, delay, and more failure modes <a id=\"cite-29\" href=\"#ref-29\">[29]<\/a>. The extra jobs across both architectures can also introduce failures and bugs <a href=\"#ref-29\">[29]<\/a>. The <strong>lakehouse<\/strong> unifies these architectures by applying database management capabilities, such as ACID transactions and indexing, directly over inexpensive object storage <a href=\"#ref-29\">[29]<\/a>. The enabling mechanism is architectural. The architecture writes to an object store using standard formats like Apache Parquet and relies on an independent metadata layer to enforce transactional guarantees <a href=\"#ref-29\">[29]<\/a>. Management features reside in the metadata layer while the bulk of the data stays in the object store <a href=\"#ref-29\">[29]<\/a>. Because the platform already operates an object-storage layer, the lakehouse can reuse that same storage while adding its own transactional metadata and query layer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Analytical processing over this data takes two forms. <strong>Batch processing<\/strong> transforms bounded inputs of finite size into discrete outputs <a href=\"#ref-3\">[3, pp. 451, 487]<\/a>. <strong>Stream processing<\/strong> manages continuous data arrivals and evaluates events immediately <a href=\"#ref-3\">[3, pp. 487\u2013488, 544]<\/a>. The former suits periodic reporting over completed rides while the latter suits latency-sensitive analytics such as live surge computation over the streaming location and ride-status events.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Convergence and Future Directions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The preceding treatment kept the operational and analytical tiers apart, joined only by a copy. The analytical replica, whether warehouse or lakehouse, was maintained separately and fed from the operational store by a change-data-capture pipeline. The copy is the source of the analytical latency in the design. Queries observe the operational state only after extraction, transformation, and loading. A convergence trend directly targets this separation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Hybrid transactional\/analytical processing (HTAP)<\/strong> denotes systems that support both OLTP and OLAP within one system. Ozcan et al. note that the term is now applied more broadly to systems that combine high-rate ingestion with analytical queries <a id=\"cite-30\" href=\"#ref-30\">[30]<\/a>. The motivation is the freshness gap left by the copy. The demand for immediate analytical processing stems from real-time requirements and the high ingestion rates of mobile and IoT workloads <a href=\"#ref-30\">[30]<\/a>. The ride-hailing platform fits this profile. Surge pricing is an analytical computation over the continuous flow of location and ride-status events whose value decays within seconds of the events that produce it. Unified database architectures directly address the data freshness problem as analytical queries can run closer to the latest operational commits, reducing or removing separate transformation and transfer steps <a href=\"#ref-30\">[30]<\/a>. HTAP therefore removes the separately maintained, change-data-capture-fed analytical replica as a mandatory element, collapsing the extraction step rather than optimising it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Databricks Lakebase is an example of this convergence trend in a lakehouse setting <a id=\"cite-31\" href=\"#ref-31\">[31]<\/a>. It is presented as a <strong>Lake Transactional\/Analytical Processing (LTAP)<\/strong> architecture that brings a managed, serverless, PostgreSQL-compatible operational database into the Databricks lakehouse environment <a href=\"#ref-31\">[31]<\/a>. Rather than merging OLTP and OLAP inside one monolithic engine, the design unifies them through shared open storage and lakehouse metadata. Operational writes are made available in open columnar formats such as Delta Lake and Apache Iceberg, so analytical queries can access the same data without a separate ETL pipeline or duplicate operational copy <a href=\"#ref-31\">[31]<\/a>. The same platform boundary also allows governance, security, and access control through Unity Catalog to apply across both transactional and analytical workloads <a href=\"#ref-31\">[31]<\/a>. For the ride-hailing architecture considered here, such an LTAP design would mainly reduce the CDC-fed copy between selected operational stores and the lakehouse. It would not remove the need to classify workloads by latency, consistency, and query shape.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A second convergence follows the same pattern of a general-purpose engine supporting a workload that previously justified a dedicated system. High-dimensional similarity searches over learned embeddings for tasks like fraud scoring and rider-driver matching traditionally required specialised <strong>vector databases<\/strong> like Milvus <a id=\"cite-32\" href=\"#ref-32\">[32]<\/a>. Modern architectures increasingly extend established relational engines to handle vector search. This approach eliminates the operational overhead of managing an entirely separate system within the data infrastructure <a id=\"cite-33\" href=\"#ref-33\">[33]<\/a>. The <strong>pgvector<\/strong> extension for PostgreSQL is the representative instance, exposing similarity search through the existing SQL interface rather than a separate query path <a href=\"#ref-33\">[33]<\/a>, <a id=\"cite-34\" href=\"#ref-34\">[34]<\/a>. The consolidation is thus visible along two axes at once, the operational\/analytical divide and the relational\/specialised divide, each reducing the number of distinct systems an infrastructure must operate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These trends narrow the polyglot argument without ending it. Convergence lowers the cost of running a given specialisation by folding it into a system that is already in place. It does not remove the differences in access pattern, consistency requirement, and query shape that made the specialisation necessary. Where one engine can serve two workloads well, the number of distinct systems drops. Where their requirements stay far apart, separate systems remain.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Limitations<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Several limitations need to be kept in mind when evaluating this paper. The work is a conceptual synthesis, and no benchmarking was performed, so the PACELC placements rest on the published properties of each system and not on measurements taken under the platform\u2019s own workload. The mapping in <a href=\"#table-1\">Table 1<\/a> is one defensible assignment among several. A team that prioritised reporting convenience might place the Ratings store on a relational engine, for instance. The Uber components cited in Section 3 serve as evidence that the classes of store discussed are operated at scale, and they are not a claim that the architecture presented here matches Uber\u2019s internal design. Operational figures reported in engineering blogs, such as the read rates cited for CacheFront, are self-reported by the operator and depend on hardware and configuration that the sources do not fully specify. Data security, regulatory compliance such as data-residency and deletion requirements, backup and disaster recovery, and cost modelling fall outside the scope of this paper.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This paper examined the storage systems a ride-hailing platform requires, using the concrete demands of that domain to ground the design choices. The trip lifecycle, the driver-location stream, the surge computation, and the fraud and billing paths do not share a single access pattern, consistency requirement, or query shape, and no single engine serves them all without compromise.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Several consequences follow from that starting point. Under geographic distribution the consistency and latency trade-off is paid continuously, whether or not a network partition is present, and PACELC exposes this cost where the CAP theorem is silent. Assigning each workload to a matched store then splits the operational tier into a correctness-first band under leader-based replication and a latency-first band under leaderless quorum, with horizontal partitioning in both to reach the required scale. The price of that split is the loss of a single cross-store transaction boundary, which sagas and the transactional outbox recover at the application level. The same outbox and log-tailing infrastructure can publish saga events and analytical replication events for the warehouse or lakehouse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The convergence trends surveyed in Section 6 reduce the total number of systems required, but they do not eliminate workload distinctions. HTAP and LTAP architectures execute both transactional and analytical queries on the same data. Similarly, in-engine vector search eliminates the need for dedicated vector databases. Despite this consolidation, engineers must still assign each workload to a storage engine based on its specific consistency guarantees and latency limits.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">References<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-1\">1] M. Stonebraker and U. C\u00b8 etintemel, \u201cOne Size Fits All: An Idea Whose Time Has Come and Gone,\u201d in Proc. 21st Int. Conf. Data Engineering (ICDE \u201905), Tokyo, Japan, 2005, pp. 2\u201311. <a href=\"#cite-1\" aria-label=\"Back to first citation of reference 1\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-2\">[2] L. Northrop et al., Ultra-Large-Scale Systems: The Software Challenge of the Future. Pittsburgh, PA: Software Engineering Institute, Carnegie Mellon University, 2006. <a href=\"#cite-2\" aria-label=\"Back to first citation of reference 2\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-3\">[3] M. Kleppmann and C. Riccomini, Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems, 2nd ed. Sebastopol, CA: O\u2019Reilly Media, 2026. <a href=\"#cite-3\" aria-label=\"Back to first citation of reference 3\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-4\">[4] P. J. Sadalage and M. Fowler, NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence. Upper Saddle River, NJ: Addison-Wesley, 2012. <a href=\"#cite-4\" aria-label=\"Back to first citation of reference 4\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-5\">[5] S. Gilbert and N. Lynch, \u201cBrewer\u2019s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services,\u201d ACM SIGACT News, vol. 33, no. 2, pp. 51\u201359, 2002. <a href=\"#cite-5\" aria-label=\"Back to first citation of reference 5\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-6\">[6] E. A. Brewer, \u201cCAP Twelve Years Later: How the \u2018Rules\u2019 Have Changed,\u201d Computer, vol. 45, no. 2, pp. 23\u201329, 2012. <a href=\"#cite-6\" aria-label=\"Back to first citation of reference 6\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-7\">[7] D. J. Abadi, \u201cConsistency Tradeoffs in Modern Distributed Database System Design: CAP is Only Part of the Story,\u201d Computer, vol. 45, no. 2, pp. 37\u201342, 2012. <a href=\"#cite-7\" aria-label=\"Back to first citation of reference 7\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-8\">[8] S. Newman, Building Microservices: Designing Fine-Grained Systems, 2nd ed. Sebastopol, CA: O\u2019Reilly Media, 2021. <a href=\"#cite-8\" aria-label=\"Back to first citation of reference 8\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-9\">[9] E. Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software. Boston, MA: Addison-Wesley, 2003. <a href=\"#cite-9\" aria-label=\"Back to first citation of reference 9\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-10\">[10] C. Richardson, Microservices Patterns: With Examples in Java. Shelter Island, NY: Manning Publications, 2018. <a href=\"#cite-10\" aria-label=\"Back to first citation of reference 10\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-11\">[11] Amazon Web Services, \u201cAmazon S3 data consistency model,\u201d Amazon S3 User Guide, 2026. [Online]. Available: <a href=\"https:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/userguide\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/userguide\/<\/a>. [Accessed: Jul. 09, 2026]. <a href=\"#cite-11\" aria-label=\"Back to first citation of reference 11\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-12\">[12] Amazon Web Services, \u201cReplicating objects within and across Regions,\u201d Amazon S3 User Guide, 2026. [Online]. Available: <a href=\"https:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/userguide\/replication.html\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/userguide\/replication.html<\/a>. [Accessed: Jul. 09, 2026]. <a href=\"#cite-12\" aria-label=\"Back to first citation of reference 12\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-13\">[13] Amazon Web Services, \u201cTroubleshooting Amazon S3 Lifecycle issues,\u201d Amazon S3 User Guide, 2026. [Online]. Available: <a href=\"https:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/userguide\/troubleshoot-lifecycle.html\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/userguide\/troubleshoot-lifecycle.html<\/a>. [Accessed: Jul. 09, 2026]. <a href=\"#cite-13\" aria-label=\"Back to first citation of reference 13\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-14\">[14] Uber Technologies, \u201cHow Uber Optimized Cassandra Operations at Scale,\u201d Uber Blog, 2022. [Online]. Available: <a href=\"https:\/\/www.uber.com\/de\/en\/blog\/how-uber-optimized-cassandra-operations-at-scale\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.uber.com\/de\/en\/blog\/how-uber-optimized-cassandra-operations-at-scale\/<\/a>. [Accessed: Jul. 06, 2026]. <a href=\"#cite-14\" aria-label=\"Back to first citation of reference 14\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-15\">[15] Uber Technologies, \u201cHow Uber Serves over 150 Million Reads per Second from Integrated Cache with Stronger Consistency Guarantees,\u201d Uber Blog, 2024. [Online]. Available: <a href=\"https:\/\/www.uber.com\/us\/en\/blog\/how-uber-serves-over-150-million-reads\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.uber.com\/us\/en\/blog\/how-uber-serves-over-150-million-reads\/<\/a>. [Accessed: Jul. 06, 2026]. <a href=\"#cite-15\" aria-label=\"Back to first citation of reference 15\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-16\">[16] L. Lamport, \u201cThe Part-Time Parliament,\u201d ACM Trans. Computer Systems, vol. 16, no. 2, pp. 133\u2013169, 1998. <a href=\"#cite-16\" aria-label=\"Back to first citation of reference 16\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-17\">[17] D. Ongaro and J. Ousterhout, \u201cIn Search of an Understandable Consensus Algorithm,\u201d in Proc. 2014 USENIX Annual Technical Conf. (USENIX ATC \u201914), Philadelphia, PA, 2014, pp. 305\u2013319. <a href=\"#cite-17\" aria-label=\"Back to first citation of reference 17\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-18\">[18] G. DeCandia et al., \u201cDynamo: Amazon\u2019s Highly Available Key-value Store,\u201d in Proc. 21st ACM SIGOPS Symp. Operating Systems Principles (SOSP \u201907), Stevenson, WA, 2007, pp. 205\u2013220. <a href=\"#cite-18\" aria-label=\"Back to first citation of reference 18\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-19\">[19] A. Lakshman and P. Malik, \u201cCassandra: A Decentralized Structured Storage System,\u201d ACM SIGOPS Operating Systems Review, vol. 44, no. 2, pp. 35\u201340, 2010. <a href=\"#cite-19\" aria-label=\"Back to first citation of reference 19\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-20\">[20] J. C. Corbett et al., \u201cSpanner: Google\u2019s Globally Distributed Database,\u201d ACM Trans. Computer Systems, vol. 31, no. 3, pp. 1\u201322, 2013. <a href=\"#cite-20\" aria-label=\"Back to first citation of reference 20\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-21\">[21] R. Taft et al., \u201cCockroachDB: The Resilient Geo-Distributed SQL Database,\u201d in Proc. 2020 ACM SIGMOD Int. Conf. Management of Data, 2020, pp. 1493\u20131509. <a href=\"#cite-21\" aria-label=\"Back to first citation of reference 21\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-22\">[22] YugabyteDB, \u201cKey Concepts,\u201d Yugabyte, 2026. [Online]. Available: <a href=\"https:\/\/docs.yugabyte.com\/stable\/architecture\/key-concepts\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/docs.yugabyte.com\/stable\/architecture\/key-concepts\/<\/a>. [Accessed: Jul. 04, 2026]. <a href=\"#cite-22\" aria-label=\"Back to first citation of reference 22\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-23\">[23] N. Adly, M. Nagi, and J. Bacon, \u201cPerformance Evaluation of a Hierarchical Replication Protocol: Synchronous versus Asynchronous,\u201d Univ. of Cambridge Computer Laboratory, 1995, pp. 102\u2013108. <a href=\"#cite-23\" aria-label=\"Back to first citation of reference 23\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-24\">[24] Uber Technologies, \u201cH3: Uber\u2019s Hexagonal Hierarchical Spatial Index,\u201d Uber Blog, 2018. [Online]. Available: <a href=\"https:\/\/www.uber.com\/blog\/h3\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.uber.com\/blog\/h3\/<\/a>. [Accessed: Jul. 06, 2026]. <a href=\"#cite-24\" aria-label=\"Back to first citation of reference 24\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-25\">[25] Uber Technologies, \u201cH3: A Hexagonal Hierarchical Geospatial Indexing System,\u201d h3geo.org documentation, 2024. [Online]. Available: <a href=\"https:\/\/h3geo.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/h3geo.org\/<\/a>. [Accessed: Jul. 06, 2026]. <a href=\"#cite-25\" aria-label=\"Back to first citation of reference 25\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-26\">[26] Uber Technologies, \u201cDesigning Schemaless, Uber Engineering\u2019s Scalable Datastore Using MySQL,\u201d Uber Blog, 2016. [Online]. Available: <a href=\"https:\/\/www.uber.com\/blog\/schemaless-part-one-mysql-datastore\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.uber.com\/blog\/schemaless-part-one-mysql-datastore\/<\/a>. [Accessed: Jul. 06, 2026]. <a href=\"#cite-26\" aria-label=\"Back to first citation of reference 26\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-27\">[27] H. Garcia-Molina and K. Salem, \u201cSagas,\u201d in Proc. 1987 ACM SIGMOD Int. Conf. Management of Data (SIGMOD \u201987), San Francisco, CA, 1987, pp. 249\u2013259. <a href=\"#cite-27\" aria-label=\"Back to first citation of reference 27\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-28\">[28] R. Kimball and M. Ross, The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling, 3rd ed. Indianapolis, IN: Wiley, 2013. <a href=\"#cite-28\" aria-label=\"Back to first citation of reference 28\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-29\">[29] M. Armbrust, A. Ghodsi, R. Xin, and M. Zaharia, \u201cLakehouse: A New Generation of Open Platforms that Unify Data Warehousing and Advanced Analytics,\u201d in Proc. 11th Conf. Innovative Data Systems Research (CIDR \u201921), 2021. <a href=\"#cite-29\" aria-label=\"Back to first citation of reference 29\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-30\">[30] F. \u00a8Ozcan, Y. Tian, and P. T\u00a8oz\u00a8un, \u201cHybrid transactional\/analytical processing: A survey,\u201d in Proc. 2017 ACM SIGMOD Int. Conf. Management of Data, 2017, pp. 1771\u20131775. <a href=\"#cite-30\" aria-label=\"Back to first citation of reference 30\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-31\">[31] K. Cummiskey and S. Pierce, \u201cAzure Databricks Lakebase is Generally Available,\u201d Databricks Blog, 2026. [Online]. Available: <a href=\"https:\/\/www.databricks.com\/blog\/azure-databricks-lakebase-generally-available\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.databricks.com\/blog\/azure-databricks-lakebase-generally-available<\/a>. [Accessed: Jul. 19, 2026]. <a href=\"#cite-31\" aria-label=\"Back to first citation of reference 31\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-32\">[32] J. Wang et al., \u201cMilvus: A Purpose-Built Vector Data Management System,\u201d in Proc. 2021 ACM SIGMOD Int. Conf. Management of Data, 2021, pp. 2614\u20132627. <a href=\"#cite-32\" aria-label=\"Back to first citation of reference 32\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-33\">[33] J. J. Pan, J. Wang, and G. Li, \u201cSurvey of vector database management systems,\u201d The VLDB Journal, vol. 33, no. 5, pp. 1591\u20131615, 2024. <a href=\"#cite-33\" aria-label=\"Back to first citation of reference 33\">\u21a9<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ref-34\">[34] A. Kane, \u201cpgvector: Open-source vector similarity search for Postgres,\u201d GitHub repository, 2024. [Online]. Available: <a href=\"https:\/\/github.com\/pgvector\/pgvector\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/pgvector\/pgvector<\/a>. [Accessed: Jul. 13, 2026]. <a href=\"#cite-34\" aria-label=\"Back to first citation of reference 34\">\u21a9<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Abstract: The assumption that a single type of data storage can serve every workload no longer holds at ultra-large scale. This paper examines storage in a globally distributed ride-hailing platform, where each workload is mapped to a storage engine whose guarantees match its access pattern, consistency requirement, and query shape. The mapping is justified through [&hellip;]<\/p>\n","protected":false},"author":1315,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1,655,650,21,651,223],"tags":[1240,1242,1241,1247,1244,91,1246,1245,1239,1238,1243,415,1233],"ppma_author":[1200],"class_list":["post-29005","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-design-patterns","category-scalable-systems","category-system-architecture","category-system-designs","category-ultra-large-scale-systems","tag-cap","tag-change-data-capture","tag-distributed-databases","tag-htap","tag-lakehouse","tag-microservices","tag-olap","tag-oltp","tag-pacelc","tag-polyglot-persistance","tag-saga-pattern","tag-sharding","tag-ultra-large-scale-systems-2"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"Abstract: The assumption that a single type of data storage can serve every workload no longer holds at ultra-large scale. This paper examines storage in a globally distributed ride-hailing platform, where each workload is mapped to a storage engine whose guarantees match its access pattern, consistency requirement, and query shape. The mapping is justified through\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Tilman Zorn\"\/>\n\t<meta name=\"keywords\" content=\"cap,change data capture,distributed databases,htap,lakehouse,microservices,olap,oltp,pacelc,polyglot persistance,saga pattern,sharding,ultra-large-scale systems\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Computer Science Blog\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform | Computer Science Blog @ HdM Stuttgart\" \/>\n\t\t<meta property=\"og:description\" content=\"Abstract: The assumption that a single type of data storage can serve every workload no longer holds at ultra-large scale. This paper examines storage in a globally distributed ride-hailing platform, where each workload is mapped to a storage engine whose guarantees match its access pattern, consistency requirement, and query shape. The mapping is justified through\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik.png\" \/>\n\t\t<meta property=\"og:image:width\" content=\"760\" \/>\n\t\t<meta property=\"og:image:height\" content=\"537\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-07-30T21:56:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-07-30T21:56:54+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform | Computer Science Blog @ HdM Stuttgart\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Abstract: The assumption that a single type of data storage can serve every workload no longer holds at ultra-large scale. This paper examines storage in a globally distributed ride-hailing platform, where each workload is mapped to a storage engine whose guarantees match its access pattern, consistency requirement, and query shape. The mapping is justified through\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/07\\\/30\\\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\\\/#article\",\"name\":\"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform | Computer Science Blog @ HdM Stuttgart\",\"headline\":\"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform\",\"author\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/author\\\/tilman_zorn\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/grafik.png\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/07\\\/30\\\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\\\/#articleImage\",\"width\":760,\"height\":537},\"datePublished\":\"2026-07-30T23:56:51+02:00\",\"dateModified\":\"2026-07-30T23:56:54+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/07\\\/30\\\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/07\\\/30\\\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\\\/#webpage\"},\"articleSection\":\"Allgemein, Design Patterns, Scalable Systems, System Architecture, System Designs, Ultra Large Scale Systems, CAP, change data capture, distributed databases, HTAP, lakehouse, Microservices, OLAP, OLTP, PACELC, polyglot persistance, saga pattern, sharding, Ultra-large-scale systems, Tilman Zorn\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/07\\\/30\\\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/category\\\/system-designs\\\/#listItem\",\"name\":\"System Designs\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/category\\\/system-designs\\\/#listItem\",\"position\":2,\"name\":\"System Designs\",\"item\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/category\\\/system-designs\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/category\\\/system-designs\\\/system-architecture\\\/#listItem\",\"name\":\"System Architecture\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/category\\\/system-designs\\\/system-architecture\\\/#listItem\",\"position\":3,\"name\":\"System Architecture\",\"item\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/category\\\/system-designs\\\/system-architecture\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/07\\\/30\\\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\\\/#listItem\",\"name\":\"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/category\\\/system-designs\\\/#listItem\",\"name\":\"System Designs\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/07\\\/30\\\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\\\/#listItem\",\"position\":4,\"name\":\"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/category\\\/system-designs\\\/system-architecture\\\/#listItem\",\"name\":\"System Architecture\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/#organization\",\"name\":\"Computer Science Blog @ HdM Stuttgart\",\"description\":\"on computer science and media topics\",\"url\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/author\\\/tilman_zorn\\\/#author\",\"url\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/author\\\/tilman_zorn\\\/\",\"name\":\"Tilman Zorn\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/07\\\/30\\\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c25410723d92bf712a6311507e7614dace4a97f48bfdd71786ecb4547b516f57?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Tilman Zorn\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/07\\\/30\\\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\\\/#webpage\",\"url\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/07\\\/30\\\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\\\/\",\"name\":\"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform | Computer Science Blog @ HdM Stuttgart\",\"description\":\"Abstract: The assumption that a single type of data storage can serve every workload no longer holds at ultra-large scale. This paper examines storage in a globally distributed ride-hailing platform, where each workload is mapped to a storage engine whose guarantees match its access pattern, consistency requirement, and query shape. The mapping is justified through\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/07\\\/30\\\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/author\\\/tilman_zorn\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/author\\\/tilman_zorn\\\/#author\"},\"datePublished\":\"2026-07-30T23:56:51+02:00\",\"dateModified\":\"2026-07-30T23:56:54+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/#website\",\"url\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/\",\"name\":\"Computer Science Blog @ HdM Stuttgart\",\"description\":\"on computer science and media topics\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform | Computer Science Blog @ HdM Stuttgart","description":"Abstract: The assumption that a single type of data storage can serve every workload no longer holds at ultra-large scale. This paper examines storage in a globally distributed ride-hailing platform, where each workload is mapped to a storage engine whose guarantees match its access pattern, consistency requirement, and query shape. The mapping is justified through","canonical_url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/","robots":"max-image-preview:large","keywords":"cap,change data capture,distributed databases,htap,lakehouse,microservices,olap,oltp,pacelc,polyglot persistance,saga pattern,sharding,ultra-large-scale systems","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/#article","name":"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform | Computer Science Blog @ HdM Stuttgart","headline":"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform","author":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/author\/tilman_zorn\/#author"},"publisher":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik.png","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/#articleImage","width":760,"height":537},"datePublished":"2026-07-30T23:56:51+02:00","dateModified":"2026-07-30T23:56:54+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/#webpage"},"isPartOf":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/#webpage"},"articleSection":"Allgemein, Design Patterns, Scalable Systems, System Architecture, System Designs, Ultra Large Scale Systems, CAP, change data capture, distributed databases, HTAP, lakehouse, Microservices, OLAP, OLTP, PACELC, polyglot persistance, saga pattern, sharding, Ultra-large-scale systems, Tilman Zorn"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de#listItem","position":1,"name":"Home","item":"https:\/\/blog.mi.hdm-stuttgart.de","nextItem":{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/#listItem","name":"System Designs"}},{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/#listItem","position":2,"name":"System Designs","item":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/","nextItem":{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/system-architecture\/#listItem","name":"System Architecture"},"previousItem":{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/system-architecture\/#listItem","position":3,"name":"System Architecture","item":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/system-architecture\/","nextItem":{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/#listItem","name":"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform"},"previousItem":{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/#listItem","name":"System Designs"}},{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/#listItem","position":4,"name":"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform","previousItem":{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/system-architecture\/#listItem","name":"System Architecture"}}]},{"@type":"Organization","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/#organization","name":"Computer Science Blog @ HdM Stuttgart","description":"on computer science and media topics","url":"https:\/\/blog.mi.hdm-stuttgart.de\/"},{"@type":"Person","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/author\/tilman_zorn\/#author","url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/author\/tilman_zorn\/","name":"Tilman Zorn","image":{"@type":"ImageObject","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/c25410723d92bf712a6311507e7614dace4a97f48bfdd71786ecb4547b516f57?s=96&d=mm&r=g","width":96,"height":96,"caption":"Tilman Zorn"}},{"@type":"WebPage","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/#webpage","url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/","name":"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform | Computer Science Blog @ HdM Stuttgart","description":"Abstract: The assumption that a single type of data storage can serve every workload no longer holds at ultra-large scale. This paper examines storage in a globally distributed ride-hailing platform, where each workload is mapped to a storage engine whose guarantees match its access pattern, consistency requirement, and query shape. The mapping is justified through","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/#website"},"breadcrumb":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/#breadcrumblist"},"author":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/author\/tilman_zorn\/#author"},"creator":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/author\/tilman_zorn\/#author"},"datePublished":"2026-07-30T23:56:51+02:00","dateModified":"2026-07-30T23:56:54+02:00"},{"@type":"WebSite","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/#website","url":"https:\/\/blog.mi.hdm-stuttgart.de\/","name":"Computer Science Blog @ HdM Stuttgart","description":"on computer science and media topics","inLanguage":"en-US","publisher":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/#organization"}}]},"og:locale":"en_US","og:site_name":"Computer Science Blog","og:type":"article","og:title":"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform | Computer Science Blog @ HdM Stuttgart","og:description":"Abstract: The assumption that a single type of data storage can serve every workload no longer holds at ultra-large scale. This paper examines storage in a globally distributed ride-hailing platform, where each workload is mapped to a storage engine whose guarantees match its access pattern, consistency requirement, and query shape. The mapping is justified through","og:url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/","og:image":"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik.png","og:image:secure_url":"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik.png","og:image:width":760,"og:image:height":537,"article:published_time":"2026-07-30T21:56:51+00:00","article:modified_time":"2026-07-30T21:56:54+00:00","twitter:card":"summary","twitter:title":"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform | Computer Science Blog @ HdM Stuttgart","twitter:description":"Abstract: The assumption that a single type of data storage can serve every workload no longer holds at ultra-large scale. This paper examines storage in a globally distributed ride-hailing platform, where each workload is mapped to a storage engine whose guarantees match its access pattern, consistency requirement, and query shape. The mapping is justified through","twitter:image":"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik.png"},"aioseo_meta_data":{"post_id":"29005","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"ULS Data Storage Architecture","score":37,"analysis":{"keyphraseInTitle":{"score":3,"maxScore":9,"error":1},"keyphraseInDescription":{"score":3,"maxScore":9,"error":1},"keyphraseLength":{"score":9,"maxScore":9,"error":0,"length":4},"keyphraseInURL":{"score":1,"maxScore":5,"error":1},"keyphraseInIntroduction":{"score":3,"maxScore":9,"error":1},"keyphraseInSubHeadings":{"score":3,"maxScore":9,"error":1},"keyphraseInImageAlt":{"score":3,"maxScore":9,"error":1},"keywordDensity":{"score":0,"type":"low","maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-07-30 18:48:43","updated":"2026-07-30 21:56:54","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/blog.mi.hdm-stuttgart.de\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/\" title=\"System Designs\">System Designs<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/system-architecture\/\" title=\"System Architecture\">System Architecture<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tPolyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/blog.mi.hdm-stuttgart.de"},{"label":"System Designs","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/"},{"label":"System Architecture","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/system-architecture\/"},{"label":"Polyglot Data Storage in Ultra-Large-Scale Systems: A Workload-Driven Architecture for a Ride-Hailing Platform","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/30\/polyglot-data-storage-in-ultra-large-scale-systems-a-workload-driven-architecture-for-a-ride-hailing-platform\/"}],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":23333,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2022\/04\/01\/improve-your-storage-i-o-performance-today\/","url_meta":{"origin":29005,"position":0},"title":"Improve your storage I\/O performance today","author":"Jannik Smidt","date":"1. April 2022","format":false,"excerpt":"an article by Lucas Cr\u00e4mer and Jannik Smidt DISCLAIMER This post tries to keep the complexity manageable while making a point clear. We are not systems engineers\/kernel developers, so feel free to point out any mistakes\/misunderstandings. This post probably does not present anything new for people who are working in\u2026","rel":"","context":"In &quot;System Architecture&quot;","block_context":{"text":"System Architecture","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/system-architecture\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/04\/queues-e1619992851556.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/04\/queues-e1619992851556.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/04\/queues-e1619992851556.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/04\/queues-e1619992851556.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":27789,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2025\/07\/24\/beyond-reactive-how-ai-is-revolutionizing-kubernetes-autoscaling\/","url_meta":{"origin":29005,"position":1},"title":"Beyond Reactive: How AI is Revolutionizing Kubernetes Autoscaling","author":"Hannah Holzheu","date":"24. July 2025","format":false,"excerpt":"Note:\u00a0This blog post was written for the module Enterprise IT (113601a) in the summer semester of 2025 Introduction Kubernetes has become the leading open-source platform for managing containerized applications. Its ability to automate deployment, scaling, and operations helps teams efficiently manage microservices architectures and dynamic cloud workloads. A cornerstone of\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/07\/AIvsRuleBased.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/07\/AIvsRuleBased.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/07\/AIvsRuleBased.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/07\/AIvsRuleBased.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":10289,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2020\/03\/09\/distributed-stream-processing-frameworks-what-they-are-and-how-they-perform\/","url_meta":{"origin":29005,"position":2},"title":"Distributed stream processing frameworks &#8211; what they are and how they perform","author":"Alexander Merker","date":"9. March 2020","format":false,"excerpt":"An overview on stream processing, common frameworks as well as some insights on performance based on benchmarking data","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/storm_arch.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/storm_arch.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/storm_arch.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":5562,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/03\/11\/the-renaissance-of-column-stores\/","url_meta":{"origin":29005,"position":3},"title":"The Renaissance of column stores","author":"Raimondo Lazzara","date":"11. March 2019","format":false,"excerpt":"While attending the lecture \u2018Ultra Large Scale Systems\u2019 I got introduced into the quite intriguing topic of high-performance data storage systems. One subject which caught my special attention were column-oriented database management systems (column stores) about which I decided to give a presentation. Being quite lengthy and intricate, I realized\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/03\/Database-Cracking-Example.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/03\/Database-Cracking-Example.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/03\/Database-Cracking-Example.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/03\/Database-Cracking-Example.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":23138,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2022\/03\/31\/an-overview-of-large-scale-deep-learning\/","url_meta":{"origin":29005,"position":4},"title":"An overview of Large Scale Deep Learning","author":"mk374","date":"31. March 2022","format":false,"excerpt":"article by Annika Strau\u00df (as426) and Maximilian Kaiser (mk374) Introduction Improving Deep Learning with ULS for superior model training Single Instance Single Device (SISD) Multi Instance Single Device (MISD) Multi Instance Multi Device (MIMD) Single Instance Multi Device (SIMD) Model parallelism Data parallelism Improving ULS and its components with the\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/03\/quantum-physics-g1357f44f5_1920-Kopie.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/03\/quantum-physics-g1357f44f5_1920-Kopie.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/03\/quantum-physics-g1357f44f5_1920-Kopie.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/03\/quantum-physics-g1357f44f5_1920-Kopie.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/03\/quantum-physics-g1357f44f5_1920-Kopie.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/03\/quantum-physics-g1357f44f5_1920-Kopie.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":4190,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2018\/08\/31\/yourtube-a-simple-video-platform-in-you-personal-amazon-cloud\/","url_meta":{"origin":29005,"position":5},"title":"YourTube &#8211; A simple video platform in you personal amazon cloud","author":"nk078","date":"31. August 2018","format":false,"excerpt":"During the Dev4Cloud Levture i created a simple static webpage that uses Amazons S3 service for Hosting and video storage and amazons cognito for user authentification and role managemant. Design considerations. The platform was designed with simplicity in mind and there for i decided to go with as few services\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":1200,"user_id":1315,"is_guest":0,"slug":"tilman_zorn","display_name":"Tilman Zorn","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/c25410723d92bf712a6311507e7614dace4a97f48bfdd71786ecb4547b516f57?s=96&d=mm&r=g","author_category":"","user_url":"","last_name":"Zorn","first_name":"Tilman","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/29005","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/users\/1315"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=29005"}],"version-history":[{"count":20,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/29005\/revisions"}],"predecessor-version":[{"id":29053,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/29005\/revisions\/29053"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=29005"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=29005"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=29005"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=29005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}