NoSQL

Nachdem ich jetzt ca. ein Jahr in der KI-Abteilung gearbeitet habe bekomme ich im Rahmen meiner Ausbildung jetzt die Möglichkeit die Abteilung zu wechseln um auch andere Aspekte des Berufs kennen zu lernen.

Dabei wurde ich im Mitarbeitergespräch gefragt, was mich interessiert und womit ich gerne arbeiten würde. Als ich gesagt habe, dass ich gerne mit Datenbanken zu tun hätte um auch dieses Gebiet kennen zu lernen, wurde mir angeboten mich mit NoSQL zu beschäftigen.

Wozu braucht man NoSQL?

Durch die immer Größere Datenmenge und die immer unstrukturierteren Daten stoßen relationale Datenbanken immer öfter an ihre Grenzen. Um dem Problem der unstrukturierten Daten entgegen zu wirken speichern nicht relationale Datenbanken ihre Daten nicht nach einem festen Schema sondern Beispielsweise in „Dict-Ähnlichen“ Strukturen oder als Graphen. Das bietet den Vorteil, dass man die Daten nicht an die Datenbank anpassen muss und flexibler bleibt. Die Datenbank kann dadurch organisch wachsen.

Große Datenmengen stellen klassische Datenbanken vor ein Problem, da diese nur vertikal skalierbar (Steigerung der Leistung durch die Steigerung eines Rechners (HW-Limitiert)) sind. Um das zu umgehen sind NoSQL Datenbanken wie CouchDB, MongoDB, Neo4J durch ihre Art zu speichern und ihre Implementierung meist horizontal skalierbar(unendlich weit durch hinzufügen von neuen Knotenpunkten) . Dadurch wird keine spezielle, sehr teure Hardware für große Datenbanken benötigt

oben vertikale Skalierung
unten horizontal

Leider bringt dieser Ansatz auch Nachteile mit sich. So sind die Daten meistens nicht normalisiert und mehr Speicherplatz wird belegt. Außerdem bringt ein organisch wachsendes System zwar Vorteile, doch kann es schnell zu einem nicht durchschaubaren Chaos an verschiedenartigen Einträgen kommen. Deshalb sollte trotz der Variabilität von NoSQL-Datenbanken stets eine Ordnung oder eine grobe Vorlage der Datenstruktur gelten um weiterhin die Funktion der DB garantieren zu können.

Zwei der NoSQL-Ansätze möchte ich Grob vorstellen:

Graphendatenbanken

Graphendatenbanken speichern die Daten als Graph bestehend aus Knotenpunkten, die Gegenstände repräsentieren und Kanten, die die Beziehungen zwischen zwei Knoten darstellen. Dabei sind die Kanten gerichtet und ein Knoten kann beliebig viele Kanten haben. Diese Art der Speicherung eignet sich besonders bei Einträgen, bei denen die Beziehung der Knoten zueinander wichtig ist.

Bekannte Vertreter: Neo4J, Amazon Neptune

Einfaches Graphenmodell

Dokumentenorientierte Datenbank

Dokumentenorientierte Datenbanken speichern die übergebenen Daten in JSON-ähnlichen Formaten. Die größte Stärke dokumentenorentierter Datenbanken liegt in unstrukturierten Daten, da ein Dokument mit beliebigem Inhalt gefüllt werden kann. Das geht sogar so weit, dass man teilweise nicht auf ein anderes Dokument referenziert sondern das Dokument einfach in ein anderes schreibt. Mit dieser Methode der „Referenzierung“ kann man die Zugriffszeiten bei häufig gewählten Kombinationen zweier Dokumente deutlich verringern. Der größte Nachteil dieser Methode ist der zusätzliche Speicherplatz, der durch fehlende Normalisierung verloren geht.

Bekannte Vertreter: CouchDB, MongoDB

Teile diesen Post:

Segmentierung von DeepER

Hallo,
nachdem Ich jetzt seit grob einem viertel Jahr hier arbeite habe ich genug Erfahrungen und Einblicke bekommen um auch eine Blog-Artikel schreiben zu können.


Zu meiner Tätigkeit:

Ich bin von Anfang an beim DeepER-Team in der Entwicklung tätig.

Meine erste größere Aufgabe war es ein Programm zur Erstellung von künstlichen Trainingsdaten für die Segmentierung zu erstellen, was eine gute Möglichkeit war sich in die „Denkweise“ des Netzes hinter der Segmentierung „einzufühlen“.
So gab es z.B Anfangs Probleme mit dem Erkennen von untereinander liegenden Zeilen, da diese in meinem Programm immer genau untereinander gesetzt wurden und Somit das Netz bei zwei eng aneinander liegenden Zeilen davon Ausging, das alle Zeilen mit dem gleichen Abstand von einander getrennt sind.
Die Lösung war es diese Abstände zu variieren

Die Wochen drauf habe ich einen internen KI-Workshop besucht indem ich viel über DeepER und die beiden Neuronalen Netze im Hintergrund lernen konnte.

Seit dem bearbeite seit dem bearbeite ich hauptsächlich die algorithmische Nachschärfung der Ergebnisse der Segmentierung.

Teile diesen Post: