{"id":29131,"date":"2026-08-01T00:27:38","date_gmt":"2026-07-31T22:27:38","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=29131"},"modified":"2026-08-01T00:28:32","modified_gmt":"2026-07-31T22:28:32","slug":"suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/","title":{"rendered":"Suchfunktionalit\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\u00fcr Ultra Large Scale Systems"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Georg B\u00fchler, Dominik Seitz<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Abstract<\/strong>: Ride-Hailing-Plattformen wie Uber m\u00fcssen zwei grundlegende Suchprobleme l\u00f6sen, damit Fahrgast und Fahrer zusammenfinden. Zum einen muss der Fahrgast sein gew\u00fcnschtes Ziel \u00fcber eine Texteingabe finden k\u00f6nnen, zum anderen muss aus vielen verf\u00fcgbaren Fahrern der passende f\u00fcr die Fahrt ermittelt werden. Diese Arbeit untersucht m\u00f6gliche technische Umsetzungen f\u00fcr beide Probleme, mit Uber als praktischem Referenzbeispiel. F\u00fcr die Destinationssuche wird gezeigt, dass eine lexikalische Suche \u00fcber einen invertierten Index, erg\u00e4nzt um Tippfehlertoleranz und Relevanz-Ranking, gut zu Standortdaten passt. Nach einem Vergleich von Elasticsearch, OpenSearch und Vespa f\u00e4llt die Wahl auf OpenSearch, unter anderem wegen des offenen Lizenzmodells. F\u00fcr das Rider-Driver-Matching wird eine Architektur vorgestellt, die Kafka als zentrale Datenquelle nutzt, Fahrerpositionen in Redis vorh\u00e4lt und rohe GPS-Koordinaten mithilfe von H3 sowie Map Matching zu verl\u00e4sslichen Standortdaten generalisiert. Durch die Vorberechnung von Angebot, Nachfrage und ETA im Feature Store sowie durch Batch Matching, statt einfach den n\u00e4chstgelegenen Fahrer auszuw\u00e4hlen, wird die Wartezeit f\u00fcr alle Beteiligten m\u00f6glichst gering gehalten. Am Ende steht eine m\u00f6gliche Architektur f\u00fcr beide Suchprobleme, die sowohl den funktionalen als auch den nicht-funktionalen Anforderungen einer solchen Plattform gerecht wird.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>I. EINLEITUNG<\/strong> <\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Als digitale Weiterentwicklung des klassischen Taxigewerbes haben sich in den letzten Jahren Ride-Hailing-Plattformen etabliert, die Fahrten zwischen Fahrg\u00e4sten und Fahrern vermitteln. Die Zahl der Nutzer solcher Plattformen soll bis 2030 weltweit auf \u00fcber 2,3 Milliarden steigen [1]. Die vorliegende Arbeit betrachtet die Suchfunktionalit\u00e4t einer solchen Plattform. Dabei werden zwei grundlegende Suchprobleme betrachtet: die Destinationssuche und das Rider-Driver-Matching. Hinsichtlich der Destinationssuche muss der Fahrgast in der Lage sein, das gew\u00fcnschte Fahrtziel \u00fcber eine Texteingabe zu finden, was Herausforderungen hinsichtlich relevanter und performanter Suchergebnisse mit sich bringt. Beim Rider-Driver-Matching muss aus einer Menge verf\u00fcgbarer Fahrer derjenige ermittelt werden, der f\u00fcr die Fahrt am besten geeignet ist, was Herausforderungen hinsichtlich r\u00e4umlicher N\u00e4he sowie weiterer Faktoren wie Wartezeit oder Auslastung mit sich bringt. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr beide Suchprobleme werden in dieser Arbeit m\u00f6gliche technische Umsetzungen erarbeitet. Als Referenz dienen dabei bestehende Plattformen, insbesondere Uber, dessen Suchinfrastruktur sich \u00fcber die Jahre mehrfach gewandelt hat und damit R\u00fcckschl\u00fcsse auf praxistaugliche L\u00f6sungsans\u00e4tze zul\u00e4sst. Dabei wird von einem gro\u00dfen, geografisch verteilten System ausgegangen, wie es f\u00fcr den globalen Betrieb einer Ride-Hailing-Plattform notwendig ist. Ziel ist es, f\u00fcr beide Suchprobleme eine geeignete Architektur zu konzipieren, die den Anforderungen einer solchen Plattform gerecht wird. Im Folgenden werden zun\u00e4chst die f\u00fcr die Destinationssuche relevanten Konzepte und Technologien vorgestellt. Darauf aufbauend werden konkrete Tools analysiert und abschlie\u00dfend zu einer m\u00f6glichen Architektur zusammengef\u00fchrt. Anschlie\u00dfend wird auf das Rider-Driver-Matching eingegangen. Auch hier werden zun\u00e4chst die ben\u00f6tigten Komponenten betrachtet, bevor daraus eine resultierende Architektur abgeleitet wird.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>II. DESTINATIONSSUCHE<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A. Anforderungen an die Destinationssuche<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> Im Detail hat die Destinationssuche einer Ride-Hailing-Plattform die Aufgabe, aus der textuellen Eingabe des Kunden die gew\u00fcnschten Abhol- und Zielstandorte zu bestimmen. Bereits w\u00e4hrend der Eingabe sollen dem Kunden passende Vorschl\u00e4ge angezeigt werden, sodass im Idealfall schon wenige eingegebene Buchstaben gen\u00fcgen, um den gew\u00fcnschten Standort zu finden. Die final ausgew\u00e4hlten Standorte legen dabei nicht nur fest, von wo nach wo die Fahrt gehen soll, sondern bilden auch die Grundlage f\u00fcr das nachgelagerte Rider-Driver-Matching. Aus diesem Szenario lassen sich zusammen mit der Voraussetzung eines gro\u00dfen und geografisch verteilten Systems die folgenden Anforderungen ableiten. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Funktionale Anforderungen<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Eingabetoleranz: Die Suche muss tolerant gegen\u00fcber Tippfehlern, Abk\u00fcrzungen und Synonymen sein.<\/li>\n\n\n\n<li>Suchvorschl\u00e4ge: Die Suche muss bereits w\u00e4hrend der Eingabe passende Vorschl\u00e4ge liefern.<\/li>\n\n\n\n<li>Relevanz: Die Suchvorschl\u00e4ge\/-ergebnisse m\u00fcssen m\u00f6glichst relevant sein. Dabei muss sowohl die textuelle \u00dcbereinstimmung als auch Kontextfaktoren wie geografische N\u00e4he oder Nutzerdaten ber\u00fccksichtigt werden.<\/li>\n\n\n\n<li>Vorausbuchungen: Da Vorausbuchungen m\u00f6glich sein m\u00fcssen, d\u00fcrfen die Ergebnisse nicht ausschlie\u00dflich auf nahe Standorte begrenzt sein.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Nicht funktionale Anforderungen<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Performance: Suchanfragen m\u00fcssen mit niedriger Latenz beantwortet werden, um Suchvorschl\u00e4ge ohne sp\u00fcrbare Verz\u00f6gerung zu liefern.<\/li>\n\n\n\n<li>Aktualit\u00e4t: Standortdaten \u00e4ndern sich selten, sollten aber \u00e4nderbar sein. \u00c4nderungen m\u00fcssen nicht sofort, sondern innerhalb kurzer Zeit sichtbar werden.<\/li>\n\n\n\n<li>Geografische Verteilung: Die Suche muss global verteilt nutzbar sein, sodass Nutzer unabh\u00e4ngig von ihrem Standort mit geringer Latenz suchen k\u00f6nnen.<\/li>\n\n\n\n<li>Verf\u00fcgbarkeit: Die Suche muss hochverf\u00fcgbar sein, da die Funktionalit\u00e4t der Plattform auf die Destinationssuche angewiesen ist.<\/li>\n\n\n\n<li>Skalierbarkeit: Das System muss skalierbar sein, um bei Bedarf auf wachsendes Anfragevolumen angepasst werden zu k\u00f6nnen.<\/li>\n\n\n\n<li>Betreibbarkeit: Das System soll sich auf ein aktives \u00d6kosystem mit guter Dokumentation und Community-Support st\u00fctzen k\u00f6nnen, um den langfristigen Betrieb zu erleichtern.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">B. Grundlegende Suchkonzepte und -technologien<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bei einer geringen Anzahl an Dokumenten kann eine Suche direkt und sequenziell \u00fcber den gesamten Datenbestand erfolgen. F\u00fcr kleinere Dokumentenmengen ist das mit der heutigen Rechenleistung durchaus praktikabel. Mit zunehmender Gr\u00f6\u00dfe wird dieser Ansatz jedoch ineffizient, da f\u00fcr jede Suchanfrage alle Dokumente durchsucht werden m\u00fcssen und die Suchzeit dadurch linear mit der Anzahl der Dokumente w\u00e4chst. Au\u00dferdem erschwert dieses Verfahren den Einsatz komplexerer Suchoperationen, wie beispielsweise einer Relevanzbewertung der Suchergebnisse [2]. In der Praxis haben sich zwei Suchverfahren etabliert, darunter die lexikalische Suche auf Basis invertierter Indizes und die semantische Suche.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lexikalische Suche \u00fcber invertierte Indizes<\/strong> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eine effiziente Umsetzung der lexikalischen Suche erfolgt mittels invertiertem Index. Dazu wird im Vorhinein jeder einzelne Term der Dokumente auf eine Liste der Dokumente abgebildet. F\u00fcr die Suche wird dann, anstatt bei jeder Anfrage alle Dokumente nach dem Term der Suchanfrage zu durchsuchen, ein Lookup des Terms im invertierten Index durchgef\u00fchrt. Das Ergebnis enth\u00e4lt dann alle Dokumente, die diesen Term enthalten. Die Suchgeschwindigkeit bleibt dabei auch bei gro\u00dfen Datenmengen weitgehend erhalten [3]. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die beschriebene Funktionalit\u00e4t des invertierten Index erm\u00f6glicht so in der einfachsten Form zun\u00e4chst nur exakte Keyword-Treffer. Bei Schreibfehlern oder alternativen Begriffen f\u00fchrt diese Suche zu keinen Treffern. Wie in den Anforderungen definiert wurde, muss die Suche jedoch weitestgehend dagegen tolerant sein. Verschiedene Vor-Verarbeitungsschritte m\u00fcssen daher zus\u00e4tzlich eingesetzt werden, um dies zu erf\u00fcllen. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sowohl beim Erstellen des Indexes als auch bei der Suchanfrage werden die Texte zun\u00e4chst mit einem Tokenizer in einzelne Tokens zerlegt. Diese Tokens sind meist einzelne W\u00f6rter [3]. Diese Tokens werden dann gewisserma\u00dfen normalisiert, indem sie in Kleinschreibung umgewandelt werden und Sonderzeichen aufgel\u00f6st werden [3] [4]. Um auch Suchergebnisse zu erhalten trotz Tippfehlern oder leicht abweichender Schreibweisen, lassen sich Fuzzy-Search-Algorithmen einsetzen. Diese erkennen \u00c4hnlichkeiten zwischen Suchbegriffen und den indexierten Termen, beispielsweise durch die Berechnung der Levenshtein-Distanz. Dabei wird die minimale Anzahl an Einf\u00fcgungen, L\u00f6schungen oder Ersetzungen bestimmt, die n\u00f6tig sind, um eine Zeichenkette in eine andere umzuwandeln [5]. F\u00fcr synonyme Begriffe k\u00f6nnen Synonym-Filter eingesetzt werden, die bedeutungsgleiche Worte zu dem eingegebenen Suchbegriff in den Such-Stream hinzuf\u00fcgen oder den initialen Suchbegriff ersetzen [6]. Dazu muss eine Synonymliste erstellt werden, hierf\u00fcr lassen sich bereits existierende Listen wie beispielsweise WordNet verwenden, die dann gegebenenfalls erweitert werden k\u00f6nnen [7]. Diese Mechanismen erweitern den Suchraum \u00fcber exakte Treffer hinaus und erf\u00fcllen dabei die zuvor beschriebene Anforderung hinsichtlich Toleranz gegen\u00fcber Tippfehlern, Abk\u00fcrzungen und Synonymen. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nachdem die Vor-Verarbeitungsschritte und die Suche selbst durchgef\u00fchrt wurden, lassen sich die zur\u00fcckgelieferten Ergebnisse auf textueller Ebene noch nach ihrer Relevanz sortieren. Ein Beispiel hierf\u00fcr ist BM25, das f\u00fcr jedes Dokument einen Relevanz-Score in Bezug auf die Suchanfrage berechnet. Dieser Score basiert auf drei Faktoren: der Termh\u00e4ufigkeit (wie oft ein Suchbegriff im Dokument vorkommt), der inversen Dokumenth\u00e4ufigkeit (seltene Begriffe gelten als aussagekr\u00e4ftiger als h\u00e4ufig vorkommende) sowie einer Normalisierung bez\u00fcglich der Dokumentl\u00e4nge, damit l\u00e4ngere Dokumente nicht allein aufgrund ihrer L\u00e4nge bevorzugt werden [8]. Damit bildet BM25 eine m\u00f6gliche textuelle Grundlage f\u00fcr Relevanz von Suchergebnissen. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der invertierte Index sowie die beschriebenen Vor-Verarbeitungsschritte und das textuelle Ranking m\u00fcssen nicht von Grund auf selbst implementiert werden. Stattdessen l\u00e4sst sich Apache Lucene verwenden, das praktisch als Industriestandard daf\u00fcr gilt [9]. F\u00fcr die Vor-Verarbeitungsschritte und das textuelle Ranking, beispielsweise BM25, lassen sich entsprechende Funktionen der Library nutzen. Der invertierte Index selbst wird als immutable erstellt, ein einmal geschriebener Index kann also nicht mehr ver\u00e4ndert werden. Dies erm\u00f6glicht, dass mehrere Threads gleichzeitig lesen k\u00f6nnen, ohne dass Locking erforderlich ist. Damit trotzdem neue Dokumente aufgenommen werden k\u00f6nnen, l\u00f6st Lucene dies \u00fcber sogenannte Segmente. F\u00fcr neue Dokumente wird dann jeweils ein eigenes Segment angelegt, das selbst wieder ein invertierter Index ist. Alle Segmente zusammen ergeben den vollst\u00e4ndigen Index [10]. Ein neues Dokument gelangt dabei zun\u00e4chst in einen In-Memory-Buffer, wird anschlie\u00dfend \u00fcber einen Refresh als durchsuchbares Segment im Filesystem-Cache verf\u00fcgbar gemacht und schlie\u00dflich \u00fcber einen Flush persistent auf die Disk geschrieben [11]. Mit der Zeit entstehen durch dieses Verfahren viele kleine Segmente sowie eventuell einige f\u00fcr die L\u00f6schung markierte Eintr\u00e4ge. Deshalb f\u00fchrt Lucene periodisch ein Merging durch. Dabei werden zum einen die f\u00fcr die L\u00f6schung markierten Dokumente endg\u00fcltig entfernt, wodurch Speicher freigegeben wird. Zum anderen werden viele kleine Segmente, die sonst zu schlechterer Suchperformance f\u00fchren k\u00f6nnen, zu wenigen, m\u00f6glichst gleich gro\u00dfen Segmenten zusammengef\u00fchrt [12].<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Semantische Suche<\/strong> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die lexikalische Suche ermittelt Ergebnisse auf der textuellen Ebene. Durch die zuvor genannten zus\u00e4tzlichen Methoden l\u00e4sst sich diese um Tippfehler-Toleranz sowie zus\u00e4tzliches Suchen nach Synonymen erweitern, statt nur Terme exakt zu vergleichen. Die semantische Suche hingegen ermittelt bedeutungsnahe Ergebnisse zu der Suchanfrage. Dabei werden W\u00f6rter oder ganze Dokumente in numerische Vektoren umgewandelt, welche die Bedeutung der Inhalte abbilden. Inhalte mit \u00e4hnlicher Bedeutung liegen im Vektorraum n\u00e4her beieinander und k\u00f6nnen dadurch gefunden werden, auch wenn unterschiedliche Begriffe verwendet werden [13]. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr die Suche wird der Vektorraum nach Vektoren durchsucht, die r\u00e4umlich nahe dem Vektor liegen, der die Suchanfrage repr\u00e4sentiert. Die exakte Suche nach den n\u00e4chsten Vektoren wird bei gro\u00dfen Datenmengen jedoch ineffizient, da die \u00c4hnlichkeit mit allen gespeicherten Vektoren berechnet werden m\u00fcsste. Deshalb kommen f\u00fcr die Suche Approximate-Nearest-Neighbor-Verfahren wie HNSW (Hierarchical Navigable Small World) zum Einsatz. Diese suchen nicht nach einer exakten, sondern nach einer m\u00f6glichst guten Ann\u00e4herung der n\u00e4chsten Vektoren, wodurch sich der Berechnungsaufwand deutlich reduzieren l\u00e4sst [13]. F\u00fcr die Destinationssuche ist semantische Suche jedoch von geringerer Relevanz. Standort- und Adressbezeichnungen sind meist eindeutige Eigennamen ohne bedeutungsnahe Alternativen. Die lexikalische Suche gepaart mit einem Synonym-Filter ist f\u00fcr den Anwendungsfall demnach besser geeignet. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Erg\u00e4nzende Bausteine der Suche<\/strong> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein weiterer wichtiger Faktor f\u00fcr die Bestimmung der Relevanz von Ergebnissen sind Kontextfaktoren wie geographische N\u00e4he, Nutzerdaten oder auch die Uhrzeit. Hierf\u00fcr l\u00e4sst sich ein Machine Learning Modell einsetzen, das Suchergebnisse anhand dieser zus\u00e4tzlichen Faktoren bewertet und darauf basierend sortiert. Beispielsweise kann ein Learning-to-Rank-Modell verwendet werden, das mithilfe von Machine-Learning-Verfahren verschiedene Merkmale ber\u00fccksichtigt, um die erwartete Relevanz von Suchergebnissen zu bestimmen und diese entsprechend zu ordnen [14]. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr Standorte, f\u00fcr die keine zugeh\u00f6rigen Koordinaten vorliegen, kann Geocoding verwendet werden, um aus der Adresse in Textform geografische Koordinaten zu ermitteln. Hierf\u00fcr gibt es verschiedene APIs, wie beispielsweise die Google Geocoding API [15]. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr die technische Umsetzung einer Autovervollst\u00e4ndigung k\u00f6nnen verschiedene Ans\u00e4tze eingesetzt werden. Ein Ansatz besteht darin, die m\u00f6glichen Vervollst\u00e4ndigungen separat in einer eigenen Datenstruktur zu indexieren. Optional l\u00e4sst sich dabei eine Relevanz vergeben, beispielsweise basierend darauf, wie h\u00e4ufig ein Begriff gesucht wird. Bei einer Eingabe werden die passendsten Vervollst\u00e4ndigungen direkt aus dieser Datenstruktur zur\u00fcckgegeben, ohne dass dabei auf den regul\u00e4ren invertierten Index zugegriffen wird. Ein weiterer Ansatz ist die Indexierung von Wortpr\u00e4fixen. Hierbei werden bereits beim Indexieren Wortpr\u00e4fixe als eigene Tokens im regul\u00e4ren invertierten Index abgelegt, sodass die Autovervollst\u00e4ndigung direkt dar\u00fcber l\u00e4uft [16]. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr die Standortdaten selbst wird eine Datenquelle ben\u00f6tigt, aus der Orte mit ihren zugeh\u00f6rigen Informationen wie Namen, Adressen und Koordinaten stammen. Hierf\u00fcr k\u00f6nnen externe Provider genutzt werden, die eine Datenbank mit Orten sowie eine Schnittstelle zur Abfrage dieser Orte bereitstellen. Ein Beispiel hierf\u00fcr ist die Places API von Google [17].<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> C. Verteilte Suchtechnologien<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die zuvor beschriebenen Suchtechnologien liefern bereits die Grundlagen daf\u00fcr, die funktionalen Anforderungen zu erf\u00fcllen. Bez\u00fcglich der nicht-funktionalen Anforderungen, besonders Skalierung und geografischer Verteilung, zeigen die beschriebenen Technologien noch keine m\u00f6gliche Umsetzung. Apache Lucene selbst bietet keine M\u00f6glichkeit die Suche verteilt zu betreiben. Die Verteilung von Daten \u00fcber mehrere Knoten hinweg sowie deren Koordination ist damit nicht Teil von Lucene selbst und m\u00fcsste manuell drumherum implementiert werden [18]. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Im Folgenden werden daher Suchtechnologien untersucht, die diese Funktionalit\u00e4ten bereits mitbringen, sodass sie nicht von Grund auf selbst implementiert werden m\u00fcssen. Daf\u00fcr wurden Elasticsearch (ES) und OpenSearch (OS) untersucht, da diese praktisch die Industriestandards darstellen. OpenSearch ist ein Fork von Elasticsearch, den AWS 2021 erstellte, nachdem Elastic auf ein restriktiveres Lizenzmodell wechselte, und wird seitdem unter der Apache License 2.0 weitergef\u00fchrt [19]. Erg\u00e4nzend wurde Vespa hinzugezogen, das f\u00fcr seine F\u00e4higkeiten in der semantischen Suche bekannt ist, aber auch lexikalische Suche unterst\u00fctzt [20]. Der Vergleich betrachtet dazu Query-Speed, Datenaktualit\u00e4t, Skalierung, Replikation, geografische Distribution, Ranking mit Kontextfaktoren, Autovervollst\u00e4ndigung sowie das jeweilige \u00d6kosystem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Query Speed<\/strong> F\u00fcr den direkten Vergleich zwischen OS und ES liegen Benchmark-Daten von Trail of Bits vor, einem auf Cybersicherheit spezialisierten Unternehmen, das im Auftrag von AWS einen Vergleich zwischen beiden Systemen durchgef\u00fchrt hat [21]. Bei der f\u00fcr die Destinationssuche relevantesten Operation, einfachen Term-Abfragen, zeigt sich praktisch kein Unterschied zwischen beiden Systemen. F\u00fcr Vespa existieren ausschlie\u00dflich herstellereigene Benchmark-Daten, die einen deutlichen Geschwindigkeitsvorteil zu ES bei lexikalischer Suche aufzeigen [22]. Diese Zahlen sind jedoch nicht unabh\u00e4ngig verifiziert und daher mit Vorsicht zu betrachten. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Datenaktualit\u00e4t<\/strong> Da sowohl ES als auch OS auf Apache Lucene aufbauen, ist die Datenaktualit\u00e4t durch das Refresh-Intervall von Lucene begrenzt. Demnach ist Near-Real-Time die maximal erreichbare Aktualit\u00e4t [11]. Auch bei Vespa werden Dokumente nicht sofort, sondern erst nach einem periodischen Flush durchsuchbar, \u00e4hnlich wie bei Lucene, auch wenn Vespa nicht auf Lucene basiert [23]. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Skalierung<\/strong> Bei der Skalierung folgen ES und OS demselben Prinzip: Beide setzen auf statisches Sharding, das hei\u00dft, die Anzahl der Shards wird bereits beim Erstellen des Index festgelegt [24] [25]. M\u00fcssen weitere Shards hinzuf\u00fcgt werden, muss der Index neu erstellt werden, da die Anzahl der Shards f\u00fcr einen existierenden Index nicht mehr angepasst werden k\u00f6nnen [26]. Vespa hingegen setzt auf dynamisches Sharding, bei dem keine feste Zahl vorgegeben werden muss, sondern sich die Verteilung automatisch nach Bedarf anpasst [27]. Das reduziert den administrativen Aufwand, geht jedoch mit geringerer Kontrolle \u00fcber die konkrete Datenverteilung einher. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Replikation<\/strong> ES und OS folgen dem Prinzip der Active-Passive-Replikation: \u00c4nderungen werden zun\u00e4chst auf einem Prim\u00e4rshard angewendet und dann an die Replicas verteilt [28]. Vespa schreibt stattdessen synchron auf alle verf\u00fcgbaren Replicas parallel und wartet auf deren Best\u00e4tigung, ohne festen Prim\u00e4rknoten [29]. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Geografische Distribution<\/strong> ES und OS bieten mit Cross-Cluster Replication (CCR) ein dediziertes Feature f\u00fcr den Betrieb \u00fcber mehrere Rechenzentren hinweg. Mehrere unabh\u00e4ngige Cluster werden dabei nach dem Active-Passive-Prinzip \u00fcber Regionen hinweg repliziert [30] [31]. Bei Vespa gibt es kein \u00c4quivalent zu CCR. Knoten m\u00fcssten stattdessen innerhalb einer einzigen, zusammenh\u00e4ngenden Einheit geografisch verteilt werden [29]. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ranking mit Kontextfaktoren<\/strong> Bei ES und OS kann Learning to Rank \u00fcber ein separates Plugin eingesetzt werden [32] [33]. Bei Vespa ist Ranking hingegen ein natives Kernfeature. Beliebige Kontextsignale lassen sich direkt in die Ranking-Expression einbinden, ohne zus\u00e4tzliches Plugin [34]. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Autovervollst\u00e4ndigung<\/strong> ES und OS unterst\u00fctzen beide zuvor beschriebenen Ans\u00e4tze. Zum einen das Plugin Completion Suggester, das Vervollst\u00e4ndigungen in einer eigenen, separaten Datenstruktur indexiert. Zum anderen die Option, Wortpr\u00e4fixe direkt im regul\u00e4ren invertierten Index abzulegen und somit auf die normale Suchinfrastruktur zur\u00fcckzugreifen [16] [35]. Vespa bietet daf\u00fcr keine fertige L\u00f6sung, eine Pr\u00e4fixsuche m\u00fcsste selbst umgesetzt werden [36]. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00d6kosystem<\/strong> ES und OS verf\u00fcgen beide \u00fcber eine gro\u00dfe Community und ein breites Angebot an Zusatzwerkzeugen. OpenSearch ist dazu vollst\u00e4ndig quelloffen. Vespa hat demgegen\u00fcber eine deutlich kleinere Community und gilt als weniger etabliert. Hinsichtlich verf\u00fcgbarer Ressourcen sind ES und OS damit im Vorteil.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D. Praxisbeispiel: Uber<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Blick auf Uber als gro\u00dfe Ride-Hailing-Plattform lohnt sich, da sich deren Suchinfrastruktur \u00fcber die Jahre mehrfach gewandelt und weiterentwickelt hat. Uber setzte vor 2019 auf Elasticsearch, stellte jedoch fest, dass die Near-Real-Time-Aktualit\u00e4t f\u00fcr bestimmte Anwendungsf\u00e4lle nicht ausreichte [37]. F\u00fcr die Destinationssuche selbst erscheint das zun\u00e4chst weniger naheliegend, da sich Standortdaten selten \u00e4ndern und nicht unbedingt Echtzeit aktuell sein m\u00fcssen. Es d\u00fcrfte sich also eher um einen anderen Bereich von Uber gehandelt haben, der auch Teil derselben Suchinfrastruktur ist. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Als Reaktion entwickelte Uber mit SIA (2019 bis 2024) eine eigene, auf Apache Lucene basierende L\u00f6sung mit Echtzeit-F\u00e4higkeiten. Der Kern war ein dreischichtiger Index: ein Live-Index, der neue Daten sofort im RAM durchsuchbar macht, ein Snapshot-Index, der den Live-Index periodisch (alle 30 Minuten) auf die Disk schreibt, sowie ein Base-Index, in dem die Snapshots w\u00f6chentlich zusammengef\u00fchrt werden. Erg\u00e4nzend f\u00fchrte Uber gRPC statt REST f\u00fcr effizientere Service-Kommunikation ein und stellte auf eine Kafka-basierte Pull-Ingestion um, wodurch Backpressure-Handling erm\u00f6glicht wird. Zus\u00e4tzlich implementierte Uber Active-Active-Cross-Cluster-Replikation statt der zuvor \u00fcblichen Active-Passive-Variante [37]. Bei Active-Active k\u00f6nnen, im Unterschied zum Leader-Follower-Prinzip von OS und ES, bei dem nur der Leader-Cluster Schreibvorg\u00e4nge annimmt, alle Regionen \u00c4nderungen annehmen. Eine \u00c4nderung wird dabei zun\u00e4chst in das lokale Kafka der jeweiligen Region geschrieben, das sie anschlie\u00dfend an die Kafka-Instanzen aller anderen Regionen verteilt, wo sie wiederum von den dortigen Suchclustern konsumiert wird [38]. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SIA erwies sich jedoch langfristig als problematisch. Die Eigenentwicklung war wartungsintensiv, und neue Lucene-Features lie\u00dfen sich nur schwer integrieren. Zudem zeigte sich, dass die meisten tats\u00e4chlichen Anwendungsf\u00e4lle gar kein Echtzeit-Indexing ben\u00f6tigten und mit Near-Real-Time-Aktualit\u00e4t ausreichend bedient waren. Da eine Eigenentwicklung zudem kaum mit der schnellen Innovationsgeschwindigkeit im Such- und KI-Bereich mithalten konnte, entschied sich Uber 2024 im Rahmen von Project Sunrise f\u00fcr den Umstieg auf OpenSearch, unter anderem auch, um direkt an dessen Weiterentwicklung mitzuwirken. Bew\u00e4hrte Konzepte aus SIA wie die gRPC-Kommunikation und die Pull-based-Ingestion wurden dabei zu OpenSearch \u00fcbernommen [37]. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Entwicklung bei Uber zeigt, dass eine Eigenentwicklung schwer zu warten ist und nur schwer mit der Innovationsgeschwindigkeit etablierter Systeme mithalten kann. Uber hat sich letztlich wegen des Open-Source-Gedankens f\u00fcr OS statt ES entschieden, um dort eigene Erkenntnisse einzubringen [37].<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> E. Technologiewahl<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> Basierend auf der vorangegangenen Betrachtung der Tools sowie dem Praxisbeispiel Uber f\u00e4llt die Wahl auf OpenSearch. Zwischen ES und OS selbst gibt es kaum Unterschiede: Bei Query-Speed f\u00fcr einfache Term-Abfragen, dem f\u00fcr die Destinationssuche relevantesten Fall, zeigt sich praktisch kein Unterschied. Auch bei Datenaktualit\u00e4t, Skalierung und Replikation folgen beide demselben architektonischen Prinzip, da OS urspr\u00fcnglich ein Fork von ES ist. Den Ausschlag gibt daher das Lizenzmodell: OpenSearch steht vollst\u00e4ndig unter der offenen Apache License 2.0, w\u00e4hrend neuere Elasticsearch-Versionen unter der restriktiveren Elastic License stehen, ein Aspekt, den auch Uber als Grund f\u00fcr die Wahl von OpenSearch statt Elasticsearch anf\u00fchrt. Gegen Vespa spricht vor allem, dass es als noch nicht so etabliertes Tool wie ES und OS ein gewisses Risiko birgt, da ES und OS bereits vielfach in gro\u00dfen Systemen im praktischen Einsatz bewiesen haben, dass sie zuverl\u00e4ssig funktionieren. Zudem hat Vespa eine deutlich kleinere Community und bietet hinsichtlich Query-Speed und Datenaktualit\u00e4t keinen belegten Vorteil gegen\u00fcber OpenSearch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> F. Architektur<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr eine konkrete m\u00f6gliche Umsetzung besteht die Architektur aus f\u00fcnf zentralen Komponenten: dem Search Service als zentrale orchestrierende Komponente, dem OpenSearch-Cluster f\u00fcr die eigentliche Suche, einem User Service, der Informationen zu Nutzern abruft, einem Standortdaten-Provider als Datenquelle sowie Kafka als Puffer zwischen Datenquelle und Suchcluster. Dabei wird das Setup pro Region repliziert, sodass Nutzer weltweit mit geringer Latenz auf ein nahegelegenes Cluster zugreifen k\u00f6nnen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> F\u00fcr die Aktualisierung der Standortdaten wird sich an der Umsetzung von Uber orientiert. Der Standortdaten-Provider liefert initial die Daten zur Erstellung des Index sowie im laufenden Betrieb \u00c4nderungen an bestehenden Standorten. Diese \u00c4nderungen k\u00f6nnen dabei in jeder Region eingetragen werden und gelangen zun\u00e4chst in ein lokales Kafka, das sie an die Kafka-Instanzen aller anderen Regionen verteilt. Damit wird das Active-Active-Prinzip angewendet: Es kann aus jeder Region geschrieben werden, statt wie beim \u00fcblichen OpenSearch-Leader-Follower-Prinzip nur in einer prim\u00e4ren Region. Jedes regionale OpenSearch-Cluster konsumiert die \u00c4nderungen anschlie\u00dfend \u00fcber die Pull-based-Funktionalit\u00e4t. Innerhalb des OpenSearch-Clusters kommen mehrere Komponenten zum Einsatz. F\u00fcr die Autovervollst\u00e4ndigung werden zwei Ans\u00e4tze kombiniert eingesetzt. Der Completion Suggester speichert h\u00e4ufig gesuchte Ergebnisse zu den entsprechenden Pr\u00e4fixen in einer eigenen, schnellen In-Memory-Datenstruktur. \u00dcber die Geo-Context-Funktion wird dabei auch der geografische Bereich der Eintr\u00e4ge gespeichert, wodurch sich schnell popul\u00e4re Ergebnisse aus der N\u00e4he abfragen lassen. Ein separates Caching ist dadurch nicht erforderlich, da der Completion Suggester bereits selbst als schnelle, In-Memory-Datenstruktur f\u00fcr die h\u00e4ufigsten Anfragen fungiert. Erg\u00e4nzend wird der Index mit der Option erstellt, zus\u00e4tzliche Wortpr\u00e4fixe zu speichern, damit auch der regul\u00e4re invertierte Index f\u00fcr die Suche noch unvollst\u00e4ndiger Anfragen verwendet werden kann. Des Weiteren kommt das Learning-to-Rank-Plugin zum Einsatz, um Ergebnisse basierend auf Kontextfaktoren zu bewerten. Der beschriebene Aufbau ist in Abbildung 1 dargestellt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"494\" height=\"707\" data-attachment-id=\"29139\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/grafik-29\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-5.png\" data-orig-size=\"494,707\" 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-5.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-5.png\" alt=\"\" class=\"wp-image-29139\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-5.png 494w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-5-210x300.png 210w\" sizes=\"auto, (max-width: 494px) 100vw, 494px\" \/><\/a><figcaption class=\"wp-element-caption\">Abbildung 1: Architektur der Destinationssuche innerhalb einer Region<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Eine Anfrage l\u00e4uft dann wie folgt ab. W\u00e4hrend der Nutzer seine Anfrage eingibt, wird bereits mit den ersten eingegebenen Buchstaben eine Anfrage gesendet. Dieser Anfrage werden zus\u00e4tzlich die Nutzerkennung und optional der aktuelle Standort mitgegeben. Die Anfrage wird \u00fcber das API Gateway an den Search Service \u00fcbermittelt. Dieser fragt zum einen den User Service nach Informationen zu diesem Nutzer ab und leitet zum anderen die Anfrage zusammen mit dem Standort an das OpenSearch-Cluster weiter. Innerhalb des OpenSearch-Clusters werden dabei parallel der Completion Suggester sowie der invertierte Index angefragt. Liefert der Completion Suggester popul\u00e4re Ergebnisse, die mit dem geografischen Standort vereinbar sind, werden diese zur\u00fcckgeliefert. Liefert der Completion Suggester keine Ergebnisse, wird auf das Ergebnis der bereits parallel angefragten Suche \u00fcber den invertierten Index gewartet. Die Ergebnisse durchlaufen anschlie\u00dfend das Ranking des Learning-to-Rank-Plugins, das sie basierend auf dem mitgeschickten Standort sowie weiteren Kontextfaktoren bewertet und die relevantesten Ergebnisse zur\u00fcckliefert. Der Search Service f\u00fcgt den Ergebnissen gegebenenfalls Standorte aus der zuvor vom User Service abgefragten Nutzerhistorie hinzu, sofern diese mit der Suchanfrage \u00fcbereinstimmen. Die sortierten Ergebnisse werden abschlie\u00dfend \u00fcber das API Gateway an den Nutzer zur\u00fcckgeliefert.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>III. RIDER-DRIVER MATCHING<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Im vorherigen Schritt wurde der gew\u00fcnschte Zielort des Nutzers erschlossen. Die zweite Hauptaufgabe der &#8220;Uber Search Plattform&#8221; besteht darin, den bestm\u00f6glichen Fahrer f\u00fcr den Kunden zu finden, damit der Kunde einen Auftrag aufgeben kann. Dieser Schritt wird &#8220;Rider-Driver Matching&#8221; genannt. Das Architektur-Diagramm in Abbildung 2 zeigt s\u00e4mtliche ben\u00f6tigten Komponenten, die f\u00fcr diese Funktionalit\u00e4t ben\u00f6tigt werden. In den folgenden Unterkapiteln werden die einzelnen Architekturentscheidungen aus dem Diagramm Schritt f\u00fcr Schritt erl\u00e4utert.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"413\" data-attachment-id=\"29143\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/grafik-30\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-6.png\" data-orig-size=\"1576,636\" 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-6-1024x413.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-6-1024x413.png\" alt=\"\" class=\"wp-image-29143\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-6-1024x413.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-6-300x121.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-6-768x310.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-6-1536x620.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-6.png 1576w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Abbildung 2: Rider-Driver Matching Architektur<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A. Scenario<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das gew\u00fcnschte Endresultat ist eine informative \u00dcbersichtsseite (siehe Abbildung 3). Der Ablauf zum Finden eines Paares ben\u00f6tigt folgende Schritte: <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1) Es m\u00fcssen kontinuierliche Standort-Updates der Fahrer, sowie der Standort des Kunden ermittelt werden. Mit dem gew\u00fcnschten Zielort aus dem vorherigen Schritt kann somit die Route und daraus abgeleitete Metriken wie die Estimated Time of Arrival (ETA) oder der Preis ermittelt werden. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2) Retrieval: Aus allen georteten Fahrern m\u00fcssen naheliegende und verf\u00fcgbare ermittelt werden, wobei diese visualisiert und der Bestm\u00f6gliche f\u00fcr die Angebots- bzw. Preiserstellung ausgew\u00e4hlt wird. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3) Reservierung: Dieser Fahrer bekommt eine Anfrage vom Kunden, und ist somit reserviert, bis er den Auftrag ablehnt oder annimmt. Nimmt er ihn an, so ist ein Paar gefunden. [39] Hierbei ist es wichtig, dass Konsistenz gew\u00e4hrleistet ist, damit keine Doppelbuchungen auftreten.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-7.png\"><img loading=\"lazy\" decoding=\"async\" width=\"539\" height=\"637\" data-attachment-id=\"29144\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/grafik-31\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-7.png\" data-orig-size=\"539,637\" 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-7.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-7.png\" alt=\"\" class=\"wp-image-29144\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-7.png 539w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-7-254x300.png 254w\" sizes=\"auto, (max-width: 539px) 100vw, 539px\" \/><\/a><figcaption class=\"wp-element-caption\">Abbildung 3: Informative \u00dcbersichtsseite f\u00fcr den Kunden.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">B. Nicht-funktionale Anforderungen<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> Damit das Matching-System eine Vielzahl von Nutzern zufriedenstellen kann, sind folgende Anforderungen wichtig, die es erf\u00fcllen muss:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Eine geringe End-to-End-Latenz f\u00fcr das Bilden und Anzeigen des Fahrer-Kunden-Paares. Der Richtwert von unter einer Sekunde ist hierbei sinnvoll, da in dieser kurzen Wartezeit der Gedankenfluss des Nutzers nicht unterbrochen wird. [40]<\/li>\n\n\n\n<li>Eine hohe Verf\u00fcgbarkeit von 99,9%, wof\u00fcr redundante Serverstandorte den Ausfall einzelner Regionen abfangen m\u00fcssen. [37]<\/li>\n\n\n\n<li>Datenaktualit\u00e4t in Form von sek\u00fcndlich aktualisierten Fahrerstandorten.<\/li>\n\n\n\n<li>Eine gute Skalierbarkeit, da das System eine steigende Anzahl an Nutzeranfragen verarbeiten und mit Lastspitzen wie z.B. Freitagabenden oder Silvester rechnen muss.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">C. Empfangen von Location-Daten<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die erste getroffene architektonische Entscheidung umfasst, wie die Standorte aller Fahrer kontinuierlich an die Server \u00fcbermittelt werden (siehe Schritt 1 in Abbildung 2). Der naheliegendste Ansatz ist hier, dass s\u00e4mtliche Fahrer-Clients ihre Daten \u00fcber HTTP-Requests an REST-APIs senden, die auf dem Server eingerichtet sind. Dabei sind jedoch einige Nachteile zu beachten. Clients m\u00fcssen auf die Antwort des Servers auf ihre HTTP-POST-Requests warten. Au\u00dferdem wird bei jedem Update ein Overhead durch TCP- bzw. TLS-Handshakes erzeugt. [41] Zudem fehlt ein eingebauter Verteilermechanismus, wodurch der empfangende Server die Daten selbst an die dahinterliegenden Systeme (z.B. zum Berechnen der Route) weiterleiten m\u00fcsste. Direktes Schreiben in eine Datenbank ist ebenfalls nicht sinnvoll, da u. a. die Datenmenge zu gro\u00df ist und die Datenbank somit schnell \u00fcberlastet w\u00e4re. Um wiederholten Overhead zu vermeiden, ist es sinnvoll, eine persistente Verbindung (Session) zwischen Fahrer-Client und Server aufzubauen. Es liegt nahe, dies \u00fcber eine Websocket-Schnittstelle zu realisieren, jedoch ist diese Technologie zu limitiert. Sie bietet keinen automatischen Wiederaufbau von Verbindungen und keinen Backpressure-Mechanismus. Mit letzterem k\u00f6nnte der Client gebremst werden, falls der Server gerade keine weiteren Daten empfangen kann. [42] <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der weiterentwickelte Ansatz einer Message-Queue bringt Vorteile mit sich. Hierbei werden Messages (Standortdaten) in einem Puffer gespeichert, wodurch der Daten-Produzierende (hier: der Fahrer-Client) vom Empf\u00e4nger entkoppelt wird, und ersterer bspw. nicht auf die Datenverarbeitung des Servers warten muss. [43] Durch den Puffer wird ebenso Ausfallsicherheit sowie das Abfangen von Lastspitzen verbessert. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Broker ist hierbei die zentrale Komponente, die die Daten entgegennimmt und an die dahinterliegenden Konsumenten (Routing- oder Pricing-Service) weiterleitet. Konsumenten m\u00fcssen sich explizit beim Broker f\u00fcr den Datenempfang anmelden. Nachdem sie das Empfangen einer Datensequenz best\u00e4tigt haben, wird diese beim Broker gel\u00f6scht, wodurch kein Replay der Daten mehr erfolgen kann. [44] <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eine deutlich geeignetere L\u00f6sung stellt hier Apache Kafka dar. Dabei handelt es sich um eine Plattform, die ausdr\u00fccklich f\u00fcr das Event-Streaming von Echtzeitdaten entwickelt wurde. Daten werden von den Produzenten an ein Topic mit einem Key geschickt, bspw. ein Topic mit einer Postleitzahl &#8220;driver-locations-70178&#8221; und der ID des Fahrers als Key. Das Topic dient zur Gruppierung von zusammengeh\u00f6rigen Daten, und der Key gibt die Partition an, auf der ein geordnetes Log gef\u00fchrt wird, in welchem die Nachrichten (Standortdaten) gespeichert werden. Somit k\u00f6nnen stets chronologisch die Standortdaten eines jeden Fahrers abgerufen und bei zwischenzeitlichem Ausfall erneut angefragt bzw. an Konsumenten wiederholt weitergeleitet werden (Replay). Bei der sog. Pull-based ingestion fragen Konsumenten selbst die Daten beim Broker an, wodurch beliebig viele Konsumenten im Entwicklungsverlauf hinzugef\u00fcgt werden k\u00f6nnen, ohne dass der Broker davon wissen muss. [45]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D. Map Index Updater<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das erste Ziel der Such\u00fcbersicht ist es, Fahrer im Umkreis des Kunden zu finden. Ein trivialer Ansatz w\u00fcrde die Abst\u00e4nde zwischen dem Kunden und allen Fahrern in dessen Region berechnen, wobei die relevanten Standortdaten \u00fcber das korrekte Kafka-Topic gefiltert werden k\u00f6nnten. Dies ist jedoch einerseits \u00fcberkorrekt, da die genaue Distanz nicht ben\u00f6tigt wird, sondern nur die Information, ob ein Fahrer in der N\u00e4he ist. Andererseits werden fast nie zwei Anfragen von exakt dem gleichen Standort gemacht, weshalb die Berechnungen nicht wiederverwendet werden k\u00f6nnen. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aus diesen Gr\u00fcnden ist es vorteilhafter, bei Standorten nicht exakte Koordinatenpunkte, sondern Fl\u00e4chen zu verwenden. Diese Umwandlung geschieht durch einen Map Index Updater (siehe Schritt 2 in Abbildung 2). <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uber verwendet hierf\u00fcr das hierarchische Raumindex-System H3, welches die gesamte Erde in ein gleichm\u00e4\u00dfiges Gitter aus eindeutig identifizierbaren Sechsecken aufteilt. Jede GPS-Koordinate kann somit einer Hexagon-Zelle zugeordnet werden. Bereits vorhandene Regionensysteme wie z.B. Stadtteile oder Postleitzahlen werden nicht als Fl\u00e4chenform verwendet, da diese unregelm\u00e4\u00dfige Formen haben und potenziell mit der Zeit ver\u00e4ndert werden k\u00f6nnten und sich deshalb nicht f\u00fcr Kalkulationen eignen. Hexagons hingegen haben den Vorteil, dass ein gleichm\u00e4\u00dfiger Abstand zu allen Nachbarn gegeben ist.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-8.png\"><img loading=\"lazy\" decoding=\"async\" width=\"696\" height=\"275\" data-attachment-id=\"29145\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/grafik-32\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-8.png\" data-orig-size=\"696,275\" 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-8.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-8.png\" alt=\"\" class=\"wp-image-29145\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-8.png 696w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-8-300x119.png 300w\" sizes=\"auto, (max-width: 696px) 100vw, 696px\" \/><\/a><figcaption class=\"wp-element-caption\">Abbildung 4: H3-Hexagon-Preis-Smoothing.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Einer H3-Zelle werden Metriken wie verf\u00fcgbare Fahrer, durchschnittliche Fahrtdauer zu einer anderen Zelle oder ein Preis-Multiplikator zugeordnet. Um stark unterschiedliche Werte zwischen zwei Nachbarzellen zu vermeiden, was bspw. bei Preisen zu einer schlechten Kundenerfahrung f\u00fchren w\u00fcrde, k\u00f6nnen folgende Funktionen angewendet werden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mit der kRing(index, k)-Funktion k\u00f6nnen alle Nachbarzellen bis zu einer Distanz von k Ringen um die Zelle index ermittelt werden.<\/li>\n\n\n\n<li>Mit den gesammelten Daten kann Smoothing eingesetzt werden, wobei der Wert einer Zelle mit den durch kRing gesammelten Nachbarwerten gemittelt wird. In Abbildung 4 f\u00fchrt dies beispielsweise dazu, dass die zentrale Zelle mit Preismultiplikator 5 und deren Nachbarzellen aneinander angepasst werden. <\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In Abbildung 4 f\u00fchrt dies beispielsweise dazu, dass die zentrale Zelle mit Preismultiplikator 5 und deren Nachbarzellen aneinander angepasst werden. Somit k\u00f6nnen drastische Preisspr\u00fcnge vermieden werden, nur weil der Kunde sich einen Stra\u00dfenblock weiter bewegt. [46]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">E. Map Matching<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Hindernis beim Nachverfolgen von Fahrern besteht darin, dass GPS-Daten zeitweise ungenau sind und Koordinaten beinhalten, die nicht auf Stra\u00dfen liegen. Diese Daten einfach zu \u00fcbernehmen h\u00e4tte eine negative Auswirkung auf die Benutzeroberfl\u00e4che, bspw. wenn ein Auto in einem Geb\u00e4ude angezeigt wird, und k\u00f6nnte zu Problemen bei der Routenberechnung f\u00fchren. Die haupts\u00e4chlichen Gr\u00fcnde f\u00fcr diese Ausrei\u00dfer sind gel\u00e4ndebedingt, wie etwa Stra\u00dfenschluchten zwischen hohen Geb\u00e4uden, bei denen das GPS-Signal von Fassaden reflektiert wird, bevor es den Empf\u00e4nger erreicht. [47, S. 337] Dieses Problem wird durch einen Map Matcher gel\u00f6st (siehe Schritt 3 in Abbildung 2), welcher GPS-Koordinaten auf die korrekte Stra\u00dfe abbildet. Dabei wird das sog. Hidden Markov Model (HMM) verwendet, bei dem neben der Entfernung zur n\u00e4chsten Stra\u00dfe auch der Kontext, also vorher und nachher gesendete Koordinaten, ausgewertet wird, um die korrekte Stra\u00dfe zu bestimmen. Das Map Matching wird auf zwei Ebenen angewandt: Ein niedrig-latenter Matcher l\u00e4sst die Fahrer nahezu in Echtzeit auf den Stra\u00dfen erscheinen, w\u00e4hrend ein Offline-Matcher das CATCHME-System mit Standortdaten f\u00fcttert. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CATCHME steht f\u00fcr &#8220;Catch Map Error&#8221; und wertet Routeninformationen aus, um das Uber-eigene Stra\u00dfensystem zu optimieren. Befinden sich wiederholt Daten am gleichen Punkt neben anstatt auf einer berechneten Route, so ist dies ein Zeichen daf\u00fcr, dass die eigentliche Stra\u00dfe neu gezeichnet werden muss. [48]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F. Standortspeicherung<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr das Speichern der verarbeiteten Live-Standorte (siehe Schritt 4 in Abbildung 2) wird die In-Memory-Datenbank Redis verwendet, da diese die Daten direkt im RAM anstatt auf der Festplatte h\u00e4lt und dadurch besonders schnelle Lese- \/Schreibzugriffe erm\u00f6glicht. [49] <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aufgrund der \u00fcberaus gro\u00dfen Datenmenge wird ein Sharding-Layer namens &#8220;Ringpop&#8221; eingesetzt, in welchem mehrere Redis-Server ringf\u00f6rmig angeordnet werden, wobei jedem Server ein fester Teilbereich der Fahrerdaten z.B. basierend auf geographischer Region zugeteilt wird [50], [51].<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-9.png\"><img loading=\"lazy\" decoding=\"async\" width=\"486\" height=\"464\" data-attachment-id=\"29148\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/grafik-33\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-9.png\" data-orig-size=\"486,464\" 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-9.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-9.png\" alt=\"\" class=\"wp-image-29148\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-9.png 486w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-9-300x286.png 300w\" sizes=\"auto, (max-width: 486px) 100vw, 486px\" \/><\/a><figcaption class=\"wp-element-caption\">Abbildung 5: Ringpop-Sharding-Ring.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Falls ein Server ausf\u00e4llt oder entfernt wird, kommunizieren die Server untereinander \u00fcber das Peer-to-Peer-Gossip-Protokoll (SWIM) und ermitteln einen anderen Server als neuen Speicherort [50]. Das Moving-Driver-Problem, bei dem ein Fahrer durch Bewegung den geographischen Bereich eines Servers verl\u00e4sst, kann gel\u00f6st werden, indem die Verbindung zum urspr\u00fcnglichen Server aufrechterhalten wird, und dieser die Daten einfach an den korrekten Server weiterleitet [50]. Durch das Replizieren von Daten auf mehreren Servern kann au\u00dferdem die Ausfalltoleranz erh\u00f6ht werden [50], [51].<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">G. Routing-Service<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Routing-Service hat die Aufgabe, die Fahrzeit und somit auch die Estimated Time of Arrival (ETA) zwischen Kunden und Zielort zu berechnen (siehe Schritt 5 in Abbildung 2), was f\u00fcr weitere Schritte wie Preisberechnung und Fahrer-Matching ben\u00f6tigt wird. Der klassische Ansatz, das Stra\u00dfennetz als Graphen zu modellieren, bei dem die ben\u00f6tigte Fahrtzeit einer Strecke das Kantengewicht darstellt, und per Shortest-Path-Algorithmus (z.B. Dijkstra) diese Gewichte aufzusummieren, um die optimale Route zu finden, scheitert jedoch. Fahrtzeiten sind n\u00e4mlich nicht statisch, sondern \u00e4ndern sich je nach Tageszeit, Wochentag und Verkehrslage. Uber entwickelte daher den DeepETA-Algorithmus, ein nachgeschaltetes (&#8220;Post-Processing&#8221;) Deep-Learning-Modell. Anhand der o.g. Daten sowie vergangenen Fahrt- und Ankunftszeiten sagt es pro Zeitfenster und H3-Zelle sog. Residuals, die die prognostizierte Abweichung zwischen der urspr\u00fcnglichen Routing-Engine-Sch\u00e4tzung und der tats\u00e4chlichen Fahrzeit angeben. Zum Beispiel erh\u00e4lt eine H3-Zelle mit einer Stra\u00dfenkreuzung, die wochentags um 7:10 Uhr stark frequentiert wird, f\u00fcr diesen Zeitrahmen ein Residual von +2 Minuten, welches in s\u00e4mtliche ETA-Berechnungen einflie\u00dft. [52]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">H. Surge Pricing<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr das Erf\u00fcllen von Auftr\u00e4gen sind manche Regionen f\u00fcr Fahrer attraktiver als andere. Innenst\u00e4dte bieten beispielsweise eine hohe Auftragsdichte, jedoch sind daf\u00fcr meist die Stra\u00dfen \u00fcberf\u00fcllter, Park- oder Haltegelegenheiten seltener und die Fahrtzeiten dadurch l\u00e4nger. Um hier dennoch der Nachfrage gerecht zu werden, implementiert Uber mit dem &#8220;Surge Pricing&#8221; eine dynamische Preisgestaltung (siehe Schritt 6 in Abbildung 2), die durch Boni bzw. h\u00f6here Multiplikatoren gezielt Anreize f\u00fcr Fahrer in bestimmten Regionen setzt und die Fahrer dadurch gleichm\u00e4\u00dfig auf die Karte verteilt. [53] Damit Fahrer sich bereits im Voraus vorteilhaft positionieren k\u00f6nnen, m\u00fcssen diese Werte vorab berechnet werden. Weitere Faktoren, die zu einem hohen Preis-Multiplikator zu einer bestimmten Zeit an einem bestimmten Ort f\u00fchren, sind etwa Gro\u00dfevents oder schlechte Wetterbedingungen. [54]<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"695\" height=\"573\" data-attachment-id=\"29149\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/grafik-34\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-10.png\" data-orig-size=\"695,573\" 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-10.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-10.png\" alt=\"\" class=\"wp-image-29149\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-10.png 695w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-10-300x247.png 300w\" sizes=\"auto, (max-width: 695px) 100vw, 695px\" \/><\/a><figcaption class=\"wp-element-caption\">Abbildung 6: Surge-Pricing-Heatmap.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I. Feature Store<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Da komplexe Metriken wie ETA oder Preisindizes in Echtzeit die Latenz erh\u00f6hen w\u00fcrden, werden sie bereits im Vorfeld berechnet und in einem Feature Store gespeichert (siehe Schritt 7 in Abbildung 2). F\u00fcr die kontinuierliche Vorberechnung wird die Stream-Processing-Engine Apache Flink eingesetzt, welche zustandsbehaftete Berechnungen \u00fcber unbegrenzte Datenstr\u00f6me erm\u00f6glicht, d.h. Berechnungen, die auch Vergangenheitsdaten mit einbeziehen. [55] In diesem Fall flie\u00dfen die Daten (Fahrer-Standorte) laufend in den Flink-Stream ein, werden auf Worker verteilt (z.B. nach H3-Zelle) und verarbeitet, und die Ergebnisse werden als State (Zwischenspeicher) beim Worker gespeichert. Die Live-Index States sind dabei Sliding Windows, die die Daten der letzten N Zeiteinheiten zusammenfassen, z.B. die durchschnittliche Durchfahrzeit einer H3-Zelle in den letzten 5 Minuten. Das Fenster kann in einem festen Intervall z.B. jede Minute aktualisiert, also nach vorne verschoben werden, wobei ein neues Aggregat mit glattem \u00dcbergang entsteht. Flink l\u00e4uft also als Rechenmaschine permanent im Hintergrund, und wenn eine Nutzeranfrage am System eingeht, so k\u00f6nnen dahinterliegende Services sofort auf die hier berechneten Daten zugreifen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J. Matching Service<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Matching Service (siehe Schritt 8 in Abbildung 2) befasst sich mit den letzten beiden Schritten der Informations-Pipeline f\u00fcr die Buchungs\u00fcbersicht: Dem Einstufen der relevanten Fahrer in eine Rangliste und dem Treffen einer Entscheidung eines Fahrers f\u00fcr den Kunden. Die Auswahlkriterien beinhalten hierbei neben Nutzer-Pr\u00e4ferenzen eine minimale Wartezeit f\u00fcr den Kunden auf das Abholen und einen minimalen Bewegungsaufwand f\u00fcr den Fahrer. Uber verwendet jedoch nicht das &#8220;First-to-request&#8221;-Prinzip, bei dem einfach der Fahrer mit der k\u00fcrzesten Fahrtdauer zum Kunden ausgew\u00e4hlt wird. Stattdessen wird sogenanntes &#8220;Batch Matching&#8221; verwendet, wobei mehrere Anfragen und Fahrer gesammelt werden und daraufhin die optimale Zuordnung \u00fcber das gesamte Batch hinweg berechnet wird. Es wird also die Kombination gew\u00e4hlt, die die kollektive Wartezeit \u00fcber alle Kunden und Fahrer hinweg minimiert. Dies zieht eine etwas l\u00e4ngere Wartezeit bis zur Fahrerauswahl f\u00fcr den Einzelnen mit sich, senkt jedoch die durchschnittliche Wartezeit im gesamten System. [39]<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-11.png\"><img loading=\"lazy\" decoding=\"async\" width=\"695\" height=\"406\" data-attachment-id=\"29150\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/grafik-35\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-11.png\" data-orig-size=\"695,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-11.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-11.png\" alt=\"\" class=\"wp-image-29150\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-11.png 695w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-11-300x175.png 300w\" sizes=\"auto, (max-width: 695px) 100vw, 695px\" \/><\/a><figcaption class=\"wp-element-caption\">Abbildung 7: Beispiel f\u00fcr Batch Matching mit minimierter Gesamtwartezeit.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">K. Reservierung<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In einem klassischen Request-Response-Modell fragt eine Partei nach Informationen, wenn diese ben\u00f6tigt werden. So fragt der Fahrer-Client den Server bspw. jede 5 Sekunden danach, ob ein neues Fahrerangebot vorliegt, oder der Kunden-Client fragt den Server jede 5 Sekunden danach, wo sich sein Fahrer befindet. Dies k\u00f6nnte einfach mithilfe einer REST-API umgesetzt werden, \u00fcber die HTTP-Requests ausgetauscht werden. Im System von Uber f\u00fchrte dies dazu, dass 80% aller Requests von Clients an Backend-APIs aus Polling-Calls bestanden, also Fragen der Clients, ob sich etwas ge\u00e4ndert hat. Dieses System wurde als zu ineffizient eingestuft. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Anstelle dessen implementierte Uber eine sog. push-basierte Plattform namens &#8220;RAMEN&#8221; (siehe Schritt 9 in Abbildung 2), die Polling eliminierte und bei der die Informationsquelle (z.B. der Redis-Server mit Standortdaten) in Intervallen eigenst\u00e4ndig ihre Informationen an die Clients schickt, ohne dass diese explizit danach fragen m\u00fcssen. Das System wurde zun\u00e4chst auf Server-Sent Events (SSE) aufgebaut, sp\u00e4ter wechselte man jedoch auf gRPC. [56] Hierbei enth\u00e4lt jeder Client einen sog. &#8220;Stub&#8221;, welcher vom Server vordefinierte Methoden beinhaltet, auf welche der Server optimal reagieren kann, z.B. das Aktualisieren der Fahrerposition, womit der Server unmittelbar eine Timeline der letzten Fahrerpositionen erstellen kann. Die Gr\u00fcnde zur Entscheidung f\u00fcr gRPC waren die M\u00f6glichkeit, eine bidirektionale Verbindung zwischen Client und Server zu etablieren, sequenzierte Empfangsbest\u00e4tigungen (ACKs) zu senden sowie die native Bin\u00e4r-Serialisierung \u00fcber das Protobuf-Format. [57] [58] <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um die Datenmenge zu reduzieren und die Effizienz weiter zu steigern, k\u00f6nnte sog. &#8220;Adaptive Sampling&#8221; eingesetzt werden, wobei die Frequenz der Standort-Updates dynamisch an den Status des Fahrers angepasst wird. Ein sich schnell bewegender Fahrer sollte w\u00e4hrend eines Auftrages h\u00e4ufiger Updates senden als ein nicht-besch\u00e4ftigter, stehender Fahrer. [59]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>IV. CONCLUSION<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Zun\u00e4chst wurden die Anforderungen an die Destinationssuche aufgestellt und untersucht, wie sich diese technisch umsetzen lassen. Anschlie\u00dfend wurden OS, ES und Vespa hinsichtlich nicht-funktionaler Anforderungen wie Performance, Skalierung und geografischer Verteilung verglichen. OS ging als Gewinner hervor: Zu ES zeigte sich kaum ein Unterschied, OpenSearch ist jedoch quelloffen. Vespa bringt als weniger etabliertes, praxiserprobtes Tool ein gewisses Risiko mit sich. Die resultierende Architektur nutzt OpenSearch f\u00fcr Autovervollst\u00e4ndigung und kontextabh\u00e4ngiges Ranking \u00fcber das LTR-Plugin, orientiert sich f\u00fcr die geografische Verteilung an Ubers Active-Active-Ansatz \u00fcber Kafka und wird von einem zentralen Search Service orchestriert. Damit erf\u00fcllt die Architektur sowohl die funktionalen als auch die nicht-funktionalen Anforderungen an die Destinationssuche. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Beim Rider-Driver-Matching bildet Kafka die zentrale Datenquelle f\u00fcr alle Standortdaten, mit der M\u00f6glichkeit, alte Daten erneut abzurufen. Redis sorgt, unterst\u00fctzt durch den Sharding-Layer Ringpop, f\u00fcr schnelles Lesen und Schreiben der aktuellen Fahrerpositionen. H3 und ein auf einem Hidden-Markov-Modell basierendes Map Matching wandeln rohe GPS-Koordinaten in verl\u00e4ssliche, stra\u00dfenkorrekte Standortdaten um. Durch Vorberechnung mit der Streaming-Engine Flink im Feature Store, etwa von Angebot\/Nachfrage, ETA oder Preis-Multiplikator, wird die Antwortzeit bei einer Anfrage verringert, da die aufw\u00e4ndigen Berechnungen schon vorher gemacht wurden. Statt einfach den n\u00e4chstgelegenen Fahrer zu w\u00e4hlen, sorgt Batch Matching daf\u00fcr, dass die Wartezeit f\u00fcr alle Nutzer zusammen m\u00f6glichst kurz bleibt. RAMEN ersetzt au\u00dferdem das ineffiziente Abfragen durch die Clients, indem der Server Angebote und \u00c4nderungen direkt an die Clients schickt. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Beide Teile folgen damit einer \u00e4hnlichen Idee: Daten werden fr\u00fch vereinfacht oder vorberechnet, um bei der eigentlichen Anfrage Zeit zu sparen. Gleichzeitig sorgen verteilte Systeme wie Kafka und die OpenSearch-Cluster daf\u00fcr, dass alles zuverl\u00e4ssig und weltweit verf\u00fcgbar bleibt, auch wenn daf\u00fcr auf strikte Echtzeit-Aktualit\u00e4t verzichtet wird.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[1] Statista Market Insights, \u201cRide-hailing \u2013 worldwide,\u201d<br>https:\/\/www.statista.com\/outlook\/mmo\/shared-mobility\/ride-hailing\/<br>worldwide\/revenue, 2026, accessed 2026-07-30.<br>[2] C. D. Manning, P. Raghavan, and H. Sch\u00fctze, Introduction to Informa-<br>tion Retrieval. Cambridge, UK: Cambridge University Press, 2008.<br>[3] Elastic, \u201cWhat is full-text search? a guide to fts,\u201d https:\/\/www.elastic.<br>co\/what-is\/full-text-search, 2024, accessed 2026-07-30.<br>[4] \u2014\u2014, \u201cAnatomy of an analyzer,\u201d https:\/\/www.elastic.co\/docs\/<br>manage-data\/data-store\/text-analysis\/anatomy-of-an-analyzer, 2024,<br>accessed 2026-07-30.<br>[5] Google Cloud, \u201cWhat is fuzzy search? fuzzy search meaning,\u201d https:\/\/<br>cloud.google.com\/discover\/what-is-fuzzy-search, 2024, accessed 2026-<br>07-30.<br>[6] Elastic, \u201cSearch with synonyms,\u201d https:\/\/www.elastic.co\/docs\/solutions\/<br>search\/full-text\/search-with-synonyms, 2024, accessed 2026-07-30.<br>[7] \u2014\u2014, \u201cSynonym token filter,\u201d https:\/\/www.elastic.co\/docs\/reference\/<br>text-analysis\/analysis-synonym-tokenfilter, 2024, accessed 2026-07-30.<br>[8] IBM, \u201cDocument retrieval and ranking,\u201d https:\/\/www.ibm.com\/docs\/en\/<br>content-cortex\/26.0.0?topic=domain-document-retrieval-ranking, 2024,<br>iBM Documentation, Content Cortex 26.0.0. Accessed 2026-07-30.<br>[9] Apache Software Foundation, \u201cApache lucene core,\u201d https:\/\/lucene.<br>apache.org\/core\/, 2024, accessed 2026-07-30.<br>[10] S. Maheshwari, \u201cThe secret architecture behind lucene: A library<br>of immutable wings,\u201d https:\/\/satyadeepmaheshwari.medium.com\/<br>the-secret-architecture-behind-lucene-a-library-of-immutable-wings-21cf072e8015,<br>2024, medium. Accessed 2026-07-30.<br>[11] Elastic, \u201cNear real-time search,\u201d https:\/\/www.elastic.co\/docs\/<br>manage-data\/data-store\/near-real-time-search, 2024, accessed 2026-07-<br>30.<br>[12] M. McCandless, \u201cVisualizing lucene\u2019s segment merges,\u201d https:\/\/blog.<br>mikemccandless.com\/2011\/02\/visualizing-lucenes-segment-merges.<br>html, 2011, accessed 2026-07-30.<br>[13] M. Syed and E. Russi, \u201cWhat is vector search?\u201d https:\/\/www.ibm.com\/<br>think\/topics\/vector-search, 2024, iBM. Accessed 2026-07-30.<br>[14] Amazon Web Services, \u201cLearning to rank for amazon open-<br>search service,\u201d https:\/\/docs.aws.amazon.com\/opensearch-service\/latest\/<br>developerguide\/learning-to-rank.html, 2024, amazon OpenSearch Ser-<br>vice Developer Guide. Accessed 2026-07-30.<br>[15] Google for Developers, \u201cGeocoding api overview,\u201d https:\/\/developers.<br>google.com\/maps\/documentation\/geocoding\/guides-v3\/overview, 2024,<br>google Maps Platform. Accessed 2026-07-30.<br>[16] Elastic, \u201cElasticsearch autocomplete: search as you type,<br>query time and more,\u201d https:\/\/www.elastic.co\/search-labs\/blog\/<br>elasticsearch-autocomplete-search, 2024, elasticsearch Labs. Accessed<br>2026-07-30.<br>[17] Google for Developers, \u201cAbout the places api (new),\u201d https:\/\/developers.<br>google.com\/maps\/documentation\/places\/web-service\/op-overview,<br>2024, google Maps Platform. Accessed 2026-07-30.<br>[18] Dremio, \u201cApache lucene,\u201d https:\/\/www.dremio.com\/wiki\/<br>apache-lucene\/, 2024, dremio Wiki. Accessed 2026-07-30.<br>[19] C. Yun, \u201cAnnouncing amazon opensearch service which<br>supports opensearch 1.0,\u201d https:\/\/aws.amazon.com\/blogs\/aws\/<br>announcing-amazon-opensearch-service-which-supports-opensearch-10\/,<br>2021, aWS News Blog, Sep. 8, 2021. Accessed 2026-07-30.<br>[20] Vespa.ai, \u201cUse cases,\u201d https:\/\/vespa.ai\/use-cases\/, 2024, accessed 2026-<br>07-30.<br>[21] E. Downing, R. Schirone, F. Bertolaccini, and R. Eytchison,<br>\u201cOpensearch benchmark assessment,\u201d https:\/\/github.com\/trailofbits\/<br>publications\/blob\/master\/reports\/OpenSearch-Benchmarking.pdf, 2024,<br>trail of Bits, Aug. 2024. Accessed 2026-07-30.<br>[22] G. Storli, J. K. Bergum, and R. Gheorghe, \u201cElasticsearch<br>vs vespa performance comparison,\u201d https:\/\/blog.vespa.ai\/<br>elasticsearch-vs-vespa-performance-comparison\/, 2024, vespa Blog,<br>Nov. 6, 2024. Accessed 2026-07-30.<br>[23] Vespa.ai, \u201cProton,\u201d https:\/\/docs.vespa.ai\/en\/content\/proton.html, 2024,<br>vespa Documentation. Accessed 2026-07-30.<br>[24] Elastic, \u201cGeneral index settings,\u201d https:\/\/www.elastic.co\/docs\/reference\/<br>elasticsearch\/index-settings\/index-modules, 2024, elasticsearch Refe-<br>rence. Accessed 2026-07-30.<br>[25] OpenSearch Project, \u201cIndex settings,\u201d https:\/\/docs.opensearch.org\/latest\/<br>install-and-configure\/configuring-opensearch\/index-settings\/, 2024,<br>openSearch Documentation. Accessed 2026-07-30.<br>[26] Elastic, \u201cHow to increase primary shard count in<br>elasticsearch,\u201d https:\/\/www.elastic.co\/search-labs\/blog\/<br>elasticsearch-increase-primary-shard-count, 2024, elasticsearch Labs.<br>Accessed 2026-07-30.<br>[27] Vespa.ai, \u201cContent cluster elasticity,\u201d https:\/\/docs.vespa.ai\/en\/content\/<br>elasticity.html, 2024, vespa Documentation. Accessed 2026-07-30.<br>[28] Elastic, \u201cReading and writing documents,\u201d https:\/\/www.elastic.co\/<br>guide\/en\/elasticsearch\/reference\/8.19\/docs-replication.html, 2024, ela-<br>sticsearch Guide [8.19]. Accessed 2026-07-30.<br>[29] Vespa.ai, \u201cConsistency model,\u201d https:\/\/docs.vespa.ai\/en\/content\/<br>consistency.html, 2024, vespa Documentation. Accessed 2026-07-30.<br>[30] OpenSearch Project, \u201cCross-cluster replication,\u201d https:\/\/docs.<br>opensearch.org\/latest\/tuning-your-cluster\/replication-plugin\/index\/,<br>2024, openSearch Documentation. Accessed 2026-07-30.<br>[31] Elastic, \u201cCross-cluster replication,\u201d https:\/\/www.elastic.co\/docs\/<br>deploy-manage\/tools\/cross-cluster-replication, 2024, elastic Docs.<br>Accessed 2026-07-30.<br>[32] \u2014\u2014, \u201cLearning to rank (ltr),\u201d https:\/\/www.elastic.co\/docs\/solutions\/<br>search\/ranking\/learning-to-rank-ltr, 2024, elastic Docs. Accessed 2026-<br>07-30.<br>[33] OpenSearch Project, \u201cLearning to rank,\u201d https:\/\/docs.opensearch.org\/<br>latest\/search-plugins\/ltr\/index\/, 2024, openSearch Documentation. Ac-<br>cessed 2026-07-30.<br>[34] Vespa.ai, \u201cRanking introduction,\u201d https:\/\/docs.vespa.ai\/en\/ranking\/<br>ranking-intro.html, 2024, vespa Documentation. Accessed 2026-07-30.<br>[35] OpenSearch Project, \u201cAutocomplete functionality,\u201d https:\/\/docs.<br>opensearch.org\/latest\/search-plugins\/searching-data\/autocomplete\/,<br>2024, openSearch Documentation. Accessed 2026-07-30.<br>[36] Vespa.ai, \u201cText matching,\u201d https:\/\/docs.vespa.ai\/en\/text-matching.html,<br>2024, vespa Documentation. Accessed 2026-07-30.<br>[37] Uber Technologies, Inc., \u201cThe evolution of uber\u2019s search platform,\u201d<br>https:\/\/www.uber.com\/eg\/en\/blog\/evolution-of-ubers-search-platform\/,<br>2025, accessed 2026-07-27.<br>[38] Y. Fu, X. Xiong, and M. Froh, \u201cHow uber indexes streaming data with<br>pull-based ingestion in opensearch,\u201d https:\/\/www.uber.com\/us\/en\/blog\/<br>how-uber-indexes-streaming-data-with-pull-based-ingestion-in-opensearch\/,<br>2025, uber Blog, Dec. 16, 2025. Accessed 2026-07-30.<br>[39] Uber Technologies, Inc., \u201cUnderstanding uber\u2019s marketplace mat-<br>ching,\u201d https:\/\/www.uber.com\/de\/en\/marketplace\/matching\/, 2024, ac-<br>cessed 2026-07-23.<br>[40] J. Nielsen, \u201cResponse time limits: Article by jakob nielsen,\u201d https:\/\/<br>www.nngroup.com\/articles\/response-times-3-important-limits\/, Nielsen<br>Norman Group, 1993, nielsen Norman Group. Accessed 2026-07-28.<br>[41] R. Braden, \u201cRFC 1379: Extending tcp for transactions \u2013 concepts,\u201d https:<br>\/\/www.rfc-editor.org\/rfc\/rfc1379.html, 1992, iETF. Accessed 2026-07-<br>28.<br>[42] OpenJS Foundation, \u201cBackpressuring in streams,\u201d https:\/\/nodejs.org\/<br>learn\/modules\/backpressuring-in-streams, 2024, node.js Documentation.<br>Accessed 2026-07-28.<br>[43] Broadcom, Inc. (RabbitMQ), \u201cConsumer acknowledgements and pu-<br>blisher confirms,\u201d https:\/\/www.rabbitmq.com\/docs\/confirms, 2024, rab-<br>bitMQ Documentation. Accessed 2026-07-28.<br>[44] \u2014\u2014, \u201cConsumers,\u201d https:\/\/www.rabbitmq.com\/docs\/consumers, 2024,<br>rabbitMQ Documentation. Accessed 2026-07-29.<br>[45] Apache Software Foundation, \u201cDesign,\u201d https:\/\/kafka.apache.org\/42\/<br>design\/design\/, 2024, apache Kafka Documentation. Accessed 2026-07-<br>29.<br>[46] Uber Technologies, Inc., \u201cH3: Uber\u2019s hexagonal hierarchical spatial<br>index,\u201d https:\/\/www.uber.com\/us\/en\/blog\/h3\/, 2024, accessed 2026-07-<br>23.<br>[47] P. Newson and J. Krumm, \u201cHidden markov map matching through noise<br>and sparseness,\u201d in Proceedings of the 17th ACM SIGSPATIAL Interna-<br>tional Conference on Advances in Geographic Information Systems (GIS<br>\u201909), 2009.<br>[48] Uber Technologies, Inc., \u201cImproving mapping accuracy with catchme,\u201d<br>https:\/\/www.uber.com\/us\/en\/blog\/mapping-accuracy-with-catchme\/,<br>2024, accessed 2026-07-23.<br>[49] Redis Ltd., \u201cRedis,\u201d https:\/\/redis.io\/, 2024, accessed 2026-07-23.<br>[50] D. Kumar, \u201cRingpop: A scalable and fault-tolerant application-<br>layer sharding strategy,\u201d https:\/\/dilipkumar.medium.com\/<br>ringpop-a-scalable-and-fault-tolerant-application-layer-sharding-strategy-7910ab39b9c 2023, accessed 2026-07-23.<br>[51] Uber Technologies, Inc., \u201cRingpop: Open-source node.js libra-<br>ry for application-layer sharding,\u201d https:\/\/www.uber.com\/us\/en\/blog\/<br>ringpop-open-source-nodejs-library\/, 2024, accessed 2026-07-23.<br>[52] \u2014\u2014, \u201cDeepeta: How uber predicts arrival times,\u201d https:\/\/www.uber.<br>com\/us\/en\/blog\/deepeta-how-uber-predicts-arrival-times\/, 2024, acces-<br>sed 2026-07-23.<br>[53] \u2014\u2014, \u201cUber marketplace: Surge pricing,\u201d https:\/\/www.uber.com\/us\/en\/<br>marketplace\/pricing\/surge-pricing\/, 2024, accessed 2026-07-31.<br>[54] \u2014\u2014, \u201cHow surge pricing works,\u201d https:\/\/www.uber.com\/us\/en\/drive\/<br>driver-app\/how-surge-works\/, 2024, accessed 2026-07-31.<br>[55] Apache Software Foundation, \u201cFlink architecture,\u201d https:\/\/flink.apache.<br>org\/what-is-flink\/flink-architecture\/, 2024, apache Flink Documentation.<br>Accessed 2026-07-31.<br>[56] Uber Technologies, Inc., \u201cRamen: Uber\u2019s real-time push delivery plat-<br>form,\u201d https:\/\/www.uber.com\/in\/en\/blog\/real-time-push-platform\/, 2024,<br>accessed 2026-07-23.<br>[57] The gRPC Authors, \u201cIntroduction to grpc,\u201d https:\/\/grpc.io\/docs\/<br>what-is-grpc\/introduction\/, 2024, accessed 2026-07-28.<br>[58] \u2014\u2014, \u201cFlow control,\u201d https:\/\/grpc.io\/docs\/guides\/flow-control\/, 2024,<br>accessed 2026-07-28.<br>[59] M. Banger, \u201cArchitecting an uber-scale real-time<br>tracking &amp; dispatch system,\u201d https:\/\/dev.to\/madhur_banger\/<br>architecting-an-uber-scale-real-time-tracking-dispatch-system-3a72,<br>2023, accessed 2026-07-23.<br><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Georg B\u00fchler, Dominik Seitz Abstract: Ride-Hailing-Plattformen wie Uber m\u00fcssen zwei grundlegende Suchprobleme l\u00f6sen, damit Fahrgast und Fahrer zusammenfinden. Zum einen muss der Fahrgast sein gew\u00fcnschtes Ziel \u00fcber eine Texteingabe finden k\u00f6nnen, zum anderen muss aus vielen verf\u00fcgbaren Fahrern der passende f\u00fcr die Fahrt ermittelt werden. Diese Arbeit untersucht m\u00f6gliche technische Umsetzungen f\u00fcr beide Probleme, mit [&hellip;]<\/p>\n","protected":false},"author":1331,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"everybody","_jetpack_dont_email_post_to_subs":true,"_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],"tags":[],"ppma_author":[1252],"class_list":["post-29131","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"Georg B\u00fchler, Dominik Seitz Abstract: Ride-Hailing-Plattformen wie Uber m\u00fcssen zwei grundlegende Suchprobleme l\u00f6sen, damit Fahrgast und Fahrer zusammenfinden. Zum einen muss der Fahrgast sein gew\u00fcnschtes Ziel \u00fcber eine Texteingabe finden k\u00f6nnen, zum anderen muss aus vielen verf\u00fcgbaren Fahrern der passende f\u00fcr die Fahrt ermittelt werden. Diese Arbeit untersucht m\u00f6gliche technische Umsetzungen f\u00fcr beide Probleme, mit\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Georg B\u00fchler\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/\" \/>\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=\"Suchfunktionalit\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\u00fcr Ultra Large Scale Systems | Computer Science Blog @ HdM Stuttgart\" \/>\n\t\t<meta property=\"og:description\" content=\"Georg B\u00fchler, Dominik Seitz Abstract: Ride-Hailing-Plattformen wie Uber m\u00fcssen zwei grundlegende Suchprobleme l\u00f6sen, damit Fahrgast und Fahrer zusammenfinden. Zum einen muss der Fahrgast sein gew\u00fcnschtes Ziel \u00fcber eine Texteingabe finden k\u00f6nnen, zum anderen muss aus vielen verf\u00fcgbaren Fahrern der passende f\u00fcr die Fahrt ermittelt werden. Diese Arbeit untersucht m\u00f6gliche technische Umsetzungen f\u00fcr beide Probleme, mit\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-5.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-5.png\" \/>\n\t\t<meta property=\"og:image:width\" content=\"494\" \/>\n\t\t<meta property=\"og:image:height\" content=\"707\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-07-31T22:27:38+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-07-31T22:28:32+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Suchfunktionalit\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\u00fcr Ultra Large Scale Systems | Computer Science Blog @ HdM Stuttgart\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Georg B\u00fchler, Dominik Seitz Abstract: Ride-Hailing-Plattformen wie Uber m\u00fcssen zwei grundlegende Suchprobleme l\u00f6sen, damit Fahrgast und Fahrer zusammenfinden. Zum einen muss der Fahrgast sein gew\u00fcnschtes Ziel \u00fcber eine Texteingabe finden k\u00f6nnen, zum anderen muss aus vielen verf\u00fcgbaren Fahrern der passende f\u00fcr die Fahrt ermittelt werden. Diese Arbeit untersucht m\u00f6gliche technische Umsetzungen f\u00fcr beide Probleme, mit\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-5.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\\\/08\\\/01\\\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\\\/#article\",\"name\":\"Suchfunktionalit\\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\\u00fcr Ultra Large Scale Systems | Computer Science Blog @ HdM Stuttgart\",\"headline\":\"Suchfunktionalit\\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\\u00fcr Ultra Large Scale Systems\",\"author\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/author\\\/georg_bhler\\\/#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-5.png\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/08\\\/01\\\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\\\/#articleImage\",\"width\":494,\"height\":707},\"datePublished\":\"2026-08-01T00:27:38+02:00\",\"dateModified\":\"2026-08-01T00:28:32+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/08\\\/01\\\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/08\\\/01\\\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\\\/#webpage\"},\"articleSection\":\"Allgemein, Georg B\\u00fchler\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/08\\\/01\\\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\\\/#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\\\/allgemein\\\/#listItem\",\"name\":\"Allgemein\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/category\\\/allgemein\\\/#listItem\",\"position\":2,\"name\":\"Allgemein\",\"item\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/category\\\/allgemein\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/08\\\/01\\\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\\\/#listItem\",\"name\":\"Suchfunktionalit\\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\\u00fcr Ultra Large Scale Systems\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/08\\\/01\\\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\\\/#listItem\",\"position\":3,\"name\":\"Suchfunktionalit\\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\\u00fcr Ultra Large Scale Systems\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/category\\\/allgemein\\\/#listItem\",\"name\":\"Allgemein\"}}]},{\"@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\\\/georg_bhler\\\/#author\",\"url\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/author\\\/georg_bhler\\\/\",\"name\":\"Georg B\\u00fchler\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/08\\\/01\\\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9ae78edcac6fa3fa76aea5ef3c7109312b6b1ac8f3989fd938ad037a67330a18?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Georg B\\u00fchler\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/08\\\/01\\\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\\\/#webpage\",\"url\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/08\\\/01\\\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\\\/\",\"name\":\"Suchfunktionalit\\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\\u00fcr Ultra Large Scale Systems | Computer Science Blog @ HdM Stuttgart\",\"description\":\"Georg B\\u00fchler, Dominik Seitz Abstract: Ride-Hailing-Plattformen wie Uber m\\u00fcssen zwei grundlegende Suchprobleme l\\u00f6sen, damit Fahrgast und Fahrer zusammenfinden. Zum einen muss der Fahrgast sein gew\\u00fcnschtes Ziel \\u00fcber eine Texteingabe finden k\\u00f6nnen, zum anderen muss aus vielen verf\\u00fcgbaren Fahrern der passende f\\u00fcr die Fahrt ermittelt werden. Diese Arbeit untersucht m\\u00f6gliche technische Umsetzungen f\\u00fcr beide Probleme, mit\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/2026\\\/08\\\/01\\\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/author\\\/georg_bhler\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/blog.mi.hdm-stuttgart.de\\\/index.php\\\/author\\\/georg_bhler\\\/#author\"},\"datePublished\":\"2026-08-01T00:27:38+02:00\",\"dateModified\":\"2026-08-01T00:28:32+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":"Suchfunktionalit\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\u00fcr Ultra Large Scale Systems | Computer Science Blog @ HdM Stuttgart","description":"Georg B\u00fchler, Dominik Seitz Abstract: Ride-Hailing-Plattformen wie Uber m\u00fcssen zwei grundlegende Suchprobleme l\u00f6sen, damit Fahrgast und Fahrer zusammenfinden. Zum einen muss der Fahrgast sein gew\u00fcnschtes Ziel \u00fcber eine Texteingabe finden k\u00f6nnen, zum anderen muss aus vielen verf\u00fcgbaren Fahrern der passende f\u00fcr die Fahrt ermittelt werden. Diese Arbeit untersucht m\u00f6gliche technische Umsetzungen f\u00fcr beide Probleme, mit","canonical_url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/#article","name":"Suchfunktionalit\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\u00fcr Ultra Large Scale Systems | Computer Science Blog @ HdM Stuttgart","headline":"Suchfunktionalit\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\u00fcr Ultra Large Scale Systems","author":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/author\/georg_bhler\/#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-5.png","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/#articleImage","width":494,"height":707},"datePublished":"2026-08-01T00:27:38+02:00","dateModified":"2026-08-01T00:28:32+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/#webpage"},"isPartOf":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/#webpage"},"articleSection":"Allgemein, Georg B\u00fchler"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/#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\/allgemein\/#listItem","name":"Allgemein"}},{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/#listItem","position":2,"name":"Allgemein","item":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/","nextItem":{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/#listItem","name":"Suchfunktionalit\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\u00fcr Ultra Large Scale Systems"},"previousItem":{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/#listItem","position":3,"name":"Suchfunktionalit\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\u00fcr Ultra Large Scale Systems","previousItem":{"@type":"ListItem","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/#listItem","name":"Allgemein"}}]},{"@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\/georg_bhler\/#author","url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/author\/georg_bhler\/","name":"Georg B\u00fchler","image":{"@type":"ImageObject","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/9ae78edcac6fa3fa76aea5ef3c7109312b6b1ac8f3989fd938ad037a67330a18?s=96&d=mm&r=g","width":96,"height":96,"caption":"Georg B\u00fchler"}},{"@type":"WebPage","@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/#webpage","url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/","name":"Suchfunktionalit\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\u00fcr Ultra Large Scale Systems | Computer Science Blog @ HdM Stuttgart","description":"Georg B\u00fchler, Dominik Seitz Abstract: Ride-Hailing-Plattformen wie Uber m\u00fcssen zwei grundlegende Suchprobleme l\u00f6sen, damit Fahrgast und Fahrer zusammenfinden. Zum einen muss der Fahrgast sein gew\u00fcnschtes Ziel \u00fcber eine Texteingabe finden k\u00f6nnen, zum anderen muss aus vielen verf\u00fcgbaren Fahrern der passende f\u00fcr die Fahrt ermittelt werden. Diese Arbeit untersucht m\u00f6gliche technische Umsetzungen f\u00fcr beide Probleme, mit","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/#website"},"breadcrumb":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/#breadcrumblist"},"author":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/author\/georg_bhler\/#author"},"creator":{"@id":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/author\/georg_bhler\/#author"},"datePublished":"2026-08-01T00:27:38+02:00","dateModified":"2026-08-01T00:28:32+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":"Suchfunktionalit\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\u00fcr Ultra Large Scale Systems | Computer Science Blog @ HdM Stuttgart","og:description":"Georg B\u00fchler, Dominik Seitz Abstract: Ride-Hailing-Plattformen wie Uber m\u00fcssen zwei grundlegende Suchprobleme l\u00f6sen, damit Fahrgast und Fahrer zusammenfinden. Zum einen muss der Fahrgast sein gew\u00fcnschtes Ziel \u00fcber eine Texteingabe finden k\u00f6nnen, zum anderen muss aus vielen verf\u00fcgbaren Fahrern der passende f\u00fcr die Fahrt ermittelt werden. Diese Arbeit untersucht m\u00f6gliche technische Umsetzungen f\u00fcr beide Probleme, mit","og:url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/","og:image":"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-5.png","og:image:secure_url":"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-5.png","og:image:width":494,"og:image:height":707,"article:published_time":"2026-07-31T22:27:38+00:00","article:modified_time":"2026-07-31T22:28:32+00:00","twitter:card":"summary","twitter:title":"Suchfunktionalit\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\u00fcr Ultra Large Scale Systems | Computer Science Blog @ HdM Stuttgart","twitter:description":"Georg B\u00fchler, Dominik Seitz Abstract: Ride-Hailing-Plattformen wie Uber m\u00fcssen zwei grundlegende Suchprobleme l\u00f6sen, damit Fahrgast und Fahrer zusammenfinden. Zum einen muss der Fahrgast sein gew\u00fcnschtes Ziel \u00fcber eine Texteingabe finden k\u00f6nnen, zum anderen muss aus vielen verf\u00fcgbaren Fahrern der passende f\u00fcr die Fahrt ermittelt werden. Diese Arbeit untersucht m\u00f6gliche technische Umsetzungen f\u00fcr beide Probleme, mit","twitter:image":"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/grafik-5.png"},"aioseo_meta_data":{"post_id":"29131","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"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-31 20:54:31","updated":"2026-07-31 22:28:32","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\/allgemein\/\" title=\"Allgemein\">Allgemein<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tSuchfunktionalit\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\u00fcr Ultra Large Scale Systems\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/blog.mi.hdm-stuttgart.de"},{"label":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},{"label":"Suchfunktionalit\u00e4t in Ride-Hailing-Plattformen: Destinationssuche und Rider-Driver-Matching f\u00fcr Ultra Large Scale Systems","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/08\/01\/suchfunktionalitat-in-ride-hailing-plattformen-destinationssuche-und-rider-driver-matching-fur-ultra-large-scale-systems\/"}],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":25607,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/08\/15\/usability-in-code-an-overview-from-ide-to-ai\/","url_meta":{"origin":29131,"position":0},"title":"Usability in Code an Overview from IDE to AI","author":"Marc Schillke","date":"15. August 2023","format":false,"excerpt":"Wenn man \u00fcber Usability Kontext von IT redet, wird ein integraler Part gerne komplett \u00fcbersehen: Den Entwickler.Wie soll Usability richtig umgesetzt werden wenn, der der Beides umsetzten, muss von beiden Themen w\u00e4hrend seiner Arbeit nichts mitbekommt?Warum h\u00f6rt Usability immer dort auf, wo der Entwickler auf sein Handwerkszeug schaut? Die Fragen\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\/2023\/08\/download.webp?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/download.webp?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/download.webp?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/download.webp?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/download.webp?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/download.webp?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":27464,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2025\/02\/28\/low-code-no-code-in-der-enterprise-software-entwicklung-fluch-oder\/","url_meta":{"origin":29131,"position":1},"title":"Low-Code\/No-Code in der Enterprise-Software-Entwicklung \u2013 Fluch oder Segen?","author":"Antonia Herdtner","date":"28. February 2025","format":false,"excerpt":"Anmerkung:\u00a0Dieser Blogpost wurde f\u00fcr das Modul Enterprise IT (113601a) verfasst. 1. Einleitung Die fortschreitende digitale Transformation erfordert von Unternehmen eine stetige Anpassung ihrer IT-Strategien, um wettbewerbsf\u00e4hig zu bleiben. Traditionelle Softwareentwicklung erfordert jedoch umfangreiche Programmierkenntnisse, lange Entwicklungszyklen und erhebliche finanzielle Ressourcen. Angesichts des Fachkr\u00e4ftemangels in der IT-Branche und des steigenden Bedarfs\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":[]},{"id":29135,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/31\/security-in-ultra-large-scale-systems\/","url_meta":{"origin":29131,"position":2},"title":"Security in Ultra-Large-Scale Systems","author":"Pascal Leyrer","date":"31. July 2026","format":false,"excerpt":"Computer Science and Media, Hochschule der Medien, Stuttgart, Deutschland Abstract Ultra-Large-Scale-Systeme (ULS) mit mehreren tausend Microservices untergraben die Grundannahme klassischer Perimeter-Sicherheit: Netzwerkgrenzen sind in Cloud-nativen Umgebungen diffus, und ein kompromittierter Workload kann laterale Bewegung im gesamten internen Netz erm\u00f6glichen. Diese Arbeit untersucht, welche Zero-Trust-Mechanismen f\u00fcr eine Plattform nach dem Vorbild\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\/2026\/07\/architecture-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/architecture-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/architecture-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/architecture-1.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":29008,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/31\/frontend-anhand-eines-ultra-large-scale-systems-wie-uber\/","url_meta":{"origin":29131,"position":3},"title":"Frontend anhand eines Ultra-Large-Scale Systems wie Uber","author":"Yinying Shen","date":"31. July 2026","format":false,"excerpt":"Diese Arbeit wurde im Rahmen der Vorlesungsveranstaltung \u201eUltra Large Scale Systems\u201c erstellt. Abstract Ultra-Large-Scale Systems (ULSS) wie Uber stellen aufgrund ihrer hohen Nutzerzahlen, globalen Verteilung, gro\u00dfen Datenmengen und kontinuierlichen Weiterentwicklung besondere Anforderungen an die Frontend-Architektur. Diese Arbeit untersucht zentrale Architekturentscheidungen f\u00fcr das Frontend einer Uber-\u00e4hnlichen Anwendung. Dabei werden Component-based Architecture,\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\/2026\/07\/fe_gesamt_arch-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/fe_gesamt_arch-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/fe_gesamt_arch-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/fe_gesamt_arch-1.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/fe_gesamt_arch-1.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/07\/fe_gesamt_arch-1.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":26208,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2024\/02\/29\/die-meere-der-systemtechnik-navigieren-eine-reise-durch-die-bereitstellung-einer-aktien-webanwendung-in-der-cloud\/","url_meta":{"origin":29131,"position":4},"title":"Die Meere der Systemtechnik navigieren: Eine Reise durch die Bereitstellung einer Aktien-Webanwendung in der Cloud","author":"mk306","date":"29. February 2024","format":false,"excerpt":"Auf zu neuen Ufern: Einleitung Die Cloud-Computing-Technologie hat die Art und Weise, wie Unternehmen Anwendungen entwickeln, bereitstellen und skalieren, revolutioniert. In diesem Beitrag, der im Rahmen der Vorlesung \u201c143101a System Engineering und Management\u201d entstanden ist, werden wir uns darauf konzentrieren, wie eine bereits bestehende Webanwendung zur Visualisierung und Filterung von\u2026","rel":"","context":"In &quot;Cloud Technologies&quot;","block_context":{"text":"Cloud Technologies","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/cloud-technologies\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/Dashboard2-Kopie-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/Dashboard2-Kopie-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/Dashboard2-Kopie-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/Dashboard2-Kopie-1.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/Dashboard2-Kopie-1.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/Dashboard2-Kopie-1.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":29057,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/07\/31\/von-metriken-zu-unknown-unknowns-observability-im-uber-klon\/","url_meta":{"origin":29131,"position":5},"title":"Von Metriken zu Unknown Unknowns: Observability im Uber-Klon","author":"Tom Flocken","date":"31. July 2026","format":false,"excerpt":"Abstract Verteilte Microservice-Architekturen erm\u00f6glichen hohe Skalierbarkeit, erschweren jedoch Betrieb und Fehlersuche, da klassisches Monitoring den Zusammenhang zwischen den vielen Services in Ultra-Large-Scale-Systemen nur unzureichend abbildet. Diese Arbeit konzipiert ein integriertes Monitoring-, Tracing- und Observability-Framework am Beispiel eines Uber-\u00e4hnlichen, verteilten Ride-Sharing-Systems. Dabei werden SLO-basiertes Alerting, Distributed-Tracing-Konzepte mit angepasster Sampling-Strategie sowie eine\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\/2026\/07\/image-3.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":1252,"user_id":1331,"is_guest":0,"slug":"georg_bhler","display_name":"Georg B\u00fchler","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/9ae78edcac6fa3fa76aea5ef3c7109312b6b1ac8f3989fd938ad037a67330a18?s=96&d=mm&r=g","author_category":"","user_url":"","last_name":"B\u00fchler","first_name":"Georg","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/29131","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\/1331"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=29131"}],"version-history":[{"count":14,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/29131\/revisions"}],"predecessor-version":[{"id":29163,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/29131\/revisions\/29163"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=29131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=29131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=29131"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=29131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}