Postgresql JSONB kommt. Was nun verwenden? Hstore? JSON? Die EAV?
Nachdem sich durch die relationale DB/NoSQL-Forschung Debatte, ich bin zu dem Schluss gekommen, dass ich voran mit PG als meine Daten zu speichern. Ein großer Teil dieser Entscheidung war die Ankündigung von JSONB kommt auf 9,4. Meine Frage ist was soll ich jetzt tun, eine Anwendung von Grund auf zu wissen, dass ich migrieren möchten (damit meine ich jetzt!) jsonb? Die DaaS-Optionen für mich werden ausgeführt 9.3 für eine Weile.
Was ich sagen kann, und mich korrigieren, wenn ich falsch bin, hstore laufen würde, ganz ein bisschen schneller, weil ich ' ll tun eine Menge von Abfragen von vielen Tasten in der hstore-Spalte und wenn ich einfach json würde ich nicht in der Lage sein, um die Vorteile von Indizierung/GIN etc. Allerdings konnte ich die Vorteile von nesting mit json, aber das ausführen von Abfragen wäre sehr langsam und würde ein Nutzer frustriert werden.
So, Baue ich meine app um die aktuelle version der hstore-oder json-Datentyp, "gute alte" EAV oder etwas anderes? Sollte ich die Struktur meiner DB und app-code eine bestimmte Art und Weise? Jede Beratung würde sehr geschätzt werden. Ich bin sicher, andere können vor der gleiche Frage, wie wir warten auf die nächste offizielle Version von PostgreSQL.
Ein paar zusätzliche details auf dem app, das ich bauen will:
-Sehr relationale (mit einer Ausnahme unten)
-Ein starkes Soziales Netzwerk-Aspekt (Gruppen, Freunde, likes, timeline etc.)
-Um ein einzelnes Objekt mit Variablen Benutzer-Attribute zugewiesen, vielleicht 10 oder 1000+ (dies ist, wo die schema-less design benötigen, kommt ins Spiel)
Dank im Voraus für jede Eingabe!
- P. S. Stack braucht einen neuen tag => jsonb!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kommt es an. Wenn Sie erwarten, eine Menge von Nutzern, die eine sehr hohe Transaktionsvolumen, oder eine geisteskranke Anzahl von Attribut-fetches pro Abfrage, die ich würde sagen verwenden HSTORE. Wenn Sie jedoch die app fangen Sie klein an und wachsen im Laufe der Zeit, oder Sie haben relativ wenig Transaktionen, die fetch-Attribute, oder einfach nur Holen ein paar pro Abfrage, dann verwenden Sie JSON. Auch im letzteren Fall, wenn Sie nicht abholen viele Attribute, aber die überprüfung ein oder zwei Tasten oft in der
WHERE
Klausel Ihre Abfragen erstellen, können Sie einen funktionalen index die Dinge zu beschleunigen:Nun, wenn Sie haben
WHERE bar ->> somekey
es sollte den index verwenden.Und natürlich wird es leichter sein, um verschachtelte Daten und ein upgrade auf jsonb, wenn es verfügbar wird, wird Sie.
Also ich würde tendieren zu JSON-es sei denn, Sie wissen, für sicher, dass Sie gehen, kicken Sie Ihre server Esel mit dem schweren Gebrauch des key holt, bevor Sie eine chance haben, ein upgrade auf 9.4. Aber um sicher zu sein, würde ich sagen, tun einige benchmarking mit den erwarteten Abfrage-Bände jetzt und sehen, was funktioniert am besten für Sie.
Wahrscheinlich nicht geben, genug zu geben, eine sehr ausführliche Antwort, aber ich werde sagen... Wenn Ihre Daten "sehr relationale" dann glaube ich, der beste Weg ist, es zu bauen mit einer guten relational design. Wenn es nur ein Feld mit "variable Attribute zugewiesen", dann klingt das wie eine gute Verwendung für eine hstore. Das ist ziemlich versucht und richtig an dieser Stelle. Ich habe etwas Lesen auf 9.4 und jsonb klingt cool, aber nicht für eine Weile. Ich vermute, dass eine gute schema-design in 9,3 + a sehr gezielte Verwendung von hstore wird wahrscheinlich ergeben eine gute Kombination von Leistung und Flexibilität.