Meilleure façon d'utiliser une base de données PostgreSQL comme une simple valeur de la clé de magasin
Je suis obligé d'utiliser une base de données postgreSQL et il va remplacer mon utilisation actuelle de berkeleyDB. Bien que, je me rends compte que ce n'est pas une situation idéale, il est hors de mon contrôle.
La question est donc... Si vous avez été invité à faire postgreSQL en valeur de la clé de magasin comment voulez-vous aller à ce sujet, que de le rendre aussi efficace que possible?
Mes valeurs sont des tableaux d'octets et mes clés sont des chaînes de caractères, j'ai pu imposer certaines restrictions sur la longueur de ces chaînes.
Je suppose que je devrais utiliser une goutte de ma valeur et de la colonne de la clé primaire qui détient la clé, mais comme je suis juste de s'aventurer dans ce voyage, je suis curieux de savoir si quelqu'un dans le débordement de la pile de la communauté a fait cela, ou s'il y a des spécifiques des "pièges" je devriez regarder dehors pour.
- Ce qui est le cas pour ceux des tableaux d'octets représentent en fait? Le contenu du fichier? Objets sérialisés? Les autres?
- En réalité, ils sont sérialisés des objets actionscript envoyé à un serveur... mais le code du serveur ne sais pas ou les soins de ce qui est en eux. Et oui, je suis d'accord c'est un peu absurde, pour utiliser une base de données relationnelle comme une valeur de la clé de magasin. Mais quelques-uns des avantages de l'utilisation de la base de données sont encore maintenues, comme efficace e / s de fichiers, le cryptage, les restrictions d'accès de l'utilisateur, etc... Donc est-il vraiment fou?
- Oui. metabrew.com/article/...
- Merci pour le lien... je voudrais certainement utiliser une vrai valeur de la clé de stocker si possible. Je ne suis pas sûr si l'un de ces sont approuvés pour être utilisés dans un département de la défense du projet, et d'essayer de les obtenir approuvé est un sujet de préoccupation car elle n'est pas en temps opportun des tâches. Je vais faire un peu plus de recherche.
Vous devez vous connecter pour publier un commentaire.
L'extension de Postgresql pour bien faire ce qu'on appelle hstore. Il fonctionne de la même façon que vous attendez d'autres clé-valeur en magasin de systèmes. Il suffit de charger l'extension. La syntaxe est unique, mais si vous avez déjà utilisé redis ou mongo, vous obtiendrez rapidement. Ne pas rendre plus difficile qu'elle ne l'est. Je comprends que, souvent, nous n'arrivons pas à choisir nos outils et ont à faire.
Voici la page du document:
http://www.postgresql.org/docs/9.1/static/hstore.html
Si vous êtes obligé d'utiliser la base de données relationnelle, je vous suggère d'essayer de trouver la structure de vos données à profiter du fait que, puisque vous renoncer à l'avantage de la rapidité que vous avez obtenu avec les données non structurées et key-value store. Le plus de la structure de vous trouver le meilleur avantage de vous sortir de votre situation. Même si vous ne trouvez que de la structure dans les keys.
Également déterminer si vous aurez seulement besoin séquentiel ou aléatoire l'accès à vos données et du taux et de la structure de votre base de données par cette exigence. Allez-vous faire des requêtes sur les valeurs par type, par exemple? Chacune de ces questions pourrait avoir un effet sur la façon dont vous la structure de votre base de données.
Une prise en compte spécifique sur les gouttes de postgresql ils sont représenté en interne comme pg_largetable (loid:oid,pageno:int4,de données:bytea). La taille des blocs est définie par LOBBLKSIZE, mais généralement 2k. Donc, si vous pouvez utiliser des tableaux d'octets dans votre table au lieu de gouttes et de limiter la taille de la valeur de la paire clé/sous la taille de bloc, vous pouvez éviter cette indirection, à travers la seconde table. Vous pouvez également augmenter la taille de bloc si vous avez accès à la configuration de la base de données.
Je vous suggère d'aller à la recherche de la structure des données et des modèles dans les données d'accès et ensuite poser votre question avec plus de détails.
Il devrait vraiment être dépend de ce que la clé sera. Si il sera toujours une chaîne de caractères en vertu de 255 caractères, puis d'utiliser un Varchar que yoru PK et ensuite utiliser un blob (en supposant une grande valeur) pour la valeur. si il va toujours être un nombre, utilisez int, etc.
En d'autres termes, besoin de plus d'info pour vraiment vous donner une bonne réponse 🙂
De quoi avez-vous besoin de stocker une valeur ? Les chaînes ? Ints ? Des objets (par exemple des objets Java sérialisés). Une mise en œuvre simple serait de travailler avec un 3 colonne de la table qui ressemble à:
(peut-être le TYPE est certains énumération). Le ci-dessus ne fonctionne pas pour des données binaires comme des objets sérialisés, bien que peut-être vous avez besoin d'un BLOB là.
Alternativement (et probablement un beaucoup meilleure idée), avez-vous vu Configuration D'Apache Commons ? Vous pouvez revenir qu'avec une base de données (via JDBC) et vous pouvez stocker des propriétés telles que vous les récupérer ainsi:
Qui peut vous faire économiser beaucoup de chagrin en termes de mise en œuvre. Vous peut ont un problème avec la sauvegarde des données binaires, que vous auriez à serialise avant d'insertion et de post-extraction. Mais j'ai utilisé dans le passé pour stocker des entiers,des doubles et des objets Java sérialisés par XStream, donc je peux confirmer qu'il fonctionne bien.