web-dev-qa-db-fra.com

Nosql, Couchdb vs. Couchbase, que dois-je faire?

J'ai commencé à rencontrer des problèmes sur mon site de production, lors d'une page Web qui doit charger un très gros résultatsset (en provenance actuellement de la base de données relationnelle, MySQL), il faut pour toujours et positif Ces ensembles de résultats ne sont que de plus en plus importants.

J'ai commencé à rechercher une meilleure solution et ce que j'ai rencontré est l'idée de sauver les données dans une base de données NOSQL. (J'utilise déjà Mongo, mais Mongo est inefficace en raison d'une grande quantité de DML dans mon environnement.) Donc, lors de la recherche sur le Web, j'ai pensé aux 2 options suivantes:

  1. Couchdb
  2. Cochbase

Lorsque vous envisagez les deux ci-dessus, je peux dire que les deux sont basées sur JSON (OK, c'est un bon début), mais lorsque vous rencontrez des antécédents techniques, je cherche une meilleure mise en cache (je ne veux pas tuer Les E/S du serveur), la capacité de réplication principale-maître de Mongodb (j'ai vu que CouchDB peut reproduire facilement en fonction de la source-> destination/destination-> source).

Quelqu'un peut-il me fournir une partie de vos contributions, et si vous aviez essayé les solutions ci-dessus, je serai heureux d'entendre parler de votre expérience.

4
Adihoch

IMO vous faites ce qui est probablement une erreur assez courante en matière de pages Web qui consiste à supposer que la réponse aux problèmes de performance due à la taille initiale du résultat sur MySQL est de passer aux solutions NOSQL souvent avec peu de compréhension de ce que sont peu compréhentés. Comment les utiliser de manière appropriée et efficace.

Je serais surpris si une DB bien accordée était en réalité le problème ici pour une application Web, si la taille de l'ensemble de résultats est le problème. Le simple fait est qu'un ensemble de résultats ne peut être récupéré que du disque que si vite (en supposant que vous n'utilisez pas de mémoire principale dB où tout est forcé dans la RAM), puis vous devez réellement passer du temps à traiter le résultat pour obtenir votre page Web. Vous devez commencer par tout profilant tout avant de supposer que c'est la DB.

Votre compromis le plus élémentaire de NOSQL est la flexibilité de la saisie des données et la mise à l'échelle factice VS Integrity garantit et le traitement des données sur la sortie. Le seul moyen de faire le traitement des données dans NOSQL sur un ensemble de résultats de toutes les formes consiste à le faire essentiellement sur l'entrée, ce qui a des impacts significatifs sur la durée de vie d'un produit si une solution NOSQL est utilisée au détriment d'un SGDBR traditionnel. D'autre part, étaient appropriés ces offres adjonctes aux SGBB qui peuvent être utiles à la fois pour le pré-traitement. En bref, il y a des raisons de choisir NOSQL mais la taille n'est vraiment pas l'une d'entre elles.

Maintenant, vous mentionnez ici qu'il s'agit d'une "page Web" qui charge un "très gros ensemble de résultats". Maintenant, je fais des choses folles avec des applications Web parfois, et je soupçonne que si vous chargez vraiment un très grand résultat défini directement dans une page Web, vous avez de nombreux problèmes autres que les performances de la DB.

Dans LEDGERSMB, par exemple, je connais des cas où nous tirons sur des milliers de lignes de facturation pour générer une seule page Web pour certains utilisateurs (nous utilisons PostgreSQL). Pour nous PostgreSQL Hums le long assez bien, même lorsqu'il s'agit d'agréger sur des milliers d'enregistrements retirés de tables multi-million d'enregistrements. Notre temps passé (profilé) par page de charge à ce niveau est d'environ 15 secondes de DB Time jusqu'à 5 minutes d'application Web pour générer la page Web. (Ceci est acceptable pour la raison pour laquelle il optimise globalement le flux de travail de ce client, gardez à l'esprit que la page Web peut avoir jusqu'à 20 km d'éléments d'entrée, et les données doivent être transformées de manière significative entre lesquelles le serveur DB l'envoie et où le La page Web est construite). Cela peut ne pas correspondre à votre cas d'utilisation spécifiquement, mais cela peut vous donner une idée du fait que la base de données ne doit pas nécessairement être le goulot d'étranglement et n'est probablement pas si vous faites beaucoup avec une page Web.

Voici quelques aspects du dépannage et des options que vous avez si le DB est en fait le problème.

  1. Profil de toute votre application. Combien de temps est effectivement dépensé sur la DB Stuff? Combien coûte le traitement de la page pour l'affichage?

  2. Profil de vos requêtes de DB. Que peut-on faire pour les rendre plus efficaces?

Faites cela avant de conclure qu'un DB différent résoudra votre problème.

Maintenant, s'il s'avère que vous avez vraiment poussé cela au maximum, vous devez regarder vos choix. Ceux-ci inclus:

  1. PostgreSQL (oui, un dB relationnel). Une chose que cela a une chose qui est allée pour elle est beaucoup plus optimisée de structures de table/index optimisées (InnoDB se spécialise dans les recherches de pky, ce qui signifie que d'autres recherches sont plus lentes).

  2. Voltdb (un autre dB relationnel, mais celui-ci est la mémoire principale pour OLTP haute vitesse et très rapide)

  3. Vous pouvez construire une couche de mise en cache avec un DB NOSQL qui fonctionne à côté de vos SGBDM. C'est là que vous pourrez peut-être utiliser MongoDB ou Couchdb.

13
Chris Travers