Applicazioni scalabili con connessioni multiple a database

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

  1. Configura database.yml
  2. Connessione diretta
  3. 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

  1. 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")

  1. 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

Un'introduzione all'API Rails

Manipolazione delle immagini

Associazioni polimorfiche con record attivo

 Mettiti in contatto con noi.

Manasa Heggere

Sviluppatore senior di Ruby on Rails

Iscriviti per gli ultimi aggiornamenti

Articoli correlati

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

it_ITItalian