ビジネス要件は日々変化し続けており、私たちは使用状況、新機能の追加または削除に基づいてアプリケーションを常に最適化またはスケーリングし続けます。アジャイル開発全体において、時折課題が追加されます。
データベースに依存するアプリケーションは、データベース層を分離し、個別にスケーリングすることでスケーリングできます。 OPS チームは、アプリケーション展開アーキテクチャに基づいて、このようなインフラストラクチャの変更に対応します。
プログラマは、複数のデータベースで動作するようにアプリケーションを構成できます。このドキュメントでは、Rails アプリケーションでこれを実現する方法を説明します。
追加のデータベースをアプリケーションに接続するには 3 つの異なる方法があります
- データベース.ymlのセットアップ
- 直接接続
- モジュールへの書き込み
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 # このクラスにはテーブルがありません
接続の確立(:データベース名)
終わり
- 直接接続:
2 番目のデータベースがそれほど重要ではなく、1 つまたは 2 つの場所で使用されている場合は、
ActiveRecord::Base.establish_connection を認証情報とともに実行すると、そのデータベースと対話できるようになります。
例:
ActiveRecord::Base.establish_connection(:adapt)er=>"アダプタ名",:host=>"ローカルホスト",
:ユーザー名 =>"ユーザー名",:パスワード => "*********",:データベース => "データベース名")
- モジュールでの書き込み:
以下に示すように、モジュールからデータベースに接続し、モデルに含めることもできます。
例:
モジュール 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 アプリのパフォーマンスを向上させる簡単な方法
マナサ・ヘゲレ
Ruby on Rails シニア開発者