2009-03-24 6 views
5

Il semble y avoir une grande poussée pour les bases de données basées sur la clé/valeur, que je crois que memcache être.bases de données basées sur la valeur-clé, quelqu'un peut-il m'expliquer comment les utiliser pratiquement?

Est-ce que la valeur est généralement une sorte de collection ou un fichier xml qui contiendrait des données plus significatives?

Si oui, est-il généralement plus rapide de désérialiser les données puis de faire traditionnellement JOINS et de sélectionner des tables qui retournent un ensemble de résultats basé sur une rangée?

Répondre

3

Comme pour la plupart des choses, "ça dépend". Si les jointures sont relativement sans conséquence (c'est-à-dire, un petit nombre de jointures sur des données bien codées) et que vous stockez des données particulièrement complexes, il vaut mieux s'en tenir à la requête plus complexe.

C'est aussi une question de fraîcheur. Dans de nombreux cas, le but de nombreuses jointures est de rassembler des données très disparates; c'est-à-dire des données qui varient largement dans leur fraîcheur relative. Il peut ajouter considérable de complexité et de surcharge pour maintenir une table paire de valeurs-clés synchronisée quand une petite tranche des données à travers un grand nombre de paires est mis à jour. La complexité du système peut souvent être considérée comme une forme de coût de performance; le temps, le risque et le coût pour apporter un changement à un système complexe sans affecter les performances sont souvent bien plus importants que les simples.

La meilleure solution est toujours code qui fonctionne aussi simplement que vous pouvez. Dans la plupart des cas, je dirais que cela signifie créer une conception de base de données entièrement normalisée et se joindre à la connerie. Seulement revisiter votre conception après la performance devient un problème évident. Lorsque vous analyserez le problème, il sera également évident où se situent les problèmes et ce qui doit être fait pour les résoudre. Si c'est réduire les jointures, alors qu'il en soit ainsi. Vous saurez quand vous devez savoir.

+0

Je ne suis pas tout à fait d'accord avec le "..joindre la merde." partie. Mon expérience me dit que la jointure devrait être faite raisonnablement. Trop de normalisation est presque toujours une mauvaise chose. –

2

Je n'ai pas beaucoup d'expérience avec les clés/valeurs dbs, alors prenez ce que je dis avec un grain de sel. Cela dit, la première chose que je dois souligner est que memcached n'est pas une clé/valeur base de données. Une base de données implique une sorte de magasin persistant, ce qui n'est pas le cas de memcached. Memcached est destiné à être un magasin temporaire pour enregistrer une requête à la base de données réelle. À part cela, je crois comprendre que vous ne pourrez pas remplacer votre SGBDR par une base de données clé/valeur. Ils ont tendance à être mieux pour les données non structurées ou d'autres données où vous ne pouvez pas connaître tous les attributs qui doivent être stockés. Si vous avez besoin de stocker des données hautement structurées, vous ne pouvez pas faire beaucoup mieux qu'un SGBD traditionnel.

6

Ce qui est arrivé est que certains vraiment, vraiment, VRAIMENT grands sites web comme Google et Amazon occupent un minuscule, minuscule niche où leurs besoins dans le stockage et la récupération des données sont si différents à personne d'autre qu'une nouvelle façon de stocker/récupérer des données est nécessaire. Je suis sûr que ces gars-là savent ce qu'ils font, ils sont très bons dans ce qu'ils font.

Cependant, alors cela est ramassé et rapporté et déformé en "bases de données relationnelles ne sont pas à la manipulation des données pour le web". En outre, les lecteurs commencent à penser "hé, si les bases de données relationnelles ne sont pas assez bonnes pour Amazon et Google, elles ne sont pas assez bonnes pour moi."

Ces inférences sont toutes deux fausses: 99,9% de toutes les bases de données (y compris celles derrière les sites Web) ne sont pas dans le même parc que Amazon et Google - pas dans plusieurs ordres de grandeur. Pour ce 99,9%, rien n'a changé, les bases de données relationnelles fonctionnent encore très bien.

+0

Amen, frère! :-) – ObiWanKenobi

+0

Donc, mes applications web fonctionneront très bien avec MySQL et (peut-être) Memcached? –

+0

Je l'imaginerais, oui. Je ne sais rien à propos de Memcached, mais après l'avoir googlé, je vois qu'il s'agit simplement d'un mécanisme de «mémorisation» des valeurs une fois extraites de la base de données plutôt que de revenir à la base de données. Cela n'a rien à voir avec les bases de données clé/valeur AFAICT. Une telle mise en cache est probablement judicieuse si elle est utilisée judicieusement: ne l'utilisez pas pour des données qui ont probablement changé depuis le dernier accès (à moins, bien sûr, que cela vous soit égal.) –

1

Ils peuvent être des données structurées complexes qui nécessitent une désérialisation. Ils peuvent également être de simples enregistrements de taille fixe, tout comme votre SGBDR. Une partie de l'avantage est que vous prenez vous-même cette décision. Lorsque vous optimisez votre base de données, vous n'êtes pas limité à ce que SQL peut faire.

La façon dont vous demandez ressemble à la jointure ou la désérialisation sera toujours le goulot d'étranglement. Mais dans n'importe quelle base de données, les choses ne sont jamais aussi simples. Vous pouvez également mettre des données dénormalisées dans votre SGBDR ou écrire une interface SGBDR au-dessus d'une base de données de valeurs-clés, si vous le voulez vraiment.

Questions connexes