6

バックグラウンド:

作成中のアプリの最小要件を把握しようとしています。私は開発者として MySQL と PostgreSQL にかなり精通していますが、DBA ではないので質問します。リモート API と通信するモバイル アプリを構築しており、この API の要件を把握する必要があります。現時点では、趣味のプロジェクトとしてこれを行っており、モバイル アプリは無料になる予定です。そのため、大きな予算はありません。要件をできる限り正確に把握する必要があります。

アプリケーションの要件:

リモート API は、postgresql クラスターにデータを格納する web および json インターフェイスを提供する Rails で行われます。モバイル アプリは多くの短い書き込みを送信します ~ 毎分約 1 * 20,000 アプリのインストール。ほとんどの読み取りは、レポート スタイルなので、読み取りが長くなるため、それほど頻繁には発生しません。おそらく、ユーザーごとに 1 日に 1 回か 2 回です。そのため、DB は主に書き込み用に最適化する必要があります。読み取りアクションは、現時点ではリアルタイムである必要がないため、常にレプリカ クラスター/サーバーにリダイレクトできます。1日遅れでも大丈夫です。

コメントの質問ごとの詳細:

1) 書き込みは非常に小さい: 認証トークン (API キーなど) とほんの少しのデータを送り返します。しかし、私はそれを疑います。写真などの大きなデータは想定していません。ランニング/ジョギング/サイクリング追跡アプリに似ています。

2) スケールアップ?うーん。最初の 2 年以内に実際に軌道に乗れば、最大 200,000 ~ 400,000 個のアプリ。

3) データはかなり重要です。要点は、データが収集されたら正確なレポートを実行できるようにすることです。ただし、問題を軽減するためのオプションが 2 つあります。

  • Google マップのデータと最後の既知のポイント (データが失われる直前、および接続が再確立された直後) に基づいて推定できます。
  • データは最初に電話機の sqlite ストレージに保存され、1 日 1 回 (またはアプリの起動時)、サーバーと同期されて検証されます。検証/同期が成功すると、電話のデータをローテーションできます (1 か月以上前のものは電話から消去できます)。

実際の質問の詳細

この規模のアプリを扱ったことのある方に質問です。最初の PostgreSQL のセットアップはどのようなものでしたか? クラスター構成とハードウェア (クラウド) の両方で、またスケーリングがどれほど簡単/困難でしたか?


無関係な提案や回答を防ぐには:

NoSQL の代替手段

CouchDB、MongoDB などの NoSQL の代替案を検討しました。Riak は実際に勝者になりました.1 人のチームにとっては管理が容易であり、レプリケーション クラスタを機能させるために 3 台の db サーバーしか必要としないことを考えると. しかし、自分のアプリをマッピングした後、NoSQL はこのアプリには適していないことがわかりました。これは RDBMS の領域に属しています。

NoSQL の代替と SQL オプション

予算がなかったことを考えると、SQL サーバーや Oracle などについても考えていませんでした。MySQL は他の唯一の代替手段ですが、私には hstore が必要であり、レプリケーションは PostgreSQL IMHO で今すぐ実装する方が簡単です。

4

1 に答える 1

3

これは良い知らせです:

データは最初に電話機の sqlite ストレージに保存されます...

そのため、更新をまとめてバッチ処理できる小さな書き込みのバーストに対処する必要はありません。さらに、時々それらを拒否することができ、アプリは後で再試行できます. また、時間単位ではなく月単位で借りることもできます (安い!)。

つまり、私たちの制限は純粋に最大の持続可能なディスク I/O までです。さて、あなたは物事を複雑にする「クラウド」に言及しています。安価なディスク I/O は通常、(あらゆる種類の) データベースでは不十分であり、優れたものは高価です。

封筒の裏側の計算...

20,000 アプリ @ 1kB/分 ~ 20 MB/分 ~ 333 kB/秒 200,000 アプリ @ 1kB/分 ~ 200 MB/分 ~ 3.3 MB/秒

ここで、最初に WAL (トランザクション ログ) に書き込み、次にテーブルに書き込みます。レポートを作成できるようにする必要がありますが、それほど多くはありません。ディスク要件が大幅に増加する場合は、独自のディスクを備えた管理対象の実際のマシンをいくつか使用することをお勧めします。

だから - PostgreSQLサーバーのセットアップを自分でスクリプト化してください。ansibleはかなり使いやすいと思います。いくつかのテスト スクリプトを追加して、さまざまな数のリクエストとバッチ サイズをシミュレートします。VM をスピンアップし、一連のテストを実行して、プロバイダーごとに数時間で実際の数値を取得できるはずです。

于 2013-08-16T07:32:10.430 に答える