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
- Configurer la base de données.yml
- Connexion directe
- 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
- 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")
- 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
Associations polymorphes avec enregistrement actif
Manasa Heggere
Développeur senior Ruby on Rails