Mise à l'échelle des applications avec plusieurs connexions à des bases de données

Les exigences commerciales ne cessent de changer de jour en jour et nous continuons toujours à optimiser ou à faire évoluer nos applications en fonction de l'utilisation, des ajouts ou des soustractions de nouvelles fonctionnalités. Dans l’ensemble, le développement agile ajoute de temps en temps des défis.

Les applications dépendant de bases de données peuvent être mises à l'échelle en séparant la couche de base de données et en la mettant à l'échelle indépendamment. L'équipe OPS s'occupe de ces changements d'infrastructure en fonction de l'architecture de déploiement des applications.

En tant que programmeur, nous pouvons configurer notre application pour qu'elle fonctionne avec plusieurs bases de données. Dans ce document, nous allons expliquer comment y parvenir dans une application Rails.

Il existe 3 manières différentes de connecter une base de données supplémentaire à une application

  1. Configurer la base de données.yml
  2. Connexion directe
  3. Ecrire dans le module

1. Configurez database.yml :

Comme nous le savons, database.yml aura 3 connexions à la base de données par défaut pour le développement, les tests et la production. Nous pouvons connecter une autre base de données aux trois environnements en ajoutant le code ci-dessous.

autre_développement :

  adaptateur : nom_adaptateur (mysql2, postgresql, oracle, Mssql, etc.)

  base de données : nom_base_de_développement

  nom_utilisateur : nom_utilisateur

  mot de passe: ******

autre_test :

  adaptateur : nom_adaptateur (mysql2, postgresql, oracle, Mssql, etc.)

  base de données : nom_base_de_données_test

  nom_utilisateur : nom_utilisateur

  mot de passe: ******

autre_production :

  adaptateur : nom_adaptateur (mysql2, postgresql, oracle, Mssql, etc.)

  base de données : nom_base_de_données_production

  nom_utilisateur : nom_utilisateur

  mot de passe: ******

Après avoir configuré database.yml, nous pouvons le connecter de 2 manières en fonction des cas ci-dessous

  • Structure de base de données connue
  • Structure de base de données inconnue

Structure de base de données connue :

Si nous connaissons la structure de la base de données, nous pouvons créer des modèles pour chacun et établir la connexion dans le modèle.

Exemple:

classe AutreTable < ActiveRecord :: Base

  self.abstract_class = vrai

  établir_connexion "other_#{Rails.env}"

fin

Cela peut également être hérité par un autre modèle

classe Astronaute <AutreTable

  has_many : missions

  has_many : navettes, via : missions

fin

Structure de base de données inconnue:

Lorsque nous ne connaissons pas la structure de la base de données, nous ne pouvons écrire qu'un seul modèle et nous pouvons y établir la connexion. Nous pouvons faire le brut en fonction des paramètres dynamiques.

Exemple:

classe ExternalDatabaseConnection < ActiveRecord :: Base

  self.abstract_class = true # cette classe n'a pas de table

  établir_connexion(:nom de la base de données)

fin

  1. Connexion directe:

Dans le cas où la 2ème base de données n'a pas beaucoup d'importance et est utilisée à un ou deux endroits, nous pouvons directement appeler la

ActiveRecord :: Base.establish_connection avec les informations d'identification et nous pouvons interagir avec cette base de données.

Exemple:


ActiveRecord::Base.establish_connection(:adapterer=>"nom_adaptateur",:host=>"localhost",

:nom d'utilisateur =>"nom_utilisateur",:mot de passe => "*********",:base de données => "nom_base de données")

  1. Ecriture dans le module :

Nous pouvons également connecter la base de données du module et l'inclure dans le modèle comme indiqué ci-dessous.

Exemple:

module SecondDatabaseMixin

  étendre ActiveSupport :: Concern

  inclus { establishment_connection "other_#{Rails.env}" }

fin

Connexion à une base de données externe :

La base de données à connecter peut exister sur n'importe quel serveur. Dans le cas où ce n'est pas sur le même serveur, nous pouvons donner à l'hôte l'adresse IP du serveur où il existe.

Exemple:

adaptateur : nom_adaptateur (mysql2, postgresql, oracle, Mssql, etc.)

  hôte : external_db_server_ip (192.168.1.1)

  nom d'utilisateur : nom_utilisateur

  mot de passe: *******

  base de données : nom_base de données

Note: Il existe peu de joyaux disponibles pour  magic_multi_connections, Db-charme etc.,.

Avantages et inconvénients :

 Avantages

  • Si l'application a plusieurs clients et que chacun souhaite une base de données différente pour ses clients.
  • Aide aux sauvegardes pour chaque client.
  • Une autre base de données peut être utilisée dans une autre application qui peut avoir un adaptateur différent.
  • Lorsque les utilisateurs signalent que l'accès est lent, il est facile de savoir quelle base de données est à l'origine du problème.

Les inconvénients

  • Si l'application est simple avec moins d'utilisateurs
  • Maintenance du code pour le reste en cas de modification de la structure de la base de données.

En savoir plus : 

Un moyen simple d'augmenter les performances de votre application Rails

Une introduction à l'API Rails

Manipulation d'images

Associations polymorphes avec enregistrement actif

 Prenez contact avec nous.

Manasa Heggere

Développeur senior Ruby on Rails

Abonnez-vous pour les dernières mises à jour

Articles Similaires

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

fr_FRFrench