I requisiti aziendali continuano a cambiare giorno dopo giorno e noi continuiamo sempre a ottimizzare o ridimensionare le nostre applicazioni in base all'utilizzo, all'aggiunta o alla sottrazione di nuove funzionalità. Nel complesso, lo sviluppo agile aggiunge sfide di tanto in tanto.
Le applicazioni che dipendono dai database possono essere ridimensionate separando il livello del database e ridimensionandolo in modo indipendente. Il team OPS si occupa di tali modifiche all'infrastruttura in base all'architettura di distribuzione dell'applicazione.
Come programmatore, possiamo configurare la nostra applicazione per funzionare con più database. In questo documento spiegheremo come possiamo ottenere questo risultato in un'applicazione Rails.
Esistono 3 modi diversi per connettere un database aggiuntivo a un'applicazione
- Configura database.yml
- Connessione diretta
- Scrivere nel modulo
1. Configura database.yml:
Come sappiamo, database.yml avrà 3 connessioni al database per impostazione predefinita per sviluppo, test e produzione. Possiamo connettere un altro database a tutti e tre gli ambienti aggiungendo il codice mostrato di seguito.
altro_sviluppo:
adattatore: nome_adattatore (mysql2, postgresql, oracle, Mssql, ecc.,)database: nome_database_sviluppo
nome_utente: nome_utente
parola d'ordine: ******
altro_prova:
adattatore: nome_adattatore (mysql2, postgresql, oracle, Mssql, ecc.,)
database: nome_database_test
nome_utente: nome_utente
parola d'ordine: ******
altra_produzione:
adattatore: nome_adattatore (mysql2, postgresql, oracle, Mssql, ecc.,)
database: nome_database_produzione
nome_utente: nome_utente
parola d'ordine: ******
Dopo aver configurato database.yml possiamo collegarlo in 2 modi in base ai casi seguenti
- Struttura del database conosciuta
- Struttura del database sconosciuta
Struttura del database conosciuta:
Se siamo consapevoli della struttura del database, possiamo creare modelli per ciascuno e possiamo stabilire la connessione nel modello.
Esempio:
class AltraTabella < ActiveRecord::Base
self.classe_astratta = vero
stabilire_connessione “other_#{Rails.env}”
FINE
Questo può anche essere ereditato da un altro modello
classe Astronauta <AltraTabella
has_many:missioni
has_many :navette, attraverso: :missioni
FINE
Struttura del database sconosciuta:
Quando non conosciamo la struttura del database possiamo scrivere un solo modello e possiamo collegarci ad esso. Possiamo fare il grossolano in base ai parametri dinamici.
Esempio:
classe ExternalDatabaseConnection < ActiveRecord::Base
self.abstract_class = true # questa classe non ha una tabella
stabilire_connessione(:nome del database)
FINE
- Connessione diretta:
Nel caso in cui il 2° database non abbia molta importanza e venga utilizzato in uno o due posti, possiamo chiamare direttamente il file
ActiveRecord::Base.establish_connection con le credenziali e possiamo interagire con quel database.
Esempio:
ActiveRecord::Base.establish_connection(:adapter=>"nome_adattatore",:host=>"localhost",
:nome utente =>"nome_utente",:password => "*********",:database => "nome_database")
- Scrivendo nel modulo:
Possiamo anche connettere il database dal modulo e incluso nel modello come mostrato di seguito.
Esempio:
modulo SecondDatabaseMixin
estendere ActiveSupport::Concern
incluso {establish_connection “other_#{Rails.env}” }
FINE
Connessione al database esterno:
Il database da connettere può esistere su qualsiasi server. Nel caso in cui non sia sullo stesso server possiamo fornire host come indirizzo IP del server dove esiste.
Esempio:
adattatore: nome_adattatore (mysql2, postgresql, oracle, Mssql, ecc.,)
host: external_db_server_ip (192.168.1.1)
nome utente: nome_utente
parola d'ordine: *******
database: nome_db
Nota: Ci sono poche gemme a disposizione magic_multi_connections, Db-charme ecc.,.
Pro e contro:
Professionisti
- Se l'applicazione ha più client e ognuno desidera un database diverso per i propri clienti.
- Aiuta nei backup per ciascun client.
- Un altro database può essere utilizzato in un'altra applicazione che potrebbe avere un adattatore diverso.
- Quando gli utenti segnalano che l'accesso è lento, è facile sapere quale DB causa il problema.
Contro
- Se l'applicazione è semplice con meno utenti
- Manutenzione del codice per il resto in caso di modifiche alla struttura del database.
Per saperne di più :
Un modo semplice per aumentare le prestazioni della tua app Rails
Associazioni polimorfiche con record attivo
Manasa Heggere
Sviluppatore senior di Ruby on Rails