10

初日から大量の小さなリクエストに対応する必要があるシステムを構築しています。「負荷」とは、1 秒あたり最大 5,000 件のクエリを意味します。クエリごとに、noSQL データベースから最大 20 レコードを取得する必要があります。最初に 3 ~ 4 レコード、その後すぐに 16 ~ 17 の読み取りが行われます (最初の読み取りの結果に基づく)。これは、1 秒あたり約 100,000 個のオブジェクトを読み取ることになります。

これまでは、DynamoDB を使用することを考えていました。非常に簡単に開始できるからです。

オブジェクトは本当に小さいので、ストレージは私が心配するものではありません. 私が心配しているのは、読み取りのコストです。DynamoDB のコストは、1 秒あたり 100 件の最終的に一貫性のある (私たちにとっては問題ありません) 読み取りごとに 1 時間あたり 0.0113 USD です。すべてのオブジェクトのサイズが最大 1KB の場合、これは 1 時間あたり $11.3 です。1 日あたり 16 時間の平均使用量に基づくと、1 か月あたり 5424 ドルになります。

だから...月額5424ドル

他のオプションも検討しますが、メンテナンスの問題やコストなどが心配です。そのようなセットアップで作業したことがないので、あなたのアドバイスは本当に貴重です.

このような読み取り/書き込みが集中するアプリケーションにとって、最も費用対効果の高い (それでも手間のかからない) ソリューションは何でしょうか?

4

3 に答える 3

17

上記の説明から、毎秒 5,000 件のクエリは完全に読み取り操作であると想定しています。これは基本的に、データ ウェアハウスのユース ケースと呼ばれるものです。可用性の要件は何ですか? AWS などでホストする必要がありますか? それとも、社内で実行するために独自のハードウェアを購入できますか? データはどのように見えますか? このデータを消費するロジックはどのようなものですか?

質問に明確に答えるには十分な情報がここにはないと感じるかもしれませんが、少なくともいくつかのアドバイスを提供できます。

まず、データが比較的小さく、クエリが単純な場合は、手間を省いて、ディスクではなく RAM からクエリを実行していることを確認してください。インメモリ キャッシング/テーブルスペースをサポートする最新の RDBMS であれば、うまくいくでしょう。Postgres と MySQL の両方に、このための機能があります。Postgres の場合、すぐに使用できる構成は非常に貧弱なハードウェアで実行するように設計されているため、メモリ パラメーターを適切に調整したことを確認してください。NoSQL オプションを使用する必要がある場合、データの構造によっては、Redis がおそらく適切な選択です (これも主にインメモリです)。ただし、どの種類の NoSQL が最適かを判断するには、クエリを実行しているデータの構造と、実行しているクエリについて詳しく知る必要があります。

クエリがSELECT * FROM table WHERE primary_key = {CONSTANT}要約すると、NoSQL をいじる必要はありません。RDBMS を使用して、問題を調整する方法を学んでください。独自のハードウェアで実行できる場合、これは二重に当てはまります。接続数が多い場合は、読み取りスレーブを使用して負荷を分散します。

事後編集 (2013 年 5 月 7 日) : 以前に言及しておくべきこと: EC2 は、自己管理型データベース ノードのパフォーマンスを測定するための非常にくだらない場所です。鼻を出さない限り、I/O パフォーマンスはひどいものになります。プロビジョンド IOPS に大金を支払うか、多数の EBS ボリュームをまとめて RAID するか、S3 などに WAL を同期させながらエフェメラル ストレージに依存するかのいずれかを選択できます。これらのオプションはすべて高価であり、保守が困難です。これらのオプションはすべて、パフォーマンスの程度が異なります。

最近のプロジェクトでこれを発見したので、Rackspace に切り替えました。そこではパフォーマンスが大幅に向上しましたが、本当に高速な I/O が必要なときに、CPU と RAM のリソースに多額の費用を支払っていることに気付きました。今は Digital Ocean でホストしています。DOのストレージはすべてSSDです。彼らの CPU パフォーマンスは、他の製品に比べてやや劣っていますが、私は信じられないほど I/O バウンドなので気にしません。Postgresrandom_page_costを 2 に落とした後、私はとてもうまくやっています。

物語の教訓:プロファイル、チューン、リピート。仮定の質問を自問し、常に仮説を検証してください。

別の事後編集 (2013 年 11 月 23 日) : ここで説明している内容の例として、次の記事を参照して、MySQL 5.7 を InnoDB memcached プラグインと共に使用して 1M QPS を達成する例を確認してください。 : http://dimitrik.free.fr/blog/archives/11-01-2013_11-30-2013.html#2013-11-22

于 2012-08-26T21:09:02.477 に答える
2

「負荷」とは、1 秒あたり最大 5,000 件のクエリを意味します。

ああ、それほど多くはありません。SQL でもそれを処理できます。したがって、ほとんどの最新の DB が処理できる制限内にすでに簡単に収まっています。しかし、彼らはこれを右でしか処理できません:

  • インデックス
  • クエリ
  • サーバー ハードウェア
  • 大規模なデータの分割 (それぞれが比較的少ないデータを持つ大量のシャードが必要になる場合があります。ここでは依存しているため、「可能性がある」と言いました)

これは、1 秒あたり約 100,000 個のオブジェクトを読み取ることになります。

これは、より高負荷のシナリオです。これらを断片的に読まなければならないのでしょうか。もしそうなら、(私が言ったように)レプリケートされたシャード全体に負荷を分散することを検討する必要があるかもしれません.

オブジェクトは本当に小さいので、ストレージは私が心配するものではありません.

Mongo はディスクの割り当てに積極的であるため、小さなオブジェクトでも大量のスペースを事前に割り当てます。これは心に留めておくべきことです。

だから...月額5424ドル。

そうそう、Amazon の請求のスリル:\

他のオプションも検討しますが、メンテナンスの問題やコストなどが心配です。そのようなセットアップで作業したことがないので、あなたのアドバイスは本当に貴重です.

今、あなたはすべての障害にぶつかります。独自のクラスターをセットアップすることはできますが、その場合、サーバー、人、管理者、および独自の保守時間に対して、それだけの費用と時間 (またはそれ以上) を支払うことになる可能性があります。これが、ここで DynamoDB が本当に優れている理由の 1 つです。サーバー管理の負荷と苦痛とストレスを解消しようとしている大規模なセットアップの場合 (本当に苦痛だと信じてください。開発者であれば、今から役職をサーバー管理者に変更することもできます)。

これを自分でセットアップすることを検討すると、次のものが必要になります。

  • かなりの量の EC インスタンス (データとインデックスのサイズによって異なりますが、おそらく 30 近くになるでしょうか?)
  • サーバー管理者 (たぶん 2 人、フリーランス?)

どちらも年間数十万ポンドの損失をもたらす可能性があります。個人的には、ニーズと予算が合うのであれば、管理されたアプローチに賭けます。マネージド Amazon DB が提供できる範囲を超えてニーズが高まった場合は、インフラストラクチャに移行してください。

編集

たとえば、かなりの数のブラックホールを使用して費用対効果が得られたことを修正する必要があります。

  • あなたが持っているデータの量がわかりません
  • 書き込みに自信がない

これらは両方とも、次のシナリオを配置するのに役立ちます。

  • 大量の書き込み (読み取りとほぼ同じ)
  • 大量のデータ (ロット)
于 2012-08-26T20:24:09.470 に答える
0

おすすめ順で紹介します。

  1. ユースケースを特定し、正しいデータベースを選択してください。あらゆる種類のワークロード (OLTP、分析など) について、MySQL と MongoDb を定期的にテストしています。テストしたすべてのケースで、MySQL は MongoDb よりも優れており、MongoDb と比較して ($/TPS) 安価です。MongoDb には他にも利点がありますが、それは別の話です...ここではパフォーマンスについて話しているので。

  2. クエリを RAM にキャッシュするようにしてください (十分な RAM をプロビジョニングして)。

  3. RAM がボトルネックになっている場合は、エフェメラル SSD を利用する SSD キャッシング ソリューションを試すことができます。これは、ワークロードがキャッシュに適している場合に機能します。通常、エフェメラル SSD はクラウド プロバイダーから課金されないため、多くの費用を節約できます。

  4. PIOPS/RAID またはその組み合わせを試して、アプリケーションに適切な IOPS を作成してください。

于 2014-12-29T08:45:06.837 に答える