Los requisitos comerciales cambian día a día y siempre seguimos optimizando o escalando nuestras aplicaciones en función del uso, la incorporación o resta de nuevas funciones. Sobre todo, el desarrollo ágil añade desafíos de vez en cuando.
Las aplicaciones que dependen de bases de datos se pueden escalar separando la capa de la base de datos y escale de forma independiente. El equipo de OPS se encarga de dichos cambios de infraestructura en función de la arquitectura de implementación de la aplicación.
Como programador, podemos configurar nuestra aplicación para que funcione con múltiples bases de datos. En este documento vamos a explicar cómo podemos lograr esto en una aplicación Rails.
Hay 3 formas diferentes de conectar una base de datos adicional a una aplicación
- Configurar base de datos.yml
- Conexión directa
- Escribiendo en el módulo
1. Configurar base de datos.yml:
Como sabemos, Database.yml tendrá 3 conexiones de base de datos de forma predeterminada para desarrollo, prueba y producción. Podemos conectar otra base de datos a los tres entornos agregando el código que se muestra a continuación.
otro_desarrollo:
adaptador: nombre_adaptador (mysql2, postgresql, oracle, Mssql, etc.)base de datos: nombre_base_datos_desarrollo
nombre_usuario: nombre_usuario
contraseña: ******
otra_prueba:
adaptador: nombre_adaptador (mysql2, postgresql, oracle, Mssql, etc.)
base de datos: base de datos_nombre_prueba
nombre_usuario: nombre_usuario
contraseña: ******
otra_producción:
adaptador: nombre_adaptador (mysql2, postgresql, oracle, Mssql, etc.)
base de datos: nombre_base_datos_producción
nombre_usuario: nombre_usuario
contraseña: ******
Después de configurar la base de datos.yml, podemos conectarlo de 2 maneras según los casos siguientes
- Estructura de base de datos conocida
- Estructura de base de datos desconocida
Estructura de base de datos conocida:
Si conocemos la estructura de la base de datos, podemos crear modelos para cada uno y podemos establecer la conexión en el modelo.
Ejemplo:
clase OtraTabla < ActiveRecord::Base
self.abstract_class = verdadero
establecer_conexión “other_#{Rails.env}”
fin
Esto también lo puede heredar otro modelo.
clase Astronauta <OtroTabla
tiene_muchos: misiones
has_many: lanzaderas, a través de:: misiones
fin
Estructura de base de datos desconocida:
Cuando no conocemos la estructura de la base de datos, podemos escribir solo un modelo y podemos establecer la conexión con él. Podemos hacer la basura en función de los parámetros dinámicos.
Ejemplo:
clase Conexión de base de datos externa < ActiveRecord::Base
self.abstract_class = true # esta clase no tiene una tabla
establecer_conexión(:nombre de la base de datos)
fin
- Conexión directa:
En caso de que la segunda base de datos no tenga mucha importancia y se utilice en uno o dos lugares, podemos llamar directamente a la
ActiveRecord::Base.establecer_conexión con credenciales y podremos interactuar con esa base de datos.
Ejemplo:
ActiveRecord::Base.establecer_conexión(:adaptarer=>"nombre_adaptador",:host=>"localhost",
:nombre de usuario =>"nombre_usuario",:contraseña => "*********",:base_datos => "nombre_base_datos")
- Escribiendo en el módulo:
También podemos conectar la base de datos desde el módulo e incluirla en el modelo como se muestra a continuación.
Ejemplo:
módulo SecondDatabaseMixin
ampliar ActiveSupport::Preocupación
incluido {establecer_conexión “other_#{Rails.env}” }
fin
Conexión de base de datos externa:
La base de datos a conectar puede existir en cualquier servidor. En caso de que no esté en el mismo servidor podemos dar host como dirección IP del servidor donde existe.
Ejemplo:
adaptador: nombre_adaptador (mysql2, postgresql, oracle, Mssql, etc.)
host: external_db_server_ip (192.168.1.1)
nombre de usuario: nombre_usuario
contraseña: *******
base de datos: nombre_bd
Nota: Hay pocas gemas disponibles para magic_multi_connections, Db-charme etc.,.
Pros y contras:
Ventajas
- Si la aplicación tiene varios clientes y cada uno quiere una base de datos diferente para sus clientes.
- Ayuda en copias de seguridad para cada cliente.
- Se puede utilizar otra base de datos en otra aplicación que puede tener un adaptador diferente.
- Cuando los usuarios informan que el acceso es lento, es fácil saber qué base de datos está causando el problema.
Contras
- Si la aplicación es simple con menos usuarios
- Mantenimiento del código para el resto si hay algún cambio en la estructura de la base de datos.
Leer más :
Una forma sencilla de aumentar el rendimiento de su aplicación Rails
Una introducción a la API de Rails
Asociaciones polimórficas con registro activo
Póngase en contacto con nosotros.
Manasa Heggere
Desarrollador senior Ruby on Rails