{"id":4111,"date":"2025-10-27T11:25:16","date_gmt":"2025-10-27T10:25:16","guid":{"rendered":"https:\/\/nubisoft.io\/blog\/?p=4111"},"modified":"2026-01-27T21:15:03","modified_gmt":"2026-01-27T20:15:03","slug":"from-object-to-document-database","status":"publish","type":"post","link":"https:\/\/nubisoft.io\/blog\/from-object-to-document-database\/","title":{"rendered":"Migrating a Legacy Object Database to a Document Architecture"},"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>Brief<\/h1>\n<p>The client approached us with a challenge: to modernize the database layer of a large, long-running system built on outdated technology. The goal was simple yet ambitious \u2014 to replace the legacy database engine without disrupting the application logic or affecting end users.<\/p>\n<p>By working together, we:<\/p>\n<ul>\n<li>Developed a customized migration strategy.<\/li>\n<li>Selected the most appropriate database technology.<\/li>\n<li>Created a dedicated data converter.<\/li>\n<li>Modified the system to run with the new component.<\/li>\n<\/ul>\n<blockquote>\n<p><strong>Right now, the system uses NoSQL database, which is faster and easier to maintain. It also doesn&#8217;t require any downtime or functional changes.<\/strong><\/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>Client<\/h1>\n<p><span style=\"font-weight: 400;\">The client is a healthcare software provider offering innovative products in the DACH region.<\/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;\">The client asked us to help modernize the system\u2019s database layer. <strong>The existing solution ran on an thirty years old object database engine, which had become inefficient both technologically and commercially.<\/strong><\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The technology did not support incremental patches, so each update required shipping a complete database to end clients.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">At this stage of the system\u2019s growth, database files were very large (\u224860 GB), making transfers slow, error prone and expensive.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The vendor supplying the tools for creating and editing the databases raised license prices, making each new deployment commercially unprofitable.<\/span><\/li>\n<\/ul>\n<blockquote>\n<p><strong>To acquire new customers, the client had to update one of its core systems\u2019 database technology.\u00a0<\/strong><\/p>\n<\/blockquote>        <\/div>\n      \n      \n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"lazyblock-text-1Gi1Bc 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>Challenge<\/h1>\n<p><span style=\"font-weight: 400;\">Replacing the database in such a large system is a complex operation. The client wanted the system to keep doing exactly what it did \u2013 just with a more efficient and cost-effective database technology. To solve this problem, we had to answer:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Which new database technology best fits the client\u2019s requirements and solves the current problems?<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">How can we update only the database, without overhauling the system architecture?<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">How do we migrate legacy databases to the new technology without losing information?<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">How can we execute the update without interrupting service for end users?<\/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><b>Solution<\/b><\/h1>\n<p><span style=\"font-weight: 400;\">We approach problems like this without preconceived answers, focusing first on the business outcomes and then on the enabling technology choices.<br \/><br \/><\/span><\/p>\n<h3>Step 1: Selecting the database technology<b><br \/><\/b><\/h3>\n<p><span style=\"font-weight: 400;\">The first challenge we faced was selecting a new technology. When analyzing the available options, we kept in mind the reason why the customer came to us: <\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400;\">The current vendor had raised prices, blocking business growth. <\/span><\/li>\n<li><span style=\"font-weight: 400;\">The object database struggled with incremental data updates. Every change required sending the entire database file, hurting performance and raising operating costs.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Given that keeping the total solution costs down was crucial for the client, we naturally gravitated toward open-source solutions. With so many options available, we knew the new database had to be stable, high-performing, and support a flexible schema along with efficient incremental data writes.<\/span><\/p>\n<blockquote>\n<p>After careful consideration, we ultimately decided to move forward with an <strong>open-source document database.<\/strong><\/p>\n<\/blockquote>\n<p><span style=\"font-weight: 400;\">Why<\/span><span style=\"font-weight: 400;\">? Because it:<\/span><\/p>\n<ul>\n<li>Provides a flexible schema that maps naturally from object models.<\/li>\n<li>Enables incremental updates (to transmit only changes, not entire database files)<\/li>\n<li>Delivers strong performance on large, heterogeneous datasets.<\/li>\n<li>Offers rich querying capabilities, including filtering, aggregations, and full-text search.<\/li>\n<li>Scales reliably in distributed environments.<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">In short, the chosen database enables easier updates, faster iteration, lower costs, and supports further system growth.<br \/><br \/><br \/><br \/><\/span><\/p>\n<h3>Step 2: Migrating from object to document database<\/h3>\n<p><span style=\"font-weight: 400;\">After choosing the technology, we applied a <\/span><b>fail-fast<\/b><span style=\"font-weight: 400;\"> approach to quickly validate both the choice and the feasibility of migrating from an object database to a document store.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Together with the client, we picked a mid-sized database and built a dedicated converter that would:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">read data from the legacy object database,<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Rransform it into a document oriented format, and<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">write it to the target document database.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">The process ran in stages: the converter retrieved objects and their relationships, then transformed them according to an agreed mapping \u2013 embedding some structures directly in documents and representing others as references between collections.<\/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.png\" alt=\"A bar chart comparing data conversion optimization: before showing 7 days across a 7-day scale, and after reduced to 12 hours, achieving 14x faster performance.\" class=\"wp-image-4121\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/10\/time-reduction.png 1248w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/10\/time-reduction-300x149.png 300w\" sizes=\"auto, (max-width: 1248px) 100vw, 1248px\" \/><figcaption class=\"wp-element-caption\">Initially, the process of converting the database took\u2026<strong> seven days!<\/strong> This wasn&#8217;t good enough, so we made improvements and managed to cut the time down to just<strong> 12 hours<\/strong>. And yes, we are really proud of that!<\/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;\">The tool also handled type conversions, generated new identifiers where needed, and split larger structures into smaller units to <\/span><span style=\"font-weight: 400;\">comply with the NoSQL database engine limits<\/span><span style=\"font-weight: 400;\">. Due to the database size, the whole operation ran in batches to control memory and track progress.<\/span><\/p>\n<p><strong>The test database migration process went smoothly<\/strong>. The data was transferred without a hitch, and there were no problems during type conversion. This confirmed that the selected database technology was the right fit for the system\u2019s requirements.<\/p>\n<blockquote>\n<p><strong>Success at this stage led to migrating the entire database to the new technology.<\/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.png\" alt=\"An infographic depicting database size reduction from approximately 60 GB in a legacy object database to about 15 GB in a new document database, resulting in a 4x decrease.\" class=\"wp-image-4119\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/10\/database-size-reduction.png 1248w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/10\/database-size-reduction-300x149.png 300w\" sizes=\"auto, (max-width: 1248px) 100vw, 1248px\" \/><figcaption class=\"wp-element-caption\">As a result of our cooperation, the final size of the database was reduced by <strong>approximately four times<\/strong>.<\/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          <h3>Step 3: Swapping the database inside the system<\/h3>\n<p><span style=\"font-weight: 400;\">With the new database ready, we adapted the system to use the new database engine.<\/span><\/p>\n<blockquote>\n<p><strong>The good news: the system already had a data-access abstraction layer<\/strong><span style=\"font-weight: 400;\"><strong> separating business logic from the concrete database, and it was applied quite rigorously \u2013 though there were spots with direct database calls.<\/strong> <\/span><\/p>\n<\/blockquote>\n<p><span style=\"font-weight: 400;\">The data model was implemented as Java classes that also depended on interfaces and base classes provided by the object-database driver. Removing those dependencies was one of our tasks.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">We began by auditing all places where the system talked to the old database. Based on this, we defined clean interfaces at the boundary between application logic and data storage. Next, we implemented those interfaces for the new NoSQL database, using advanced Java mechanisms such as reflection and aspect-oriented programming. This kept changes to existing code relatively small and minimized edits to business logic.<\/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.io\/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                  \u0141ukasz Warcha\u0142                <\/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            The hardest part was faithfully replicating the old engine\u2019s behavior \u2013 especially search and sorting \u2013 so that the system using the new database behaved exactly as before.          <\/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;\">Automated tests were key: we ran them in parallel on both versions and quickly found and fixed any differences.<\/span><\/p>\n<blockquote>\n<p><span style=\"font-weight: 400;\">We followed the rule <\/span><b>\u201cMake It Work. Make It Right. Make It Fast.\u201d<\/b><\/p>\n<\/blockquote>\n<p><span style=\"font-weight: 400;\">First, we plugged the new database into a few UI views. With feedback from manual and automated tests, we fixed bugs and edge cases. Finally, we optimized performance: using a profiler to find slow spots, then tuning code paths. Knowing real-world read\/write patterns, we also added caching.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Once we hit the required performance and functional parity, we moved to deployments. The new app version was immediately used for new customers, while existing installations were migrated in stages: newer ones first (smaller data, lower risk), older long-running ones later (much larger data, requiring extra care). This kept the process smooth and controlled.<\/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.png\" alt=\"A diagram illustrating the transition from vertical scaling, with a single server handling three clients, to horizontal scaling, featuring four distributed servers serving multiple clients.\" class=\"wp-image-4120\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/10\/horizontal-scaling-gain.png 1248w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/10\/horizontal-scaling-gain-300x149.png 300w\" sizes=\"auto, (max-width: 1248px) 100vw, 1248px\" \/><figcaption class=\"wp-element-caption\">Replacing the database is not just about reducing its size. The solution we proposed affected the entire architecture and enabled horizontal scaling on the end customer&#8217;s side.<\/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><b>Lessons Learned\u00a0<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">In this project we built practical know-how for migrating from an object database to a document store while maintaining continuous system operation.<\/span><\/p>\n<ul>\n<li><b>Using an existing data-access abstraction in a legacy system<\/b><b><br \/><\/b><span style=\"font-weight: 400;\">We developed an approach that leverages the existing abstraction layer and builds an adapter for the new engine. This limits code changes and minimizes risk of introducing bugs into application logic.<br \/><br \/><\/span><\/li>\n<li><b>A repeatable migration pipeline (object DB \u279d Document DB)<\/b><b><br \/><\/b><span style=\"font-weight: 400;\">We built an offline Java converter with clearly defined data-model mapping (embed\/reference), type conversions, ID generation, and batch processing of large data volumes. We now have tools and procedures that can be reused for future installations.<br \/><br \/><\/span><\/li>\n<li><b>Operational playbooks for large on-premise migrations<\/b><b><br \/><\/b><span style=\"font-weight: 400;\">We have hands-on practice running migrations during maintenance windows, tracking progress, validating outcomes, and ready-made rollback scenarios \u2013 focused on continuity of service and minimal downtime.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">If you&#8217;re facing a similar challenge, we can show you how to replace a database in a live production system without affecting application logic or interrupting operations.<\/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                            Who are we?                        <\/h2>\n                        <p class=\"lazyblock-contact-form-contact-description\">\n                            At NubiSoft, we partner with medical software companies to develop their products by providing specialized IT solutions. If you\u2019re considering adding new features and need assistance, feel free to contact us.                        <\/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                    Contact us                <\/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\">People who read this article also read:<\/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.io\/blog\/wp-content\/uploads\/2025\/06\/hospital_pharmacy_web_app_cover.jpg-150x150.png');\" href=\"https:\/\/nubisoft.io\/blog\/case-study-software-modernization-for-hospital-pharmacies\/\">\n\n\n                                                    <img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"287\" src=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/06\/hospital_pharmacy_web_app_cover.jpg-1024x507.png\" class=\"lazyblocks-posts-image wp-post-image\" alt=\"This image is the cover of a case study titled &quot;Web Application for Hospital Pharmacies in Germany.&quot; It features the &quot;NubiSoft&quot; logo overlaid on a photograph of a modern hospital or large institutional building.\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/06\/hospital_pharmacy_web_app_cover.jpg-1024x507.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/06\/hospital_pharmacy_web_app_cover.jpg-300x149.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/06\/hospital_pharmacy_web_app_cover.jpg-768x380.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/06\/hospital_pharmacy_web_app_cover.jpg-1200x594.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2025\/06\/hospital_pharmacy_web_app_cover.jpg.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.io\/blog\/category\/case-study\/\" rel=\"category tag\">Case study<\/a> <a href=\"https:\/\/nubisoft.io\/blog\/category\/healthcare\/\" rel=\"category tag\">Healthcare<\/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.io\/blog\/case-study-software-modernization-for-hospital-pharmacies\/\">Ataxe Web by Mesalvo \u2013 Web Application for Hospital Pharmacies in Germany<\/a><\/h2>\n                        <a class=\"lazyblocks-posts-read-more\" href=\"https:\/\/nubisoft.io\/blog\/case-study-software-modernization-for-hospital-pharmacies\/\">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.io\/blog\/wp-content\/uploads\/2024\/12\/Healthcare-System-Modernization_title-150x150.png');\" href=\"https:\/\/nubisoft.io\/blog\/healthcare-system-modernization-two-proven-strategies\/\">\n\n\n                                                    <img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"287\" src=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/12\/Healthcare-System-Modernization_title-1024x507.png\" class=\"lazyblocks-posts-image wp-post-image\" alt=\"A title slide with NubiSoft logo introducing &quot;Two Strategies for: Healthcare System Modernization&quot; against a dark background with subtle circular elements.\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/12\/Healthcare-System-Modernization_title-1024x507.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/12\/Healthcare-System-Modernization_title-300x149.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/12\/Healthcare-System-Modernization_title-768x380.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/12\/Healthcare-System-Modernization_title-1200x594.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/12\/Healthcare-System-Modernization_title.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.io\/blog\/category\/healthcare\/\" rel=\"category tag\">Healthcare<\/a> <a href=\"https:\/\/nubisoft.io\/blog\/category\/infrastructure\/\" rel=\"category tag\">Infrastructure<\/a> <a href=\"https:\/\/nubisoft.io\/blog\/category\/software-development\/\" rel=\"category tag\">Software Development<\/a> <a href=\"https:\/\/nubisoft.io\/blog\/category\/system-architecture\/\" rel=\"category tag\">System Architecture<\/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.io\/blog\/healthcare-system-modernization-two-proven-strategies\/\">Healthcare System Modernization: Two Proven Strategies<\/a><\/h2>\n                        <a class=\"lazyblocks-posts-read-more\" href=\"https:\/\/nubisoft.io\/blog\/healthcare-system-modernization-two-proven-strategies\/\">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.io\/blog\/wp-content\/uploads\/2024\/02\/Blog-template-150x150.png');\" href=\"https:\/\/nubisoft.io\/blog\/nubisofts-role-in-advancing-health-e-services\/\">\n\n\n                                                    <img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"287\" src=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/02\/Blog-template-1024x507.png\" class=\"lazyblocks-posts-image wp-post-image\" alt=\"\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/02\/Blog-template-1024x507.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/02\/Blog-template-300x149.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/02\/Blog-template-768x380.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/02\/Blog-template-1200x594.png 1200w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2024\/02\/Blog-template.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.io\/blog\/category\/case-study\/\" rel=\"category tag\">Case study<\/a> <a href=\"https:\/\/nubisoft.io\/blog\/category\/healthcare\/\" rel=\"category tag\">Healthcare<\/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.io\/blog\/nubisofts-role-in-advancing-health-e-services\/\">NubiSoft\u2019s Role in Advancing Health E-Services<\/a><\/h2>\n                        <a class=\"lazyblocks-posts-read-more\" href=\"https:\/\/nubisoft.io\/blog\/nubisofts-role-in-advancing-health-e-services\/\">Read more<\/a>\n                    <\/div>\n                <\/div>\n                    <\/div>\n    <\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>How can you replace a database in a complex legacy system without rewriting its application logic? This case study shows how we migrated from a legacy object database to a modern NoSQL database by using an existing abstraction layer and smart data conversion.<\/p>\n","protected":false},"author":13,"featured_media":4203,"comment_status":"open","ping_status":"open","sticky":false,"template":"post-2024.php","format":"standard","meta":{"_case_study_excerpt":"","footnotes":""},"categories":[80,221,5,45],"tags":[34,512,573],"class_list":["post-4111","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-case-study","category-healthcare","category-infrastructure","category-system-architecture","tag-database","tag-healthcare-en","tag-modernization"],"_links":{"self":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts\/4111","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/comments?post=4111"}],"version-history":[{"count":45,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts\/4111\/revisions"}],"predecessor-version":[{"id":4248,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts\/4111\/revisions\/4248"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/media\/4203"}],"wp:attachment":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/media?parent=4111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/categories?post=4111"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/tags?post=4111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}