Wie kann ich einen Hash in meiner Datenbank speichern?

8

Gibt es eine Ruby- oder ActiveRecord-Methode, die einen Hash in und aus einem Datenbankfeld schreiben und lesen kann?

Ich muss ein Web-Dienstprogramm schreiben, um POST-Daten zu akzeptieren und sie in einer Datenbank zu speichern, um sie später aus der Datenbank in ihrer ursprünglichen Hash-Form zu ziehen. Aber idealerweise ohne zu wissen, was die Struktur ist. Mit anderen Worten, mein Datenspeicher muss unabhängig von einem bestimmten Satz von Hash-Schlüsseln sein.

Zum Beispiel könnte die externe App einmal an meine App senden:

%Vor%

Aber ein anderes Mal könnte die externe App an meine App senden:

%Vor%

Also muss mein Dienstprogramm einen beliebigen Hash in einem text -Feld in der Datenbank speichern und später den Hash aus dem, was gespeichert wurde, neu erstellen.

    
jpwynn 11.01.2012, 08:19
quelle

5 Antworten

5

Sie können die Serialisierung mit 3 Optionen verwenden: Marshal in Binärformat, YAML und JSON für Menschen lesbare Formate von Daten speichern.

Sobald Sie jede der Methoden ausprobieren, vergessen Sie nicht, die Zeit zu messen, die Sie serialisieren und deserialisieren möchten. Wenn Sie Daten im Ursprungsformat zurückholen müssen, ist JSON die richtige Wahl, da Sie sie nicht deserialisieren müssen, sondern sie selbst als Zeichenfolge verwenden müssen.

    
Anatoly 11.01.2012, 10:45
quelle
18

Rails 4 fügt Unterstützung für den Postgres hstore -Datentyp hinzu, mit dem Sie Hashes direkt in Ihre (Postgres-) Datenbank einfügen können.

Wenn Sie Rails 4 und Postgres verwenden, können Sie in Ihrer Migration hstore verwenden:

%Vor%

Dieser Ausführungsbefehl aktiviert hstore in Postgres, Sie müssen das also nur einmal tun.

Damit können Sie einen Hash in :column speichern, genau wie bei jedem anderen Datentyp.

    
Xavier 15.01.2013 04:43
quelle
8

Dafür gibt es zwei Möglichkeiten:

  1. Serialisieren Sie Ihren Hash und speichern Sie ihn in einem Textfeld.
  2. Teilen Sie den Hash und speichern Sie jeden Schlüssel in einer separaten Zeile.

Das Problem mit dem ersten Ansatz ist, dass das Finden und Manipulieren schwierig und teuer ist. Geben Sie zum Beispiel eine "0" vor der Telefonnummer aller Mitarbeiter ein, die in Foo Inc. arbeiten, ein Albtraum, verglichen mit dem Speichern der Daten in einem regulären Tabellenformat.

Ihr Schema wäre:

%Vor%

Also, um

zu speichern %Vor%

Sie würden tun:

%Vor%

Nachteile dieses Ansatzes: Rails unterstützt diese Art von Schema nicht nativ.

    
Gaurav Gupta 11.01.2012 09:21
quelle
3

Sie suchen nach Serialisierung . Es wird Ihnen helfen, genau das zu tun, was Sie wollen.

    
lucapette 11.01.2012 08:25
quelle
0

Rails 4 hat eine neue Funktion namens Store , mit der Sie Ihr Problem einfach lösen können . Sie können einen Accessor dafür definieren, und es wird empfohlen, die für den serialisierten Speicher verwendete Datenbankspalte als Text zu deklarieren, damit genügend Platz vorhanden ist. Das ursprüngliche Beispiel:

%Vor%     
Aboozar Rajabi 18.04.2016 16:14
quelle

Tags und Links