kostenloser Webspace werbefrei: lima-city


Variable Datensätze in Datenbank effizient speichern

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    g****e

    Hey,
    ich hab mal ein Anliegen. Ich überlege schon lange, wie ich variable Datensätze sinnvoll in einer Datenbank unterbringe. Dabei geht es mir nicht nur um MySQL, sondern auch um SQLite. Ich selbst habe 2 Möglichkeiten im Kopf, weiß aber einfach nicht, welche "schöner" wäre, bzw ob das nicht noch besser geht.
    Nehmen wir als Beispiel Daten über einen Menschen, das ist das einfachste. Ich habe Name und Wohnort als Datenfelder. Nun möchte ich dynamisch neue Felder hinzufügen, oder alte Entfernen können. Also Geburtsdatum dazufügen, Wohnort entfernen und sonstigen kram. Dabei soll diese Variablität komplett flexibel aber effizient gehalten werden.
    Das Hinzufügen und Entfernen von Feldern an einer Tabelle geht übrigens nicht, weil das mit SQLite nicht möglich ist. Hinzufügen ja, entfernen nicht.

    Meine erste Methode wäre, dass ich ein Musterobjekt in einem Array halte, welches angibt, welche Felder momentan existieren. Dann kriegt jeder Datensatz eine id + Value Feld, und im Value Feld ist ein JSON Objekt, welches die Daten alle gebündelt enthält. Diese werden dann gegen die Daten aus dem Array "gelinkt" und zugeordnet. Sodass man mal zu wenig, mal einen Overhead hat, aber es ist flexibel.
    Diese Methode ist eigentlich relativ einfach, ich hatte überlegt, wie man das dann durchsucht, weil ich möchte ja auch spezielle Datensätze rauspiken, und dachte dabei an das schöne Prozentzeichen, also %"name"="john"% um nach john zu suchen, jedoch stell ich mir das ein wenig zu overkill vor, und man hat stets die Gefahr von Overhead, also täglich oder wöchendlich einen Cronjob der den Müll raussammelt und entfernt.

    Die zweite Methode wäre, dass man eine Tabelle nutzt, welche geformt ist
    | ID | DatenID | FeldID | WERT |
    wobei die ID eindeutig ist, die DatenID den Datensatz beschreibt, wozu es gehört, die FeldID das beschreibt, welches Feld dem entspricht um das dann gegen zu "linken", und dann der Wert des Feldes. Hier weiß ich nicht, ob es nicht vllt ein bisschen zu viele Datensätze im Endeffekt werden. Wenn ich pro Person 20 Werte speichern möchte und dann halt gleich 1000 Personen habe ich schon 20.000 Datensätze, obwohl das nur 1000 Personen sind, was ich nicht viel finde.
    Sind das nicht also eigentlich zu viele Datensätze? Oder kann MySQL, PostGRE und vor allem SQLite damit ohne weiteres um? Muss ich erst ab vllt 100k oder 1kk Datensätzen mir Gedanken machen?

    Viel mehr Möglichkeiten fallen mir nicht ein, daher frage ich euch, wie geht man mit solchen Daten am ehesten um? Was meint ihr?

    Liebe Grüße
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Also ich habe damit jetzt nicht direkt Erfahrung, aber soweit ich weiß, gibt es dafür NoSQL.
  4. Wenn dir Portabilität nicht wichtig ist, dann könnte dir dieser Thread und die Lösung von czibere helfen:
    http://www.lima-city.de/thread/object-array-in-datenbank-speichern-ohne-serialize

    Mfg,
    timebandit
  5. Üblicherweise verwendet man dafür die zweite von dir beschriebene Methode, wenn man bei einer relationalen Datenbank bleiben will. Und da brauchst du dir auch bei 1kk Datensätzen in der Regel noch keine Gedanken zu machen ;)
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!