0

ボトルネックに直面しているため、データベースに直接書き込まないように統計追跡システムを変換したいと思います。

現在、サイトの特定の側面にmemcachedを使用しており、統計を保存してmysqlDBに定期的にコミットするために使用したいと考えていました。

ただし、問題は、データベースにコミットするcronjob実行の間に収集された統計が存在する可能性のあるアイテムの数(数百万単位)にあります。を実行し、SELECT * FROM dataすべてのmemcacheキーの存在を確認してから、テーブルを更新する以外に、これを行う他の方法はありますか?

4

3 に答える 3

1

(以下が福音だと言っているわけではありません。これは私の直感です。後で述べたように、私はあなたのシステムの詳細を持っていません:)そして明らかに不快感などを意味するものではありません:))

これには memcached を使用しないことをお勧めします。Memcached は、値を保存するのではなく、以前に取得した値をすばやく取得できるように構築されています。大きな違いは、キャッシュがいっぱいになり、データが失われることです。

通常、キャッシュにはデータがなく、ソースからデータを再収集しますが、この場合は不可能です。それだけで、私があなたを思いとどまらせようとする理由になります。

今、主な問題は、ヒットしている mysql 接続の制限であると言います。単純なことを行う場合 (コメントで話したことのように: insert delayed)、それは単なる制限の増加のケースです。おそらく、スクリプト/ユーザーがデータベースに一度アクセスして「これは最終的に追加する必要があります」と言ってから立ち去るのに十分な力があるはずです。ユーザーがそのための接続を 1 つも開くことができない場合、キャッシュのレイヤーを追加してもおそらく解決できない深刻なリソースの問題がありますか?

システム、ソフト、ハードウェアの仕様なしで言うのは明らかに難しいですが、私の提案は、モンキーパッチの代わりに、制限を増やしてサーバー変数を少しいじって、接続を開かせることができるかどうかを確認することです. memcached を中間レイヤーとして使用することで、システムを構築します。

于 2012-04-09T18:41:32.337 に答える
1

統計データにも同様の問題がありました。ただし、me​​mcached は使用しないでください。すべてのアイテムが DB に移動されるとは限りません。データが失われたり、プロセス データが二重になったりする可能性があります。

読み書きしているデータ量と必要な接続数に対してボトルネックを分析する必要があります。そして、Hadoop、Cassandra、Scripe などのスケーラブルなシステムに切り替えるよりも。

于 2012-04-10T06:31:17.683 に答える
0
  1. 実行しているプラ​​ットフォームに関する追加情報を提供する必要があります: O/S、データベース (バージョン)、ストレージ エンジン、RAM、CPU (可能な場合)?

  2. 単一のテーブルまたは複数のテーブルに挿入していますか?

  3. 挿入機能が遅くなるため、挿入するテーブルのインデックスを無効にできますか。

  4. 生データを挿入するときに値を計算するトリガーまたはストアド プロシージャを実行していますか?

于 2012-04-10T08:38:13.280 に答える