2015.05 2016.06 2017.06

Die Speicherung der Derivat-Metadaten

Das IFS2 (Internal Filesystem Version 2) ist eine neue Implementierung für die Persistenz von Metadaten, Derivaten und Dateien. IFS2 bietet gegenüber der bisherigen Persistenzschicht eine Reihe von Vorteilen, u.a. eine einfachere Struktur, die auch mit externen Werkzeugen ausserhalb von MyCoRe bearbeitbar ist, eine einfachere Möglichkeit der Datensicherung und Synchronisierung und eine gesteigerte Performance. Die Implementierung für Dateien ist derzeit noch nicht vollständig.

Zur Speicherung von Objekt-Metadaten wird IFS2 zur Zeit in der Form genutzt, dass je Projekt-ID und Objekttyp ein eigener IFS2 Metadata Store angelegt wird. In der Konfiguration muss dazu nur das Basisverzeichnis angegeben werden.

MCR.Metadata.Store.BaseDir=%MCR.datadir%/metadata

Je Projekt und Objekttyp entsteht ein separates Unterverzeichnis. Die Standardkonfiguration speichert dann z. B. die Metadaten des Objektes DocPortal_document_07910403 in der Datei %MCR.datadir%/metadata/DocPortal/document/0791/04/DocPortal_document_07910403.xml

IFS2 Stores bilden Unterverzeichnisse (Slots), um die Dateien gleichmässiger im Filesystem zu verteilen. Diese Unterverzeichnisse werden aus der ID abgeleitet, anhand des vorkonfigurieren Slot Layouts. Das Standard Slot Layout ist

      n-2-2
    
wobei n die Anzahl der Stellen in der MyCoRe Object ID - 4 ist. Bei
      MCR.Metadata.ObjectID.NumberPattern=00000000
    
ist das Standard Layout 4-2-2, achtstellige Objekt-IDs (4+2+2=8), die ersten vier Ziffern der ID bilden die erste Verzeichnisebene, die nächsten zwei Ziffern der ID bilden die zweite Verzeichnisebene unterhalb des Ordners für Projekt-ID und Objekttyp.

Es gibt verschiedene Implementierungen eines IFS2 Metadata Stores. Die einfachste und schnellste Implementierung ist

      MCR.Metadata.Store.DefaultClass=org.mycore.datamodel.ifs2.MCRMetadataStore
    
Sie bietet keine Versionierung der Metadaten, ist aber auch bei create/update/delete Operationen schnell. Eine Alternative ist
      MCR.Metadata.Store.DefaultClass=org.mycore.datamodel.ifs2.MCRVersioningMetadataStore
    
Dies ist zur Zeit die Default-Einstellung, die zusätzlich Änderungen an Metadaten-Objekten in internen Subversion Repositories versioniert. D.h. mit dieser Implementierung lassen sich Änderungen an Metadaten-Objekten verfolgen, alte und gelöschte Versionen der Metadaten wiederherstellen. Diese Implementierung ist bei Leseoperationen auf die aktuellste Version der Metadaten genau so schnell, bei create/update/delete Operationen aber deutlich langsamer.

Zur Verwaltung der Metadatenversionen werden je Projekt-ID und Objekttyp separate Subversion Repositories unterhalb eines Basisverzeichnisses angelegt:

      MCR.Metadata.Store.SVNBase=file\:///%MCR.datadir%/versions-metadata
    
Diese SVN Repositories können wie andere auch mit externen Subversion Kommandos befragt werden, aber es ist keine lokale Subversion Installation erforderlich. Die benötigte Funktionalität wird von MyCoRe mitgeliefert.

Es ist möglich, die Einstellungen zum verwendeten Store, Basisverzeichnis und Slot Layout individuell für einzelne Objekttypen und Projekt-IDs zu überschreiben.

So könnte z. B. für einen bestimmten Objekttyp (hier DocPortal document) Versionierung aktiviert werden, für andere Objekttypen aber der schnellere MCRMetadataStore:

      MCR.Metadata.Store.DefaultClass=org.mycore.datamodel.ifs2.MCRMetadataStore

      MCR.IFS2.Store.DocPortal_document.Class=org.mycore.datamodel.ifs2.MCRVersioningMetadataStore
      MCR.IFS2.Store.DocPortal_document.SlotLayout=4-2-2
      MCR.IFS2.Store.DocPortal_document.BaseDir=/path/to/metadata/store/
      MCR.IFS2.Store.DocPortal_document.SVNRepositoryURL=file:///path/to/local/svn/repository/
    

Wenn MCRVersioningMetadataStore verwendet wird, wird das Metadatenobjekt zunächst in einer XML-Datei gespeichert, die dann im Anschluss via SVN commit versioniert wird. Standardmäßig wird der Zeitstempel der Datei nachträglich auf den exakten Zeitpunkt des SVN commits gesetzt. Dies kann unter Linux zu Fehlern aufgrund von Zugriffsrechten führen. In diesem Fall kann durch

      MCR.IFS2.SyncLastModifiedOnSVNCommit=false
    
die Zeitstempel-Synchronisation abgeschaltet werden.

In älteren MyCoRe Versionen wurden die Metadaten der Objekte in einer Datenbanktabelle (BLOB-Spalte) gespeichert. Eine besondere Implementierung ist

      MCR.Metadata.Store.DefaultClass=org.mycore.migration20_21.datamodel.MCRMigratingXMLStore
    
Diese verhält sich wie ein MCRVersioningMetadataStore, bietet jedoch zusätzlich eine live Migration der alten Daten aus der Tabelle. Beim ersten Zugriff auf ein Objekt wird dieses ggf. aus der Datenbanktabelle gelesen und in den IFS2 Store kopiert, sofern es nicht schon dort gespeichert ist.

 Jens Kupferschmidt, Kathleen Neumann - 2016-05-26