複数のデータベース接続を使用したアプリケーションのスケーリング

ビジネス要件は日々変化し続けており、私たちは使用状況、新機能の追加または削除に基づいてアプリケーションを常に最適化またはスケーリングし続けます。アジャイル開発全体において、時折課題が追加されます。

データベースに依存するアプリケーションは、データベース層を分離し、個別にスケーリングすることでスケーリングできます。 OPS チームは、アプリケーション展開アーキテクチャに基づいて、このようなインフラストラクチャの変更に対応します。

プログラマは、複数のデータベースで動作するようにアプリケーションを構成できます。このドキュメントでは、Rails アプリケーションでこれを実現する方法を説明します。

追加のデータベースをアプリケーションに接続するには 3 つの異なる方法があります

  1. データベース.ymlのセットアップ
  2. 直接接続
  3. モジュールへの書き込み

1.database.yml をセットアップします。

ご存知のとおり、database.yml には開発、テスト、実稼働用にデフォルトで 3 つのデータベース接続があります。以下に示すコードを追加することで、別のデータベースを 3 つの環境すべてに接続できます。

その他_開発:

  アダプター: アダプター名 (mysql2、postgresql、oracle、Mssql など)

  データベース: データベース名_開発

  ユーザー名: ユーザー名

  パスワード: ******

その他のテスト:

  アダプター: アダプター名 (mysql2、postgresql、oracle、Mssql など)

  データベース: データベース名_test

  ユーザー名: ユーザー名

  パスワード: ******

その他の制作:

  アダプター: アダプター名 (mysql2、postgresql、oracle、Mssql など)

  データベース: データベース名_production

  ユーザー名: ユーザー名

  パスワード: ******

Database.yml を設定した後、以下のケースに基づいて 2 つの方法で接続できます。

  • 既知のデータベース構造
  • 不明なデータベース構造

既知のデータベース構造:

データベース構造を認識していれば、それぞれのモデルを作成し、モデル内で接続を確立できます。

例:

クラス OtherTable < ActiveRecord::Base

  self.abstract_class = true

  確立_接続「other_#{Rails.env}」

終わり

これは別のモデルにも継承できます

クラス Astronaut < OtherTable

  has_many :ミッション

  has_many :シャトル、スルー: :ミッション

終わり

不明なデータベース構造:

データベースの構造がわからない場合は、モデルを 1 つだけ作成し、それに接続することができます。動的パラメータに基づいてクラッドを実行できます。

例:

クラス ExternalDatabaseConnection < ActiveRecord::Base

  self.abstract_class = true # このクラスにはテーブルがありません

  接続の確立(:データベース名)

終わり

  1. 直接接続:

2 番目のデータベースがそれほど重要ではなく、1 つまたは 2 つの場所で使用されている場合は、

ActiveRecord::Base.establish_connection を認証情報とともに実行すると、そのデータベースと対話できるようになります。

例:


ActiveRecord::Base.establish_connection(:adapt)er=>"アダプタ名",:host=>"ローカルホスト",

:ユーザー名 =>"ユーザー名",:パスワード => "*********",:データベース => "データベース名")

  1. モジュールでの書き込み:

以下に示すように、モジュールからデータベースに接続し、モデルに含めることもできます。

例:

モジュール SecondDatabaseMixin

  ActiveSupport::Concer を拡張する

  含まれている {確立_接続「other_#{Rails.env}」}

終わり

外部データベース接続:

接続するデータベースはどのサーバー上に存在しても構いません。同じサーバー上にない場合は、ホストが存在するサーバーの IP アドレスとしてホストを指定できます。

例:

アダプター: アダプター名 (mysql2、postgresql、oracle、Mssql など)

  ホスト: external_db_server_ip (192.168.1.1)

  ユーザー名: user_name

  パスワード: *******

  データベース: db_name

注記: 入手できる宝石はほとんどありません  magic_multi_connections、Db-charme など。

長所と短所:

 長所

  • アプリケーションに複数のクライアントがあり、それぞれのクライアントが顧客用に異なるデータベースを必要とする場合。
  • 各クライアントのバックアップに役立ちます。
  • 別のデータベースは、異なるアダプタを備えた別のアプリケーションで使用される場合があります。
  • ユーザーからアクセスが遅いと報告された場合、どのDBが問題の原因であるかを簡単に知ることができます。

短所

  • 利用者が少なくシンプルなアプリケーションの場合
  • データベース構造に変更があった場合の残りのコードのメンテナンス。

続きを読む : 

Rails アプリのパフォーマンスを向上させる簡単な方法

Rails API の概要

画像の加工

アクティブなレコードとのポリモーフィックな関連付け

 ご連絡ください。

マナサ・ヘゲレ

Ruby on Rails シニア開発者

最新のアップデートを購読する

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

jaJapanese