2012-12-21 4 views
1

Je cherche à exécuter une base de données DynamoDB pour mes données transactionnelles et une base de données mysql pour les données dont j'ai besoin Requêtes de jointure SQL. Pour essayer de garder MySQL en vrac/grandes tables (en améliorant les performances), je vais déplacer des données dans DynamoDB qui devront parfois être référencées par rapport aux données de MySQL. Est-ce une mauvaise programmation/interrogation pour interroger DynamoDB pour certaines données et interroger MySQL puis en PHP (ou un autre langage côté serveur) effectuer une comparaison de données finale pour obtenir les données requises pour retourner au client/navigateur?Structures de base de données AWS - MySQL et DynamoDB

Je suppose que la question de base est: Avoir à interroger un NoSQL & bases de données SQL pour ensuite obtenir un résultat en php (ou un langage côté serveur) ... est-ce normal ou une mauvaise idée?

thx

Note: objectif principal de cette planification est la base de données afin d'éviter une ingérable trop grande situation de la base de données relationnelle. veulent ainsi déplacer les données en vrac à NoSQL (DynamoDB) ...

Répondre

4

C'est une très bonne idée de séparer vos données à différents magasins de données, chacun avec ses avantages.

Par exemple:

  • vous pouvez mettre dans votre blob SGBDR (comme MySQL), mais il est préférable d'avoir un stockage Amazon S3.
  • Vous pouvez placer des documents texte dans votre SGBDR et les interroger avec "... LIKE% QUERY% ...", mais il est préférable de les placer dans Elastic Search ou Amazon CloudSearch.
  • Vous pouvez mettre vos données de gestion de session dans votre SGBDR, mais il est préférable d'avoir en Amazon Elastic Cache ou DynamoDB
  • Vous pouvez avoir vos tables de recherche dans SGBDR, mais il est préférable d'avoir en mémoire ou de la mémoire à base NoSQL (comme Memecached ou Redis) ou DynamoDB

Et vous pouvez écrire les instructions ci-dessus différemment, en stockant tout dans MongoDB ou DynamoDB, mais en préférant les mettre ailleurs. Lorsque vous placez vos données dans différents magasins, vous pouvez obtenir un système plus simple, distribué, évolutif et généralement plus rapide en fonction de la simplicité de ce magasin de données lié au type de données et à votre utilisation de ces données. L'inconvénient est que vous devez synchroniser vos données entre les magasins de données. Une fois que vous avez ajouté un enregistrement à votre DynamoDB, vous devez télécharger le BLOB sur S3, mettre à jour le document dans CloudSearch et ajouter l'enregistrement à votre MySQL, ainsi qu'écrire les lignes pertinentes dans votre fichier journal pour une analyse ultérieure. C'est, bien sûr, le cas extrême d'avoir des données et des requêtes aussi complexes. Habituellement, vous n'avez besoin de mélanger que 2 ou 3 magasins de données.

Si vous devez avoir des transactions dans votre système, il sera beaucoup plus difficile de synchroniser vos données, et il est préférable d'avoir toutes vos données dans un magasin de données qui supporte les transactions. Mais même dans ce cas, vous pouvez limiter vos exigences de transaction à une partie de vos données et vivre avec des données redondantes dans d'autres magasins de données. Par exemple, avoir des objets S3 orphelins qui n'ont aucun enregistrement de référence dans votre SGBDR ou DynamoDB, n'est généralement pas un gros problème.

En ce qui concerne le code PHP (ou autre langage de programmation) que vous écrivez pour manipuler les données distribuées, cela dépend également. Si vous avez besoin d'une fonctionnalité complexe JOIN, GROUP_BY, FILTER supportée nativement par le magasin de données, il est préférable d'utiliser la fonctionnalité DB. Mais souvent, votre code peut être assez simple à écrire, comme interroger le bon DB (par exemple, la recherche textuelle vers CloudSearch) et assembler les données à partir de vos différents magasins de données.

1

oui u peut certainement utiliser les deux ... mais il y a des avantages et des inconvénients pour elle ..

CONS:

  • Dans MySQL, vous obtiendrez la garantie ACID, mais dans Dynamo-db, il n'y a pas de telle garantie.
  • Aussi dans MySQL vous pouvez écrire complexe alors que dans Dynamo-db vous ne pouvez pas écrire des requêtes complexes.

PROS:

  • Il a la propriété de tables de hachage distribuées par conséquent plus de rappel de la performance par rapport à MySQL.

vous devez consulter ce blog pour plus d'informations. Voici le a link!

Vous pouvez également utiliser plusieurs modules NoSql comme HIVEQL. HiveQl est beaucoup plus que Dynamo-Db, il peut augmenter les performances un peu plus que Dynamo-db.

Questions connexes