Java lernen

Document Orientierte Datenbank in Java

Diskutiere Document Orientierte Datenbank in Java im Codeschnipsel u. Projekte Forum; Guten Abend. Ich bin sehr fasziniert von dokumentorierntierten Datenbanken und habe angefangen selber eine zu entwickeln. Hier ist sie:...

  1. neoexpert
    neoexpert Guest
    Guten Abend.
    Ich bin sehr fasziniert von dokumentorierntierten Datenbanken und habe angefangen selber eine zu entwickeln. Hier ist sie:
    https://github.com/neo-expert/thingdb
    Sie ist integrierbar in eigene Projekte sollte auch auf Android funktionieren und ist sehr leichtgewichtig (weniger als 50kb). Die "API" ist so ähnlich wie bei MongoDB.

    EDIT:
    die methoden find und andere werden noch implementiert. Man kann bei jetztigem stand Dokumente inserten und mit findOne wieder bekommen...

    hier sind ein paar tests-resultate auf einem
    Intel(R) Core(TM) i7-4800MQ CPU @ 2.70GHz
    RAM ist nicht so wichtig (operiert wird nur auf der Festplatte)

    inserting 100000 documents...

    find 100000 documents by keyname without index...
    max_find_time: 0.001330084 seconds
    min_find_time: 4.5159E-5 seconds
    avg_find_time: 1.25042E-4 seconds

    find 100 documents by keyname without index randomly...
    max_find_time: 3.431449078 seconds
    min_find_time: 0.049011742 seconds
    avg_find_time: 1.66006872 seconds

    creating index...

    find 100000 documents by keyname with index randomly...
    max_find_time: 0.008833318 seconds
    min_find_time: 6.4675E-5 seconds
    avg_find_time: 1.92241E-4 seconds

    find 100000 documents by keyname with index...
    max_find_time: 0.008833318 seconds
    min_find_time: 5.4091E-5 seconds
    avg_find_time: 2.58835E-4 seconds

    inserting 200000 documents with index...
    max_insert_time: 3.289670204 seconds
    min_insert_time: 2.60037E-4 seconds
    avg_insert_time: 4.21886E-4 seconds

    find 200000 documents by keyname with index randomly...
    max_find_time: 0.011792015 seconds
    min_find_time: 5.3718E-5 seconds
    avg_find_time: 2.551E-4 seconds
     
    Zuletzt von einem Moderator bearbeitet: 13. Feb. 2018
  2. krgewb
    krgewb Aktives Mitglied
    Unter welcher Lizenz steht dein Datenbanksystem?
     
  3. thecain
    thecain Aktives Mitglied
    GNU GPL wie man im LICENCE File auch sieht.
     
  4. neoexpert
    neoexpert Guest
    Ja.
    Faszinierende Sache das mit B Bäumen.
    Auch in dieser Datenbank gilt:
    Hätte man genügend Speicherplatz um jeden Atom im Universum als Datensatz in diese Datenbank hinzuzufügen wäre der Zugriff auf einen beliebigen Datensatz in weniger als paar Millisekunden erfolgt. Quintillionen, Quintilliarden von Datensätzen - dank B-Baum-Daten-Struktur erfolgt der zugrif nahezu ohne Verzögerung dank dieser seltsamen Formel:
    ld(n)
    n soll Anzahl der Datensätze sein.
    für 2^1024 Datensätze hätte man höchstens ld(2^1024)=1024 vergleiche auszuführen.
     
  5. neoexpert
    neoexpert Guest
    War heute ganzen Tag an diesem B-Baum iterator dran:
    https://github.com/neo-expert/thing.../com/neoexpert/index/btree/BTreeIterator.java

    Der Algorithmus sieht ziemlich unübersichtlich aus.
    In dem stack wird der aktuelle Pfad gespeichert. Mit diesem Iterator kann man über alle keys die dem gegeben key entsprechen iterieren.
    Damit kann man (demnächst) so eine query ausführen:
    Code (Java):

    Iterator<Doc> it=db.find(eq("parent":42));
    while(it.hasNext()){
    Doc doc=it.next();
    }
     
    PS:
    Man kann den Iterator auch leicht anpassen um z.B. alle keys grösser|kleiner als gegebenen key zu finden.
    PPS:
    Der Stack ermöglicht die Fortsetzung der suche an der stelle an der der "Traverser" zuletzt war. Sehr praktisch, das ist so als ob man eine rekursive Baum traversierung an einer stelle einfriert und setzt die Ausführung später fort.
    PPPS:
    Im Laufe der Entwicklung sind ein paar sehr praktische Klassen entstanden.
    Z.B. die persistente HashMap:
    https://github.com/neo-expert/thingdb/blob/master/src/main/java/com/neoexpert/storage/DHashMap.java
    Oder persistente HashSet:
    https://github.com/neo-expert/thing...java/com/neoexpert/storage/StringHashSet.java
     
    Zuletzt von einem Moderator bearbeitet: 16. Feb. 2018
  6. thecain
    thecain Aktives Mitglied
    Was ist denn der Vorteil deiner Implementierungen gegenüber denen in der StandardLibrary?
     
  7. neoexpert
    neoexpert Guest
    Persistente HashMap? Steht doch im Wort persistent. Man kann den Rechner ausmachen, abstürzen lassen und ähnliches, beim nächsten Start des Programms sind alle Werte noch da :)
     
  8. thecain
    thecain Aktives Mitglied
    Nein, ich meine deinen BinaryTree
     
  9. neoexpert
    neoexpert Guest
    Gibt es eine Standard Implementierung für B Baum auf Disk? Habe keine gefunden. Sonst hätte ich die natürlich direkt genommen.
    Interessant für mich war:
    Ich hatte eigentlich gedacht dass die performance von "persistenten" Datenstrukturen ziemlich gering sein müsste aufgrund von Langsamkeit von persistenten Speichermedien (festplatten, ssds, sind ja langsamer als RAM).
    Dem war aber nicht so. Vllt nur beim ersten lesen, beim zweiten greift man meist schon auf Dateisystem-Cache im RAM - sehr praktisch.
     
  10. neoexpert
    neoexpert Guest
    Jetzt sind einfache queries über mehrere dokumente möglich.
    Habe gerade einen test augeführt:
    1,5 millionen zufallsgenerierte Dokumente hinzufügen.
    Und danach alle Dokumente deren "keyname" den Wert 42 hat wieder bekommen.
    Code (Java):

    db.find(eq("keyname",42));
     
    Das hinzufügen von 1,5 Millionen dokumenten dauerte so um die 10 Minuten. Das finden von den betroffenen Dokumenten in dieser riesigen menge dagegen in null komma nichts.

    Hier ist ein Beispiel für zufälliges Dokument:
    {"double":42,"c0c8963a0":"6357325936500376545","d9bee5bb1":"-8933372943405056324","float":42,"int":42,"long":42,"e4b72d7bb34d":"5355302028485408650","a-2fcc3d1f2d90":"5794783423062260261","boolean":true,"9f0-4770-a2d1-a99c7a843f1d":"-3289020970014430389","doc":{"key":"value"},"keyname":"42","5-d399-4caa-8333-cf4bb4cc25f6":"-8735699861759692376"}
     
    Zuletzt von einem Moderator bearbeitet: 16. Feb. 2018
    krgewb gefällt das.
Die Seite wird geladen...

Document Orientierte Datenbank in Java - Ähnliche Themen

Hilfe bei SDS Document
Hilfe bei SDS Document im Forum Softwareentwicklung
Instanz von FXMLDocumentController erlangen
Instanz von FXMLDocumentController erlangen im Forum AWT, Swing, JavaFX & SWT
Pdf-Document lässt sich im Servlet nicht öffnen
Pdf-Document lässt sich im Servlet nicht öffnen im Forum Java Basics - Anfänger-Themen
Strings im JTextPane vergleichen und mit StyledDocument formatieren
Strings im JTextPane vergleichen und mit StyledDocument formatieren im Forum AWT, Swing, JavaFX & SWT
OpenDocument auslesen
OpenDocument auslesen im Forum Java Basics - Anfänger-Themen
Thema: Document Orientierte Datenbank in Java