9
votes

Comment puis-je stocker un hash dans ma base de données?

Y a-t-il une méthode rubis ou activeCord qui peut écrire et lire un hachage vers et depuis un champ de base de données?

J'ai besoin d'écrire un utilitaire Web pour accepter les données post et enregistrez-la dans une base de données, puis plus tard sur la traction it de la base de données dans sa forme de hachage d'origine. Mais idéalement sans "savoir" quelle est la structure. En d'autres termes, mon magasin de données doit être indépendant de tout ensemble particulier de clés de hachage.

par exemple, une fois que l'application externe peut poster à mon application: xxx

mais une autre fois que l'application externe peut poster à mon application: xxx

donc mon utilitaire doit enregistrer un hachage arbitraire à un texte Champ dans la base de données, puis, plus tard, recréez le hachage de ce qui a été sauvé.


0 commentaires

5 Réponses :


3
votes

Vous recherchez sérialisation . Cela vous aidera à faire exactement ce que vous voulez.


0 commentaires

8
votes

Il y a deux façons de faire ceci:

  1. Serialize votre hachage et stockez-le dans un champ de texte. Li>
  2. diviser le hachage et stockez chaque clé d'une ligne distincte. li> OL>

    Le problème avec la première approche est que la recherche et la manipulation sont difficiles et coûteuses. Par exemple, le préfixe A "0" avant que le numéro de téléphone de tous les employés travaillant dans FOO Inc. soit un cauchemar, comparé au stockage des données en format tabulaire ordinaire. P>

    Votre schéma serait: P >

    employees: 1, 2012-01-01, 2012-01-01
    employee_details (1, 1, "company", "Foo Inc"), (2, 1, "telephone", "555-5555")
    


0 commentaires

5
votes

Vous pouvez utiliser la sérialisation avec 3 options : maréchal Format binaire, formats de stockage de données lisibles par l'homme de YAML et JSON.

Une fois que vous essayez de chacune des méthodes, n'oubliez pas de mesurer le temps de sérialiser et de désérialiser également. Si vous devez tirer des données dans le format d'origine, JSON est le bon choix à utiliser, car vous n'avez pas besoin de le désérialiser, mais utilisez-le comme une chaîne elle-même.


0 commentaires

18
votes

rails 4 ajoute la prise en charge du type de données HSTORE qui vous permettra d'ajouter des haubes directement dans votre base de données (Postgres).

Si vous utilisez des rails 4 et Postgres, vous pouvez utiliser < Code> hstore dans votre migration: xxx

cette commande exécute activera HSTORE dans Postgres, de sorte que vous ne devez donc le faire une fois.

Cela vous permettra de stocker un hachage dans : colonne comme vous le feriez tout autre type de données.


1 commentaires

Est-ce que cela prend en charge les hachages nuls / json?



1
votes

rails 4 a une nouvelle fonctionnalité appelée Store , afin que vous puissiez facilement utiliser Cela résoudra votre problème. Vous pouvez définir un accesseur pour cela et il est recommandé de déclarer la colonne de base de données utilisée pour le magasin Serialized en tant que texte, il y a donc beaucoup de place. Original Exemple: xxx


0 commentaires