1

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 スイッチ ソリューションが見つからない場合は、直面する可能性があると思います。

4

2 に答える 2

1

すでにスキーマでデータを分離しているため、ユーザーまたはユーザーのセットごとにデータをシャーディングできるようです。その場合で、Ruby と ActiveRecord を使用している場合は、https://github.com/tchandy/octopusをご覧ください。オンザフライでデータベースをスピンアップしようとしているのではなく、データベースを既に構築して使用する準備ができており、必要に応じてさらに追加できると思います。

確かに、Heroku Hadoop アドオンの 1 つなど、集中的な処理に適した適切なツールを使用することで、あなたが行っていることをより効果的に行うことができるように思えます。それでも、何らかの理由でそれができない場合は、上記の gem をチェックしてください。このような gem は他にもいくつかあります。もちろん、この gem がなくても独自の ActiveRecord 接続を技術的に管理することはできますが、すぐに面倒になると思います。

もちろん、Ruby や ActiveRecord を使用していない場合でも、データを分割して、アプリの言語で上記の gem のようなものを探してください :)。

于 2013-06-14T03:32:45.947 に答える
0

heroku の postgres データベースは、環境変数で構成されています。実行すると、次のようheroku configに表示されます。

DATABASE_URL:   postgres://xxx.compute.amazonaws.com:5432/xxx

これらの変数を使用して、他の heroku インスタンスのデータベースに接続したり、異なる heroku アプリで単一のデータベースを共有したりできます。

無料のherokuインスタンスでこの種のものを実行しようとすると、サービス規約に違反すると思います.

それがスケーラビリティに関するものであれば、より高価なデータベースインスタンスにお金を払う必要があると思います...

于 2013-06-14T01:24:28.397 に答える