<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Kontrolliertes Schema-Evolutionsmanagement fur NoSQL-Datenbanksysteme</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Uta Storl</string-name>
          <email>uta.stoerl@h-da.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Meike Klettke</string-name>
          <email>meike.klettke@uni-rostock.de</email>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Stefanie Scherzinger</string-name>
          <email>stefanie.scherzinger@oth-regensburg.de</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Hochschule Darmstadt</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>OTH Regensburg</institution>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Universitat Rostock</institution>
        </aff>
      </contrib-group>
      <fpage>439</fpage>
      <lpage>443</lpage>
      <abstract>
        <p>Zusammenfassung. In der agilen Entwicklung von Anwendungen werden neue Software-Versionen hau g und regelma ig vero entlicht. Relationale Datenbanksysteme mit ihrem rigiden Schema-Management werden dabei oft als un exibel empfunden. Schemalose NoSQL-Datenbanksysteme bieten zwar die notige Flexibilitat, unterstutzen aber kein systematisches Release- und Schema-Evolutionsmanagement. Dieser Artikel stellt entsprechende Konzepte vor: Schema-Evolutionsschritte werden deklarativ spezi ziert, ihre Umsetzung erfolgt fur die Anwendung transparent eager oder lazy. Wahrend eine eager Migration samtliche Datensatze erfasst, werden lazy persistierte Objekte nur bei Zugri durch die Anwendung aktualisiert. Wir diskutieren eine e ziente lazy Migration selbst fur den Fall, dass eine Migration uber mehrere Evolutionsschritte und mehrere persistierte Objekte hinweg erfolgt.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Schemaanderungen in einem verteilten System zu propagieren.
Schemaanderungen werden hier zwar asynchron, aber eager ausgefuhrt.</p>
      <p>Database-as-a-Service Kunden sind allerdings sehr daran interessiert, unnotige
(kostenp ichtige) Lese- und Schreiboperationen gegen die Datenbank zu
vermeiden. Das macht eine lazy Datenmigration besonders interessant, da persistierte
Objekte nur dann migriert werden, wenn die Anwendung auch auf sie zugreift.</p>
      <p>
        KVolve [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] vollzieht lazy Schemaanderungen in NoSQL-DBMS mit einem
nachweislich niedrigen Overhead. Allerdings werden nur einfache Operationen
unterstutzt, wie das Hinzufugen und Entfernen von Attributen. Da die meisten
NoSQL-DBMS keine Join-Operationen unterstutzen, stellen
Denormalisierungsoperationen, und damit komplexere Schema- Anderungen wie copy oder move
Operationen, wichtige Schema-Evolutionsschritte dar.
      </p>
      <p>
        Unsere deklarative Evolutionssprache aus [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] unterstutzt entsprechend das
Kopieren von Attributen zwischen persistierten Objekten. Wir zeigen in diesem
Artikel, dass sich dadurch neue Herausforderungen an die Korrektheit einer lazy
Migration stellen (Kapitel 2). In Kapitel 3 prasentierten wir das Darwin Projekt4
mit der lazy Implementierung unserer Evolutionssprache. Die Zusammenfassung
und ein Ausblick auf weitere Vorhaben folgen am Ende des Artikels.
2
      </p>
    </sec>
    <sec id="sec-2">
      <title>Lazy Migration</title>
      <p>Bei der lazy Migration wird ein Entity (d.h. ein persistiertes Objekt) erst zum
Zeitpunkt seiner Verwendung in das aktuelle Schema migriert. Dabei bleibt die
Datenbank fur die Anwendung verfugbar. Aus Sicht der Anwendung muss
transparent bleiben, ob die Daten eager oder lazy migriert werden; das stellt eine
Herausforderung bei der Entwicklung von lazy Migrationsprotokollen dar.
Beispiel: Abbildung 1 zeigt die Daten eines Online-Rollenspiels uber mehrere
Versionen der Anwendung hinweg. In der NoSQL-DB werden Player und ihre
Missionen persistiert. Das Schema entwickelt sich mit der Anwendung, so wird
in Version 2 ein neues Attribut SCORE zur Klasse Player hinzugefugt. Bei einer
lazy Migration werden persistierte Entities nicht unmittelbar bei der Vero
entlichung einer neuen Anwendungsversion aktualisiert. Erst wenn Player Lisa von
Version 2 der Anwendung geladen wird, erfolgt das Hinzufugen des Attributes
SCORE. Beim U bergang zu Schema-Version 3 soll das Attribut SCORE von
der Klasse Player zur Klasse Mission kopiert5 werden. Diese Operation wird fur
Mission 100 erst dann ausgefuhrt, wenn diese in die Anwendung geladen wird.</p>
      <p>
        Die analoge Vorgehensweise fuhrt bei Mission 101 zu einem inkorrekten
Ergebnis: In Abbildung 1 wird die copy Operation mit einer noch nicht
migrierten Version von Player Bart ausgefuhrt. Dementsprechend wird kein
SCOREAttribut kopiert. Das geladene Objekt unterscheidet sich von dem Objekt, das
4 In einer fruheren Implementierung wurde unsere Sprache aus [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] in der Cleager
Konsole eager mit Hilfe von MapReduce Prozessen umgesetzt [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
5 Wie in Abbildung 1 zu sehen, erfolgt die Auswahl der target Entites bei der copy
Operation durch die Angabe einer geeigneten where-Klausel (analoges gilt fur move).
Abb. 1. Mission 100 wird lazy migriert, indem das SCORE-Attribut des Spielers
kopiert wird. Bei Mission 101 fuhrt diese Vorgehensweise zu einem inkorrekten Ergebnis.
durch eine eager Migration geladen worden ware. Wenn mehrere
Evolutionsschritte lazy nachzuvollziehen sind und mehr als ein Entity an der Migration
beteiligt ist (etwa bei copy oder move Operationen), stellen sich
Herausforderungen an die Korrektheit einer lazy Migration.
      </p>
      <p>Abbildung 2 zeigt eine korrekte, zweistu ge Migration von Mission 101, bei
der Player Bart zunachst migriert wird, bevor sein SCORE kopiert wird.
Kaskadierender Implementierungsansatz: Ein erster Ansatz fur die korrekte
Ausfuhrung der lazy Migration basiert auf folgender Vorgehensweise: Bei einer copy
oder move Operation werden alle korrespondierenden source bzw. target Entities,
die in der gleichen oder einer fruheren Version im Vergleich zum zu migrierenden
Entity vorliegen, ebenfalls in die aktuelle Version des Entity migriert. Sofern
dabei eine weitere copy oder move Operation ausgefuhrt werden muss, wird diese
analog durchgefuhrt und ggf. rekursiv fortgesetzt. Damit wird nachtraglich der
Zustand einer eager Migration fur die betro enen Entities sichergestellt.</p>
      <p>Dieser kaskadierende Ansatz stellt die Korrektheit der lazy Migration sicher,
fuhrt allerdings dazu, dass beim Laden eines einzelnen Entity ggf. weitere,
unbeteiligte Entities migriert werden, was zu Einbu en in der Laufzeit fuhrt. Im
Folgenden skizzieren wir erste Ideen fur die Optimierung der lazy Migration.
Optimierungsansatze: Bei der kaskadierenden Implementierung werden bei der
Migration von Entities, die source einer copy oder move Operation sind, auch die
target Entities (kaskadierend) migriert, da sonst ggf. die Informationen der source
Entities spater nicht mehr zur Verfugung stehen. Sind hingegen alte Versionen
der Entities verfugbar (wie in vielen NoSQL-DBMS implementiert), kann die
Migration der target Entities lazy ausgefuhrt werden, also erst beim Zugri .
Dies reduziert die Anzahl der (zu einem Zeitpunkt) zu migrierenden Entities.</p>
      <p>Bei einer lazy Migration liegen Entities, die uber langere Zeit nicht verwendet
wurden, in einer alteren Version vor (Version i). Werden diese von der
Anwen</p>
      <p>
        Abb. 2. Korrekte Ausfuhrung der lazy Migration von Mission 101.
dung gelesen, dann erfolgt die Migration in die aktuelle Version (i + x). Uber der
Folge von Update-Operationen ui+x(ui+x 1(::(ui+1(entityi)))) sind aquivalente
Zusammenfassungen moglich [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. In der NoSQL-DB wird dann nur das Ergebnis
der Migration (das Entity in der Version i + x) persistiert. Entities, die durch
Zwischenschritte entstanden sind, werden nicht dauerhaft gespeichert, sodass die
Anzahl der Schreiboperationen erheblich reduziert werden kann.
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] prasentieren wir einen Ansatz, der die Migration durch Datalog-Regeln
spezi ziert. Eine inkrementelle top-down Auswertung stellt sicher, dass die
Ergebnisse einer lazy Migration aus Sicht des Anwendungsprogramms mit dem
Ergebnis ubereinstimmt, das bei der Durchfuhrung der eager Migration (bzw.
der aquivalenten bottom-up Auswertung) entsteht.
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>Schema-Evolutionsmanagement mit Darwin</title>
      <p>
        In [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] wurden als Anforderungen fur eine Schema-Management-Komponente die
De nition eines Schemas, die Validierung von Entities gegen ein Schema sowie
die Unterstutzung der Schema-Evolution inklusive Datenmigration de niert. Die
dort vorgeschlagene Schema-Management-Komponente wurde inzwischen
prototypisch implementiert: Darwin ist eine Schema-Management-Komponente, die
zwischen der Applikation bzw. dem Objekt-NoSQL Mapper und dem
NoSQLDBMS angesiedelt ist und die oben stehenden Funktionalitaten unterstutzt.
      </p>
      <p>
        Das Schema wird als JSON-Schema [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] gespeichert. Damit lassen sich
sowohl Schemata von Dokumentenorientierten als auch
Column-Family-Datenbanksystemen verwalten. Aktuell unterstutzt Darwin die NoSQL-DBMS
MongoDB und Couchbase. Durch die bereitgestellte abstrakte
Datenbank-Schnittstelle ist es aber einfach moglich, weitere DBMS anzubinden.
      </p>
      <p>Die Schema-Evolutionsoperationen konnen in Darwin direkt auf einer
Konsole (CLI) eingegeben oder uber eine Web-Applikation generiert werden. Die
Migration der Daten erfolgt eager oder lazy. Darwin ist damit die erste uns
bekannte Schema-Management-Komponente fur NoSQL-DBMS, die ein kontrolliertes
Schema-Management fur NoSQL-DBMS (inklusive copy und move Operationen)
und lazy Migration unterstutzt.
4</p>
    </sec>
    <sec id="sec-4">
      <title>Zusammenfassung und Ausblick</title>
      <p>In der vorgestellten Schema-Management-Komponente werden verschiedene
Datenbanktechniken fur NoSQL-Datenbanksysteme eingesetzt, die
Schema-Evolution in hochverfugbaren Anwendungen orchestrieren:
{ Eine deklarative Sprache zur Schemaevolution
{ De nition der Semantik der Datenmigrations-Operationen uber Datalog
{ Versionierung von Daten zur Konsistenzsicherung bei lazy Migration</p>
      <p>
        Es wurden weitere Datenbanktechniken fur NoSQL-Daten adaptiert, wie die
Schema-Extraktion aus vorhandenen Datensatzen uber Strukturgraphen [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Die
Integration dieser Implementierung in Darwin ist einer der nachsten Schritte.
      </p>
      <p>Um die Schema-Management-Komponente komfortabler fur den
Anwendungsentwickler zu gestalten, ist die Entwicklung eines IDE Plugins geplant, das bei
Veranderungen an der Klassenstruktur die korrespondierenden
Schema-Evolutionsoperationen automatisch generiert.</p>
      <p>Danksagung: Wir danken den Studierenden O. Haller, T. Landmann, T.
Lehwalder, D. Muller, H. Nkwinchu, M. Richter und M. Shenavai der Hochschule
Darmstadt fur die Implementierung von Darwin.</p>
    </sec>
    <sec id="sec-5">
      <title>Literatur</title>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>M.</given-names>
            <surname>Arenas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Barcelo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Libkin</surname>
          </string-name>
          , and
          <string-name>
            <given-names>F.</given-names>
            <surname>Murlak</surname>
          </string-name>
          .
          <article-title>Relational and XML Data Exchange</article-title>
          .
          <source>Synthesis Lectures on Data Management. Morgan &amp; Claypool</source>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>JSON</given-names>
            <surname>Schema</surname>
          </string-name>
          <article-title>Community</article-title>
          .
          <source>JSON Schema</source>
          ,
          <year>June 2015</year>
          . http://json-schema.org.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>M.</given-names>
            <surname>Klettke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Scherzinger</surname>
          </string-name>
          , and U. Storl. \Datenbanken ohne Schema?
          <article-title>- Herausforderungen und Losungs-Strategien in der agilen Anwendungsentwicklung mit schema- exiblen NoSQL-Datenbanksystemen"</article-title>
          .
          <source>Datenbank-Spektrum</source>
          ,
          <volume>14</volume>
          (
          <issue>2</issue>
          ),
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>M.</given-names>
            <surname>Klettke</surname>
          </string-name>
          ,
          <string-name>
            <surname>U.</surname>
          </string-name>
          <article-title>Storl, and</article-title>
          <string-name>
            <given-names>S.</given-names>
            <surname>Scherzinger</surname>
          </string-name>
          . \
          <article-title>Schema Extraction and Structural Outlier Detection for JSON-based NoSQL Data Stores"</article-title>
          .
          <source>In Proc. BTW'15</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>Z. H.</given-names>
            <surname>Liu</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.</given-names>
            <surname>Gawlick</surname>
          </string-name>
          . \
          <article-title>Management of Flexible Schema Data in RDBMSs - Opportunities and Limitations for NoSQL"</article-title>
          .
          <source>In CIDR'15</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>I.</given-names>
            <surname>Rae</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Rollins</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Shute</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Sodhi</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Vingralek</surname>
          </string-name>
          . \Online,
          <article-title>Asynchronous Schema Change in F1"</article-title>
          .
          <source>In Proc. VLDB'13</source>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>K.</given-names>
            <surname>Saur</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Dumitra</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Hicks</surname>
          </string-name>
          . \
          <article-title>Evolving NoSQL Databases without Downtime"</article-title>
          .
          <source>Technical report</source>
          , University of Maryland, College Park, Apr.
          <year>2015</year>
          . http://www.cs.umd.edu/~ksaur/pubs/kvolve-submitted.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>S.</given-names>
            <surname>Scherzinger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Klettke</surname>
          </string-name>
          , and U. Storl. \
          <article-title>Managing Schema Evolution in NoSQL Data Stores"</article-title>
          .
          <source>Proc. DBPL'13</source>
          , arXiv:
          <fpage>1308</fpage>
          .0514 [cs.DB],
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>S.</given-names>
            <surname>Scherzinger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Klettke</surname>
          </string-name>
          , and U. Storl. \Cleager:
          <article-title>Eager Schema Evolution in NoSQL Document Stores"</article-title>
          .
          <source>In Proc. BTW'15</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <given-names>S.</given-names>
            <surname>Scherzinger</surname>
          </string-name>
          , U. Storl, and
          <string-name>
            <given-names>M.</given-names>
            <surname>Klettke</surname>
          </string-name>
          .
          <article-title>\A Datalog-based Protocol for Lazy Data Migration in Agile NoSQL Application Development"</article-title>
          .
          <source>In Proc. DBPL'15</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11. U. Storl, T. Hau ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Klettke</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Scherzinger</surname>
          </string-name>
          . \
          <string-name>
            <surname>Schemaless NoSQL Data Stores</surname>
          </string-name>
          <article-title>Object-NoSQL Mappers to the Rescue?"</article-title>
          .
          <source>In Proc. BTW'15</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>