{"id":4159,"date":"2025-10-16T16:13:59","date_gmt":"2025-10-16T14:13:59","guid":{"rendered":"https:\/\/nubisoft.io\/blog\/?p=4159"},"modified":"2025-10-28T22:40:09","modified_gmt":"2025-10-28T21:40:09","slug":"von-objekt-zur-dokumentdatenbank","status":"publish","type":"post","link":"https:\/\/nubisoft.de\/blog\/von-objekt-zur-dokumentdatenbank\/","title":{"rendered":"Migration einer Legacy-Objektdatenbank zu einer Dokumentenarchitektur"},"content":{"rendered":"<div class=\"lazyblock-text-ZtgUpR wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 40px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                  lazyblocks-text-column-border\n                \" style=\"--size-padding-text-block: 40px;\">\n          <h1>Kurzbeschreibung<\/h1>\n<p><span style=\"font-weight: 400;\">Der Kunde wandte sich mit einer Herausforderung an uns: Die Datenbankschicht eines gro\u00dfen, seit vielen Jahren im Einsatz befindlichen Systems sollte modernisiert werden. Das Ziel war klar, aber anspruchsvoll \u2013<\/span><b> die alte Datenbank-Engine sollte ersetzt werden, ohne die Anwendungslogik zu ver\u00e4ndern oder den laufenden Betrieb zu beeintr\u00e4chtigen.<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Gemeinsam mit dem Kunden haben wir:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">eine ma\u00dfgeschneiderte Migrationsstrategie entwickelt,<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">die passende Datenbanktechnologie ausgew\u00e4hlt,<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">einen dedizierten Datenkonverter erstellt und<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">das System so angepasst, dass es mit der neuen Komponente reibungslos funktioniert.<\/span><\/li>\n<\/ul>\n<blockquote>\n<p><b>Heute nutzt das System eine moderne NoSQL-Datenbank \u2013 schneller, wartungsfreundlicher und ohne Ausfallzeiten oder Funktions\u00e4nderungen.<\/b><\/p>\n<\/blockquote>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-text-Z1RRvy4 wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 40px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 70px;\">\n          <h1>Kunde<\/h1>\n<p><span style=\"font-weight: 400;\">Der Kunde ist ein Softwareanbieter im Gesundheitswesen, der innovative Produkte in der DACH-Region anbietet.<\/span><\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-text-aC2dC wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 40px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 70px;\">\n          <h1>Problem<\/h1>\n<p><span style=\"font-weight: 400;\">Der Kunde beauftragte uns, die Datenbankschicht des Systems zu modernisieren.<\/span><span style=\"font-weight: 400;\"><br \/><\/span><strong>Die bestehende L\u00f6sung basierte auf einer rund drei\u00dfig Jahre alten Objektdatenbank-Engine, die sowohl technologisch als auch wirtschaftlich ineffizient geworden war.<\/strong><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Die Technologie unterst\u00fctzte keine inkrementellen Updates \u2013 jedes Update erforderte die Auslieferung einer kompletten Datenbank an die Endkunden.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Inzwischen waren die Datenbankdateien sehr gro\u00df (\u2248 60 GB), was \u00dcbertragungen langsam, fehleranf\u00e4llig und teuer machte.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Der Anbieter der Tools zum Erstellen und Bearbeiten der Datenbanken erh\u00f6hte zudem die Lizenzpreise, wodurch neue Installationen wirtschaftlich unrentabel wurden.<\/span><\/li>\n<\/ul>\n<blockquote>\n<p><strong>Um neue Kunden zu gewinnen, musste der Kunde also eine der zentralen Systemdatenbanken auf eine moderne Technologie umstellen.<\/strong><\/p>\n<\/blockquote>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-text-1cwcwY wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 40px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 70px;\">\n          <h1>Herausforderung<\/h1>\n<p><span style=\"font-weight: 400;\">Der Austausch einer Datenbank in einem so gro\u00dfen System ist ein komplexer Prozess. <\/span><span style=\"font-weight: 400;\">Der Kunde wollte, dass das System weiterhin exakt so funktioniert wie bisher \u2013 nur mit einer effizienteren und kosteng\u00fcnstigeren Datenbanktechnologie.<\/span><\/p>\n<p><strong>Daraus ergaben sich vier zentrale Fragen:<\/strong><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Welche neue Datenbanktechnologie erf\u00fcllt die Anforderungen des Kunden und l\u00f6st die bestehenden Probleme?<\/span><\/li>\n<li>Wie l\u00e4sst sich nur die Datenbank austauschen, ohne die Systemarchitektur grundlegend zu ver\u00e4ndern?<\/li>\n<li>Wie kann man die Altdatenbanken auf die neue Technologie migrieren, ohne Informationen zu verlieren?<\/li>\n<li>Wie kann das Update durchgef\u00fchrt werden, ohne den Betrieb f\u00fcr Endnutzer zu unterbrechen?<\/li>\n<\/ul>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-text-UcCBX wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 20px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 70px;\">\n          <h1>L\u00f6sung<\/h1>\n<p><span style=\"font-weight: 400;\">Wir gehen solche Herausforderungen ohne vorgefertigte Antworten an.<\/span> <span style=\"font-weight: 400;\">Zuerst stehen die gesch\u00e4ftlichen Ziele im Fokus, danach folgt die Auswahl der passenden Technologie.<br \/><br \/><br \/><\/span><\/p>\n<h2>Schritt 1: Auswahl der Datenbanktechnologie<\/h2>\n<p><span style=\"font-weight: 400;\">Die erste Aufgabe bestand darin, eine neue Technologie auszuw\u00e4hlen.<\/span><span style=\"font-weight: 400;\"><br \/><\/span><span style=\"font-weight: 400;\">Bei der Analyse der Optionen ber\u00fccksichtigten wir die Gr\u00fcnde, weshalb der Kunde uns beauftragt hatte:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Der bisherige Anbieter hatte die Preise erh\u00f6ht und so das Wachstum gehemmt.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Die Objektdatenbank war f\u00fcr inkrementelle Datenupdates ungeeignet \u2013 jede \u00c4nderung erforderte die \u00dcbertragung der gesamten Datenbankdatei, was Leistung und Kosten belastete.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Die Gesamtkosten der L\u00f6sung waren entscheidend, daher musste die neue Technologie wirtschaftlich rentabel sein<\/span><b>. <\/b><span style=\"font-weight: 400;\">Open-Source-Optionen boten sich daher nat\u00fcrlich an.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Aus einer Vielzahl m\u00f6glicher Alternativen suchten wir eine L\u00f6sung, die stabil, performant und zugleich flexibel in der Schema-Definition ist \u2013 mit effizienten inkrementellen Schreibvorg\u00e4ngen. <\/span><\/p>\n<blockquote>\n<p><strong>Nach sorgf\u00e4ltiger Abw\u00e4gung entschieden wir uns schlie\u00dflich f\u00fcr eine Open-Source-Dokumentdatenbank.<\/strong><\/p>\n<\/blockquote>\n<p>Warum?<\/p>\n<ul>\n<li>Flexible Schemas, die sich nat\u00fcrlich aus Objektmodellen ableiten lassen<\/li>\n<li>Unterst\u00fctzung inkrementeller Updates \u2013 nur \u00c4nderungen werden \u00fcbertragen, nicht ganze Datenbankdateien<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Hohe Leistung bei gro\u00dfen, heterogenen Datens\u00e4tzen<\/span><\/li>\n<li>Leistungsf\u00e4hige Abfragem\u00f6glichkeiten (Filter, Aggregationen, Volltextsuche)<\/li>\n<li>Zuverl\u00e4ssige Skalierbarkeit in verteilten Umgebungen<\/li>\n<\/ul>\n<p><strong>Kurz gesagt: Die gew\u00e4hlte Datenbank erm\u00f6glicht einfachere Updates, schnellere Iterationen, geringere Kosten und unterst\u00fctzt das weitere Wachstum des Systems.<\/strong><\/p>\n<p><span style=\"font-weight: 400;\"><br \/><br \/><\/span><\/p>\n<h2>Schritt 2: <b>Migration von der Objekt- zur Dokumentdatenbank<\/b><\/h2>\n<p>Nach der Technologieentscheidung folgte ein <em>Fail-Fast-Vorgehen<\/em>, um sowohl die Wahl als auch die Durchf\u00fchrbarkeit der Migration von einer Objektdatenbank zu einem Document Store rasch zu validieren.<\/p>\n<p>Gemeinsam mit dem Kunden w\u00e4hlten wir eine mittelgro\u00dfe Datenbank und entwickelten einen dedizierten Konverter, der:<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Daten aus der alten Objektdatenbank liest,<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">sie in ein dokumentorientiertes Format umwandeln,<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">sie in die neue Dokumentdatenbank schreibt.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Der Prozess lief in mehreren Stufen ab: Der Konverter rief Objekte und deren Beziehungen ab und transformierte sie entsprechend eines abgestimmten Mappings: Einige Strukturen wurden direkt in Dokumente eingebettet, andere als Referenzen zwischen Collections abgebildet.<\/span><\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-inner-Z2ems8X wp-block-lazyblock-inner\">\n<div style=\"--inner-block-max-width:900px;\" class=\"lazyblock-inner-block-section wp-block-lazyblock-inner\">\n    \n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1248\" height=\"618\" src=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/10\/time-reduction-2.png\" alt=\"Ein Balkendiagramm zum Vergleich der Datenkonvertierungsoptimierung: Vorher wurden 7 Tage auf einer 7-Tage-Skala angezeigt, nachher wurde dies auf 12 Stunden reduziert, wodurch eine 14-mal schnellere Leistung erzielt wurde.\" class=\"wp-image-4253\" srcset=\"https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/10\/time-reduction-2.png 1248w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/10\/time-reduction-2-300x149.png 300w\" sizes=\"auto, (max-width: 1248px) 100vw, 1248px\" \/><figcaption class=\"wp-element-caption\">Zu Beginn dauerte der Prozess der Datenbankkonvertierung ganze sieben Tage.<br>Das war nicht akzeptabel \u2013 daher nahmen wir gezielte Optimierungen vor und reduzierten die Dauer auf nur zw\u00f6lf Stunden. <strong>Darauf sind wir ehrlich gesagt ziemlich stolz.<\/strong><\/figcaption><\/figure>\n\n\n<\/div>\n<\/div>\n\n<div class=\"lazyblock-text-ZItDVt wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 20px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 70px;\">\n          <p><span style=\"font-weight: 400;\">Das Tool \u00fcbernahm auch Typkonvertierungen, erzeugte neue IDs, wo n\u00f6tig, und teilte gro\u00dfe Strukturen auf, um die Grenzwerte der NoSQL-Datenbank-Engine einzuhalten. Wegen der Datenmenge lief die gesamte Operation in Batches, um Speicherverbrauch und Fortschritt kontrollieren zu k\u00f6nnen.<\/span><\/p>\n<p><b>Die Testmigration verlief reibungslos<\/b><span style=\"font-weight: 400;\">: Die Daten wurden fehlerfrei \u00fcbertragen, es traten keine Probleme bei der Typkonvertierung auf. Dies best\u00e4tigte, dass die gew\u00e4hlte Datenbanktechnologie optimal zu den Systemanforderungen passte.<\/span><\/p>\n<blockquote>\n<p><strong>Der erfolgreiche Test f\u00fchrte anschlie\u00dfend zur vollst\u00e4ndigen Migration der gesamten Datenbank auf die neue Technologie.<br \/><\/strong><\/p>\n<\/blockquote>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-inner-Z1oMc4H wp-block-lazyblock-inner\">\n<div style=\"--inner-block-max-width:900px;\" class=\"lazyblock-inner-block-section wp-block-lazyblock-inner\">\n    \n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1248\" height=\"618\" src=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/10\/database-size-reduction-1.png\" alt=\"Eine Infografik, die die Reduzierung der Datenbankgr\u00f6\u00dfe von etwa 60 GB in einer alten Objektdatenbank auf etwa 15 GB in einer neuen Dokumentendatenbank darstellt, was zu einer Verringerung um das Vierfache f\u00fchrt.\" class=\"wp-image-4251\" srcset=\"https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/10\/database-size-reduction-1.png 1248w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/10\/database-size-reduction-1-300x149.png 300w\" sizes=\"auto, (max-width: 1248px) 100vw, 1248px\" \/><figcaption class=\"wp-element-caption\">Durch die Zusammenarbeit konnte die endg\u00fcltige Gr\u00f6\u00dfe der Datenbank um etwa das Vierfache reduziert werden.<\/figcaption><\/figure>\n\n\n<\/div>\n<\/div>\n\n<div class=\"lazyblock-text-Z2jRoPF wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 20px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 70px;\">\n          <h2>Schritt 3: Austausch der Datenbank im System<\/h2>\n<p><span style=\"font-weight: 400;\">Nachdem die neue Datenbank bereitstand, passten wir das System an, um die neue Datenbank-Engine zu nutzen.<\/span><\/p>\n<blockquote>\n<p><span style=\"font-weight: 400;\">Die gute Nachricht: Das System verf\u00fcgte bereits \u00fcber eine <\/span><b>Abstraktionsschicht f\u00fcr den Datenzugriff<\/b><span style=\"font-weight: 400;\">, die Gesch\u00e4ftslogik und Datenbank trennte<\/span> <span style=\"font-weight: 400;\">\u2013 und diese war gr\u00f6\u00dftenteils konsequent umgesetzt (mit wenigen direkten Datenbankaufrufen).<\/span><\/p>\n<\/blockquote>\n<p><span style=\"font-weight: 400;\">Das Datenmodell war in Java-Klassen implementiert, die jedoch auf Schnittstellen und Basisklassen des alten Datenbanktreibers angewiesen waren.\u00a0 Diese Abh\u00e4ngigkeiten zu entfernen, war Teil unserer Aufgabe.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Zun\u00e4chst f\u00fchrten wir ein Audit aller Stellen durch, an denen das System mit der alten Datenbank kommunizierte. Darauf basierend definierten wir saubere Schnittstellen zwischen Anwendungslogik und Datenspeicherung<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dann implementierten wir diese Schnittstellen f\u00fcr die neue NoSQL-Datenbank \u2013 unter Nutzung fortgeschrittener Java-Mechanismen wie <\/span><i><span style=\"font-weight: 400;\">Reflection<\/span><\/i><span style=\"font-weight: 400;\"> und <\/span><i><span style=\"font-weight: 400;\">aspektorientierte Programmierung<\/span><\/i><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"> So konnten wir \u00c4nderungen im bestehenden Code minimal halten und die Gesch\u00e4ftslogik nahezu unver\u00e4ndert lassen.<\/span><\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-avatar-14Ul76 wp-block-lazyblock-avatar\">\n\n  <div style=\"--size-margin-avatar-block: 72px;\" class=\"lazyblocks-avatar-wrapper wp-block-lazyblock-avatar\">\n\n    <div class=\"lazyblocks-avatar-content\n    \" style=\"--size-padding-avatar-block: 30px;\">\n\n\n      \n      <div class=\"lazyblocks-avatar-block\">\n\n        \n          <div class=\"lazyblocks-avatar-person-wrapper\">\n            <div class=\"lazyblocks-avatar-image-wrapper\">\n                              <img decoding=\"async\" class=\"lazyblocks-avatar-image\" src=\"https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/08\/1704982341607.jpg\" alt=\"1704982341607.jpg\">\n                          <\/div>\n\n            <div class=\"lazyblocks-avatar-person-details-wrapper\">\n                              <h4 class=\"lazyblocks-avatar-name\">\n                  Luke Warchal                <\/h4>\n              \n                              <span class=\"lazyblocks-avatar-jobtitle\">\n                  CTO @NubiSoft                <\/span>\n                          <\/div>\n          <\/div>\n        \n        \n          <q class=\"lazyblocks-avatar-quote\">\n            Die gr\u00f6\u00dfte Herausforderung war, das Verhalten der alten Engine exakt nachzubilden \u2013 insbesondere bei Such- und Sortierfunktionen, damit das System mit der neuen Datenbank identisch reagierte.          <\/q>\n\n        \n      <\/div>\n    <\/div>\n  <\/div>\n\n<\/div>\n\n<div class=\"lazyblock-text-1MVfdR wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 20px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                \" style=\"--size-padding-text-block: 30px;\">\n          <p><span style=\"font-weight: 400;\">Automatisierte Tests waren hier entscheidend: Wir lie\u00dfen sie parallel auf beiden Versionen laufen und korrigierten Abweichungen sofort.<\/span><\/p>\n<blockquote>\n<p><span style=\"font-weight: 400;\">Unser Vorgehen folgte dem Prinzip: <\/span><b>\u201cMake It Work. Make It Right. Make It Fast.\u201d<\/b><\/p>\n<\/blockquote>\n<p><span style=\"font-weight: 400;\">Zuerst integrierten wir die neue Datenbank in einige UI-Ansichten.<\/span> <span style=\"font-weight: 400;\">Mit Feedback aus manuellen und automatisierten Tests beseitigten wir Fehler und Sonderf\u00e4lle. Anschlie\u00dfend optimierten wir die Performance \u2013 mithilfe eines Profilers wurden Performance-Engp\u00e4sse identifiziert, woraufhin die entsprechenden Codepfade optimiert wurden. Basierend auf den realen Lese- und Schreibmustern wurde zudem Caching implementiert, um die Effizienz weiter zu steigern.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Nachdem Funktionsgleichheit und Leistungsanforderungen erreicht waren, starteten wir die Deployments: Die neue App-Version stand ab sofort f\u00fcr Neukunden bereit, w\u00e4hrend bestehende Installationen gestaffelt migriert wurden \u2013 zuerst die neueren (kleinere Datenmengen, geringeres Risiko), sp\u00e4ter die \u00e4lteren (gr\u00f6\u00dfere Datenmengen, h\u00f6herer Aufwand).<\/span><span style=\"font-weight: 400;\"><br \/><\/span><span style=\"font-weight: 400;\">So blieb der Prozess kontrolliert und st\u00f6rungsfrei.<\/span><\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-inner-1pTBjn wp-block-lazyblock-inner\">\n<div style=\"--inner-block-max-width:900px;\" class=\"lazyblock-inner-block-section wp-block-lazyblock-inner\">\n    \n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1248\" height=\"618\" src=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/10\/horizontal-scaling-gain-1.png\" alt=\"Ein Diagramm, das den \u00dcbergang von vertikaler Skalierung, bei der ein einzelner Server drei Clients bedient, zu horizontaler Skalierung mit vier verteilten Servern, die mehrere Clients bedienen, veranschaulicht.\" class=\"wp-image-4252\" srcset=\"https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/10\/horizontal-scaling-gain-1.png 1248w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/10\/horizontal-scaling-gain-1-300x149.png 300w\" sizes=\"auto, (max-width: 1248px) 100vw, 1248px\" \/><figcaption class=\"wp-element-caption\">Der Austausch der Datenbank diente jedoch nicht nur der Reduzierung ihrer Gr\u00f6\u00dfe.<br>Die von uns entwickelte L\u00f6sung beeinflusste die gesamte Systemarchitektur und erm\u00f6glichte horizontales Skalieren auf Seiten des Endkunden.<\/figcaption><\/figure>\n\n\n<\/div>\n<\/div>\n\n<div class=\"lazyblock-text-1UEu5h wp-block-lazyblock-text\">\n  <div style=\"--size-margin-text-block: 50px;\" class=\"lazyblocks-text-wrapper wp-block-lazyblock-text\">\n    <div class=\"lazyblocks-text-columns-wrapper\">\n              <div class=\"lazyblocks-text-column\n                  lazyblocks-text-column-border\n                          lazyblocks-text-big-font-quote\n        \" style=\"--size-padding-text-block: 70px;\">\n          <h2><strong>Erkenntnisse\u00a0<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">In diesem Projekt entwickelten wir praxisbew\u00e4hrtes Know-how f\u00fcr die Migration von einer Objektdatenbank zu einem Dokumenten-Store \u2013 bei durchgehendem Systembetrieb.<\/span><\/p>\n<ul>\n<li><b>Nutzung einer bestehenden Datenzugriffsabstraktion in Legacy-Systemen<br \/><\/b><span style=\"font-weight: 400;\">Wir entwickelten einen Ansatz, der die vorhandene Abstraktionsschicht nutzt und einen Adapter f\u00fcr die neue Engine bereitstellt. Dadurch blieben Code\u00e4nderungen minimal und das Risiko, Fehler in die Anwendungslogik einzuschleusen, gering.<br \/><br \/><\/span><\/li>\n<li><b>Reproduzierbare Migrationspipeline (Objekt-DB \u279d Dokumenten-DB)<br \/><\/b><span style=\"font-weight: 400;\">Wir erstellten einen Offline-Java-Konverter mit klar definiertem Datenmodell-Mapping (Einbettung\/Referenzierung), Typkonvertierungen, ID-Erzeugung und Batch-Verarbeitung gro\u00dfer Datenmengen. Diese Tools und Verfahren k\u00f6nnen f\u00fcr zuk\u00fcnftige Installationen wiederverwendet werden.<br \/><br \/><\/span><\/li>\n<li><b>Operational Playbook f\u00fcr gro\u00dfe On-Premise-Migrationen<br \/><\/b><span style=\"font-weight: 400;\">Wir sammelten praktische Erfahrung mit Migrationen w\u00e4hrend Wartungsfenstern, Fortschritts\u00fcberwachung, Ergebnisvalidierung und vorbereiteten Rollback-Szenarien \u2013 mit Fokus auf Servicekontinuit\u00e4t und minimaler Ausfallzeit.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Wenn Sie vor einer \u00e4hnlichen Herausforderung stehen, zeigen wir Ihnen gern,<\/span><span style=\"font-weight: 400;\"><br \/><\/span><span style=\"font-weight: 400;\">wie Sie eine Datenbank in einem laufenden Produktivsystem ersetzen k\u00f6nnen \u2013 mit minimalen \u00c4nderungen an der Anwendungslogik und ohne Ausfallzeiten.<\/span><\/p>\n<p>&nbsp;<\/p>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-contact-form-1MrrJl wp-block-lazyblock-contact-form\">\n\n    <div class=\"lazyblock-contact-form-contact-section wp-block-lazyblock-contact-form\">\n        <div class=\"lazyblock-contact-form-contact-section-inner\">\n\n                            <dialog id=\"ns-pop-up-dialog\" class=\"lazyblock-contact-form-dialog\">\n                                <div class=\"lazyblock-contact-form-contact-wrapper\">\n\n                    <div class=\"lazyblock-contact-form-contact-title-wrapper\">\n                        <h2 class=\"lazyblock-contact-form-contact-title\">\n                            Kontakt                        <\/h2>\n                        <p class=\"lazyblock-contact-form-contact-description\">\n                            Hinterlassen Sie einfach Ihre E-Mail, und wir melden uns gerne bei Ihnen, um ein unverbindliches Online-Meeting zu vereinbaren und gemeinsam zu besprechen, wie wir uns gegenseitig unterst\u00fctzen k\u00f6nnen.                        <\/p>\n\n                    <\/div>\n                    <script type=\"text\/javascript\" src=\" https:\/\/m.nubisoft.io\/form\/generate.js?id=3\"><\/script>\n                                            <button class=\"lazyblock-contact-form-close-button\">\n                        <\/button>\n                                    <\/div>\n                \n                <\/dialog>\n                <button class=\"lazyblock-contact-form-button\" id=\"ns-pickup-button\">\n                    Kontaktieren Sie uns                <\/button>\n\n            \n        <\/div>\n    <\/div>\n\n<\/div>\n\n<div class=\"lazyblock-posts-23lHxi wp-block-lazyblock-posts\">\n\n\n<div style=\"--size-margin-posts-block: 70px;\" class=\"lazyblocks-posts-wrapper wp-block-lazyblock-posts\">\n                                <h3 class=\"lazyblocks-posts-header\">Das k\u00f6nnte Sie auch interessieren:<\/h3>                     \n\n        <div class=\"lazyblocks-posts-container\">\n\n                            <div class=\"lazyblocks-posts-single-wrapper\">\n                                        <a class=\"lazyblocks-posts-image-wrapper\" style=\"--post-thumbail-url: url('https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/07\/krankenhausapotheke_webanwendung_titelbild-150x150.png');\" href=\"https:\/\/nubisoft.de\/blog\/webanwendung-fur-krankenhausapotheken\/\">\n\n\n                                                    <img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"287\" src=\"https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/07\/krankenhausapotheke_webanwendung_titelbild-1024x507.png\" class=\"lazyblocks-posts-image wp-post-image\" alt=\"Dieses Bild ist das Titelbild einer Fallstudie mit dem Titel \u201eWebanwendung f\u00fcr Krankenhausapotheke\u201c. Es zeigt das \u201eNubiSoft\u201c-Logo \u00fcber einer Fotografie eines modernen Krankenhaus- oder gro\u00dfen Institutionsgeb\u00e4udes.\" srcset=\"https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/07\/krankenhausapotheke_webanwendung_titelbild-1024x507.png 1024w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/07\/krankenhausapotheke_webanwendung_titelbild-300x149.png 300w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/07\/krankenhausapotheke_webanwendung_titelbild-768x380.png 768w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/07\/krankenhausapotheke_webanwendung_titelbild-1200x594.png 1200w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/07\/krankenhausapotheke_webanwendung_titelbild.png 1248w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/>                                            <\/a>\n\n                    <div class=\"lazyblocks-posts-info-wrapper\">\n                                                    <div class=\"lazyblocks-posts-category-wrapper\">\n                                <a href=\"https:\/\/nubisoft.de\/blog\/category\/case-study-de\/\" rel=\"category tag\">Case study<\/a> <a href=\"https:\/\/nubisoft.de\/blog\/category\/gesundheitswesen\/\" rel=\"category tag\">Gesundheitswesen<\/a>                            <\/div>\n                        \n                        <span class=\"lazyblocks-posts-read-time\">1 min read<\/span>                    <\/div>\n\n\n                    <div class=\"lazyblocks-posts-title-wrapper\">\n                        <h2 class=\"lazyblocks-posts-title\"><a href=\"https:\/\/nubisoft.de\/blog\/webanwendung-fur-krankenhausapotheken\/\">Webanwendung f\u00fcr Krankenhausapotheken<\/a><\/h2>\n                        <a class=\"lazyblocks-posts-read-more\" href=\"https:\/\/nubisoft.de\/blog\/webanwendung-fur-krankenhausapotheken\/\">Read more<\/a>\n                    <\/div>\n                <\/div>\n                            <div class=\"lazyblocks-posts-single-wrapper\">\n                                        <a class=\"lazyblocks-posts-image-wrapper\" style=\"--post-thumbail-url: url('https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/04\/1-1-150x150.png');\" href=\"https:\/\/nubisoft.de\/blog\/it-modernisierung-im-gesundheitswesen-zwei-effektive-strategien\/\">\n\n\n                                                    <img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"287\" src=\"https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/04\/1-1-1024x507.png\" class=\"lazyblocks-posts-image wp-post-image\" alt=\"\" srcset=\"https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/04\/1-1-1024x507.png 1024w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/04\/1-1-300x149.png 300w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/04\/1-1-768x380.png 768w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/04\/1-1-1200x594.png 1200w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/04\/1-1.png 1248w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/>                                            <\/a>\n\n                    <div class=\"lazyblocks-posts-info-wrapper\">\n                                                    <div class=\"lazyblocks-posts-category-wrapper\">\n                                <a href=\"https:\/\/nubisoft.de\/blog\/category\/nicht-kategorisiert\/\" rel=\"category tag\">Nicht kategorisiert<\/a>                            <\/div>\n                        \n                        <span class=\"lazyblocks-posts-read-time\">0 min read<\/span>                    <\/div>\n\n\n                    <div class=\"lazyblocks-posts-title-wrapper\">\n                        <h2 class=\"lazyblocks-posts-title\"><a href=\"https:\/\/nubisoft.de\/blog\/it-modernisierung-im-gesundheitswesen-zwei-effektive-strategien\/\">IT Modernisierung im Gesundheitswesen: Zwei effektive Strategien<\/a><\/h2>\n                        <a class=\"lazyblocks-posts-read-more\" href=\"https:\/\/nubisoft.de\/blog\/it-modernisierung-im-gesundheitswesen-zwei-effektive-strategien\/\">Read more<\/a>\n                    <\/div>\n                <\/div>\n                            <div class=\"lazyblocks-posts-single-wrapper\">\n                                        <a class=\"lazyblocks-posts-image-wrapper\" style=\"--post-thumbail-url: url('https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/02\/Interview-mit-Helga-150x150.png');\" href=\"https:\/\/nubisoft.de\/blog\/das-e-rezept-zwischen-fortschritt-und-frustration-eine-apothekenperspektive\/\">\n\n\n                                                    <img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"326\" src=\"https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/02\/Interview-mit-Helga-1024x576.png\" class=\"lazyblocks-posts-image wp-post-image\" alt=\"\" srcset=\"https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/02\/Interview-mit-Helga-1024x576.png 1024w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/02\/Interview-mit-Helga-300x169.png 300w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/02\/Interview-mit-Helga-768x432.png 768w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/02\/Interview-mit-Helga-1536x864.png 1536w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/02\/Interview-mit-Helga-1200x675.png 1200w, https:\/\/nubisoft.de\/blog\/wp-content\/uploads\/2025\/02\/Interview-mit-Helga.png 1920w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/>                                            <\/a>\n\n                    <div class=\"lazyblocks-posts-info-wrapper\">\n                                                    <div class=\"lazyblocks-posts-category-wrapper\">\n                                <a href=\"https:\/\/nubisoft.de\/blog\/category\/nicht-kategorisiert\/\" rel=\"category tag\">Nicht kategorisiert<\/a>                            <\/div>\n                        \n                        <span class=\"lazyblocks-posts-read-time\">0 min read<\/span>                    <\/div>\n\n\n                    <div class=\"lazyblocks-posts-title-wrapper\">\n                        <h2 class=\"lazyblocks-posts-title\"><a href=\"https:\/\/nubisoft.de\/blog\/das-e-rezept-zwischen-fortschritt-und-frustration-eine-apothekenperspektive\/\">Das e-Rezept: Zwischen Fortschritt und Frust \u2013 Eine Apothekenperspektive<\/a><\/h2>\n                        <a class=\"lazyblocks-posts-read-more\" href=\"https:\/\/nubisoft.de\/blog\/das-e-rezept-zwischen-fortschritt-und-frustration-eine-apothekenperspektive\/\">Read more<\/a>\n                    <\/div>\n                <\/div>\n                    <\/div>\n    <\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Wie kann man eine Datenbank in einem komplexen Legacy-System ersetzen, ohne die Anwendungslogik neu zu schreiben? Diese Fallstudie zeigt, wie wir durch die Nutzung einer bestehenden Abstraktionsschicht und eines Datenkonvertierungsmechanismus die Migration von einer veralteten Objektdatenbank zu einer modernen NoSQL-Datenbank erfolgreich umgesetzt haben.<\/p>\n","protected":false},"author":13,"featured_media":4255,"comment_status":"open","ping_status":"open","sticky":false,"template":"post-2024.php","format":"standard","meta":{"_case_study_excerpt":"","footnotes":""},"categories":[559,253],"tags":[524,367],"class_list":["post-4159","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-case-study-de","category-gesundheitswesen","tag-gesundheitswesen","tag-legacy"],"_links":{"self":[{"href":"https:\/\/nubisoft.de\/blog\/wp-json\/wp\/v2\/posts\/4159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nubisoft.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nubisoft.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nubisoft.de\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/nubisoft.de\/blog\/wp-json\/wp\/v2\/comments?post=4159"}],"version-history":[{"count":25,"href":"https:\/\/nubisoft.de\/blog\/wp-json\/wp\/v2\/posts\/4159\/revisions"}],"predecessor-version":[{"id":4260,"href":"https:\/\/nubisoft.de\/blog\/wp-json\/wp\/v2\/posts\/4159\/revisions\/4260"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nubisoft.de\/blog\/wp-json\/wp\/v2\/media\/4255"}],"wp:attachment":[{"href":"https:\/\/nubisoft.de\/blog\/wp-json\/wp\/v2\/media?parent=4159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nubisoft.de\/blog\/wp-json\/wp\/v2\/categories?post=4159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nubisoft.de\/blog\/wp-json\/wp\/v2\/tags?post=4159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}