Mongo Datenbank und Tabellendaten in sehr großer Menge...Wer kennt sich aus?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mongo Datenbank und Tabellendaten in sehr großer Menge...Wer kennt sich aus?

    Hallo allerseits,

    Und zwar steh ich hier grad vor einem ziemlich "großen" Problem und würde mich sehr über paar Tipps freuen. Genauer genommen geht es darum, dass ich ca. 9000 Jsonl Dateien in eine Mongo DB Tabelle umwandeln und Strings in Objekten auf verschiedene Werte durchsuchen muss. Das Problem ist hierbei, dass allein jede einzelne Tabelle im json Format mit rund 1 Mio Zeileneinträgen bereits ca. 500 MB groß ist und das x 9000 alleine das Importieren der Daten (bei ca. 3 minuten pro Datei) mehrere Monate dauern wird, selbst wenn ich theoretisch den ganzen Tag dran wäre. Zusammen noch mit dem Durchsuchen und Filtern der Tabellen käme das auf eine Arbeit von Jahren...

    Mich würde nun interessieren ob es Methoden gibt, wie das alles etwas schneller gehen kann bzw. ob Mongo überhaupt das richtige Werkzeug für so ein Vorhaben ist. Immerhin geht es deutlich schneller als z.b mit einer MySQL Datenbank, aber es ist für diese Datenmenge immer noch inakzeptabel langsam. Gibt es bei dieser DB evtl. eine Möglichkeit nur ausgewählte Strings / Tabellenspalten zu importieren und redundante Daten zu eliminieren oder seriell mehrere Tabellen gleichzeitig? Denn im Prinzip sind letztendlich nur 20% der Daten wirklich wichtig. Oder hat einer zufällig ein Script mit dem man mehrere große json Dateien in einem Verzeichnis filtern und zu einer zusammenfügen kann?

    Desweiteren brauch ich wahrscheinlich Hilfe eine (php?) Suchfunktion zu erstellen, die mehrere hundert lokale Datenbanken / Indexe / Tabellen gleichzeitig durchsuchen kann, da ich nicht weiß wieviel Einträge man in soeinem einzelnen Index speichern kann. In meiner aktuellen Konfiguration dauert bereits das Durchsuchen von 1 Mio Einträgen zwischen 0,9 u. 2 Sekunden (wobei bereits jetzt irgendwas nicht richtig funktioniert) ich muss allerdings zumindest sagen wir 500 Mio - 1 Milliarde in einem einzigen Schub problemlos durchsuchen und verarbeiten können, ohne das es zu lange dauert oder abschmiert. Ich möchte das Ganze zunächst nur lokal auf einem Windows Rechner laufen lassen. Vielleicht gibt es da auch eine effektive Mögichkeit wie es ganz ohne Umwandlung in DB-Tabellen geht...?

    Wer kennt sich aus oder hat mit der Thematik Erfahrung?

  • #2
    Moin!
    Lass uns zunächst mal auf die Kernfrage, die du ja auch bereits gestellt hast, eingehen.

    Ist MongoDB das richtige Werkzeug?

    Das hängt hauptsächlich von der Art deiner Daten ab, und davon, was du anschließend damit tun willst.

    MongoDB ist sehr gut geeignet für "unstrukturierte" Daten, also Daten, die nicht verlässlich immer demselben Schema folgen. Hast du hingegen sehr einheitlich strukturierte Daten (immer dieselben Felder in jedem Datensatz), so ist wahrscheinlich eine relationale Datenbank besser geeignet. Hier kommt neben MySQL dann zum Beispiel auch PostgreSQL in Frage.

    Hast du zwar unstrukturierte Daten, was zunächst für MongoDB sprechen würde, aber du benötigst anschließend sehr häufig eine Suche auf diesen Daten, dann könnte ggf. sogar Elasticsearch das Mittel der Wahl sein.

    In jedem Fall wirst du um eine Programmlogik (z.B. in php oder python) zum sortieren und filtern nicht herumkommen.
    Je nachdem kann es sinnvoll sein, auch hier schon hilfsweise eine Datenbank zu verwenden, mit Hilfstabellen zu arbeiten, und nicht benötigtes dort wieder zu verwerfen, bevor die Daten dann final übernommen werden.

    Selbstverständlich kannst du auch zuvor deine Dokumente zu einer großen Datei zusammenfügen, aber ohne Details zu kennen, würde ich erstmal davon abraten. Du hast dadurch keinen Vorteil, außer du würdest hier schon diverse Datensätze verwerfen wollen.

    Ein Tipp noch zu MySQL: Fasse deine Abfragen in Transactions zusammen. So kannst du mehrere tausend Datensätze quasi in einem rutsch importieren, was den Import um ein vielfaches schneller macht.

    Wirf hier gerne mal ein paar mehr Infos zu deinen Daten und / oder dem Zweck dieses Imports rüber. Dann können bessere Lösungen gefunden werden.

    Falls es sich hier um ein kommerzielles Projekt mit Budget handelt, können wir gerne auch per PN über eine "Fertiglösung" reden.
    Ansonsten eben hier mit entsprechenden Infos für einfache Hilfestellung.

    Grüße

    Kommentar


    • #3
      Zitat von reddighamburg Beitrag anzeigen
      Hier kommt neben MySQL dann zum Beispiel auch PostgreSQL in Frage.
      Oder MariaDB

      Kommentar


      • #4
        Zitat von reddighamburg Beitrag anzeigen
        Moin!
        Lass uns zunächst mal auf die Kernfrage, die du ja auch bereits gestellt hast, eingehen.

        Ist MongoDB das richtige Werkzeug?

        Das hängt hauptsächlich von der Art deiner Daten ab, und davon, was du anschließend damit tun willst.

        MongoDB ist sehr gut geeignet für "unstrukturierte" Daten, also Daten, die nicht verlässlich immer demselben Schema folgen. Hast du hingegen sehr einheitlich strukturierte Daten (immer dieselben Felder in jedem Datensatz), so ist wahrscheinlich eine relationale Datenbank besser geeignet. Hier kommt neben MySQL dann zum Beispiel auch PostgreSQL in Frage.

        Hast du zwar unstrukturierte Daten, was zunächst für MongoDB sprechen würde, aber du benötigst anschließend sehr häufig eine Suche auf diesen Daten, dann könnte ggf. sogar Elasticsearch das Mittel der Wahl sein.

        In jedem Fall wirst du um eine Programmlogik (z.B. in php oder python) zum sortieren und filtern nicht herumkommen.
        Je nachdem kann es sinnvoll sein, auch hier schon hilfsweise eine Datenbank zu verwenden, mit Hilfstabellen zu arbeiten, und nicht benötigtes dort wieder zu verwerfen, bevor die Daten dann final übernommen werden.

        Selbstverständlich kannst du auch zuvor deine Dokumente zu einer großen Datei zusammenfügen, aber ohne Details zu kennen, würde ich erstmal davon abraten. Du hast dadurch keinen Vorteil, außer du würdest hier schon diverse Datensätze verwerfen wollen.

        Ein Tipp noch zu MySQL: Fasse deine Abfragen in Transactions zusammen. So kannst du mehrere tausend Datensätze quasi in einem rutsch importieren, was den Import um ein vielfaches schneller macht.

        Wirf hier gerne mal ein paar mehr Infos zu deinen Daten und / oder dem Zweck dieses Imports rüber. Dann können bessere Lösungen gefunden werden.

        Falls es sich hier um ein kommerzielles Projekt mit Budget handelt, können wir gerne auch per PN über eine "Fertiglösung" reden.
        Ansonsten eben hier mit entsprechenden Infos für einfache Hilfestellung.

        Grüße
        Hallo,

        Ja, also es werden schon recht häufige Suchen getätigt werden (mehrmals täglich und quer durch die Database). Voraussichtlich sollen aber auch separate temporäre Indexe z.b für bereits getätigte Suchen angelegt werden.

        Wenn es für sowas schon Fertiglösungen gibt umso besser...

        Prinzipiell soll das Ganze schon 'professionell' programmiert sein, auch wenn ich damit anfangs nichts verdiene (am Anfang nur in lokaler Umgebung, später dann auf geeigneten Host / Servern) also ja mit Budjet, aber kommt natürlich drauf an wieviel und was es da jetzt für konkrete Lösungen gibt.

        Zur Struktur der Daten: Sie ist eigentlich sehr einfach und sieht in allen Dateien immer sehr ähnlich bzw. folgendermaßen aus: {1:abc,2:def,3:ghi, 4:jkl.....}, und das halt je Zeile. Einzig die Zahl der Einträge pro Zeile variiert gelegentlich, d.h einige Einträge kommen in jeder Zeile vor und einzelne Zeilen sind manchmal sehr lang und enthalten viel Unnötiges. (deswegen ja auch die Filterung)

        Was vl. noch wichtig zu wissen wäre: Die Suchfunktion soll am Ende mit einer Suchmaske inkl. Filterfunktion im Browser ausgeführt werden und die Ergebnisse als Liste auf einer Webpage präsentiert werden. Also wird wahrscheinlich auf PHP hinauslaufen. Am Wichtigsten wird hierbei wie gesagt Stabilität und Durchsuchbarkeit von mehreren parallelen sehr großen Datensätzen. Es muss nicht ultraschnell sein, aber sollte auf keinen Fall Probleme machen oder abschmieren, wenn jetzt z.b kurz hintereinander mal mehrere Suchen getätigt werden oder gleichzeitig von mehreren Nutzern getätigt werden müssen.



        Kommentar


        • #5
          Ich würde hier wohl tatsächlich zu elasticsearch raten.
          Die Software ist für "quer durch die bank" suchen tatsächlich entwickelt worden und dabei ziemlich schnell.
          Auch wenn die Daten unstrukturiert bzw nur teilweise strukturiert sind, funktioniert das sehr gut.
          Es ist etwas Kofiguration nötig, damit die daten im richtigen index landen.
          Deine gewündchten Suchen wirst du dann über die dazugehörige API umsetzen.
          Du kannst auch zum rumprobieren die hauseigene Such- und Visualisierungsoberfläche Kibana dazu nehmen.
          Damit kannst du dich dann auch vergewissern, dass deine importe funktioniert haben etc.

          Installier dir am besten das ganze versuchsweise mal lokal in docker desktop.
          Die community edition ist freie software und es gibt auch ne einfach nachzuvollziehende Anleitung zum docker setup.

          Das Paket enthält außerdem Beispiel Daten zum sofort rumspielen.

          Kommentar


          • #6
            Ok, dazu 2 Fragen:
            1. Dieses Elastic Search ist komplett open source und lokal nutzbar? (Cloud oder Daten irgendwo hinsenden kommt z.b nicht in Frage...)
            2. Die Suchmasken / Übersichten / Filter kommen in Elastic Search bereits als vorgefertigte Version oder muss da noch am System herumprogrammiert werden? Eine sehr wichtige Sache wäre z.b, dass es in allen Tabellen einen String gibt, der bei einer späteren Suche automatisch in einen navigierbaren Link inkl. Grafikeinbindung umgewandelt werden soll. Das weiß Elastic Search natürlich nicht (müsste also wahrscheinlich php-mäßig einprogrammiert werden). Ich nehme an derartige Spielereien bzw. Einbindung externer Scripte sind damit problemlos möglich?

            Kommentar


            • #7
              Moin. Ja, das kannst du komplett lokal laufen lassen.
              Entweder in docker (auch Docker Desktop) oder direkt auf einem Linux Server.

              Es gibt fertige Tools zum allgemeinen durchsuchen und visualisieren der Daten.
              Als fertige Anwendung für deine Zwecke taugen die so natürlich nicht.

              Du kannst aber auch über die vorhandene API auf die Daten zugreifen und suchen ausführen. Die Ergebnisse kannst du selbstverständlich auch mit php weiterverarbeiten.

              Sieh dir das Paket doch einfach mal an.
              Das docker image ist easy installiert und sofort mit den enthaltenen Test-Daten nutzbar.

              ​​​

              Kommentar


              • #8
                Ich hab mir die Elastic Anwendungen angeschaut, aber das Ganze sieht doch recht komplex und sehr umfangreich aus und auch so, dass evtl. ein großer Teil der 400MB großen Quellcodes / Funktionen / Plugins nicht zwingend benötigt wird...? (wahrscheinlich gibt es damit mindestens genausoviel Wege eine Suche völlig falsch oder richtig zu implementieren)

                Wie lange wird ein Profi wohl schätzungsweise brauchen das in einem schönen System (fehlerfrei und sicher) zum Laufen zu kriegen inkl. dem benötigten Zusatzscript?

                Kommentar


                • #9
                  Ich denke, es dauert lange und kann die aktive Verbindung ändern, sodass sie angepasst werden kann, um sicherzustellen, dass das System reibungslos und fehlerfrei funktioniert.
                  cre: https://www.php-resource.de/forum/php-developer-forum/1046344-mongo-datenbank-und-geometry dash subzero-tabellendaten-in-sehr-gro%C3%9Fer-menge-wer-kennt-sich-aus

                  Zuletzt geändert von ; 15.12.2023, 02:32.

                  Kommentar

                  Lädt...
                  X