HEROKU「システム」上の複数のデータベースに1つのアプリでアクセスできるようにしたい。データベースへの接続を動的に変更できますか?
なぜ私は尋ねる...
プロセッサの負荷が非常に高いバックグラウンド ジョブが多数含まれるアプリがあります。特定のユーザーが、たとえば 50,000 個の製品の製品フィードをアップロードして既存の製品と比較し、差分のみを更新する場合、「数」分かかることがあります。
ここで、遅延を軽減するために、複数のワーカーをスピンアップし、それぞれがまったくなくなるまで、ロットから小さなバイトを取り出します。DB が打撃を受けているため、GUI が遅く感じ始める前に、約 20 のワーカーに到達できます。
コードの一部を調整し、DB にある程度インデックスを付けました。他にもできることはあると思いますが、最終的には収益の減少の法則に苦しむことになります。
1 人のユーザーの場合、私はあまり気にしません... 50,000 個の製品をアップロードする場合、少し待つ必要があります..
しかし、ユーザー 1 のアップロードの選択は、ユーザー 2 に影響を与えます。(会社が違うので、データのクロスオーバーはありません)。
現在、postgresql でスキーマを使用してデータを分離することにより、さまざまなユーザーを処理しています。ただし、さまざまなユーザーが同じ db 接続を共有しており、最適なプランでも、20 人のユーザーが同時に 50,000 個の製品をアップロードしようとする時間を見ることができます (たとえば、月/四半期の最初)。ユーザー 21 は、このため、システムの速度が大幅に低下します。
質問: 異なるユーザーを異なるデータベースに割り当てることはできますか? ユーザーがログインし、中央の DB に対して情報を検証すると、別の DB が引き継ぎますか?
私の現在の解決策は、heroku のさまざまなインスタンスです。コードは 1 つのベースであり、git push(es) のスクリプトを作成するだけなので、コードを維持するのは簡単です。唯一の問題は、ログイン URL が異なることです。簡単な DB スイッチ ソリューションが見つからない場合は、直面する可能性があると思います。