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 :
If we are aware of the database structure, we can create models for each and we can establish the connection in the model.
Exemple:
classe AutreTable < ActiveRecord :: Base
self.abstract_class = vrai
establish_connection “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:
When we don’t know the database structure we can write only one model and we can make the connection to it. We can do the crud based on the dynamic parameters.
Exemple:
classe ExternalDatabaseConnection < ActiveRecord :: Base
self.abstract_class = true # this class doesn’t have a 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 =>"user_name",:password => "*********",:database => "database_name")
- 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
included { establish_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:
adapter: adapter_name (mysql2, postgresql, oracle, Mssql, etc.,)
host: external_db_server_ip (192.168.1.1)
username: user_name
password: *******
database: db_name
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