3

MySQL での頻繁な挿入に問題があります。私はインターネットでたくさん検索しましたが、私の問題に対する良い答えが見つかりませんでした.

非常に高い頻度で多くのイベントをログに記録する必要があります (~3000 挿入/秒 => 1 日あたり 2 億 6000 万行)。これらのイベントは次のような InnoDB テーブルに格納されます。

log_events :
 - id_user : BIGINT
 - id_event : SMALLINT
 - date : INT
 - data : BIGINT (data associated to this event)

私の問題は次のとおりです。
- 挿入を高速化する方法は? イベントは何千もの訪問者によって送信され、一括挿入ができません
- IO 書き込みを制限するには? 6*600 GB SSD ドライブを使用しており、書き込み IO の問題があります。

この種の問題に対するアイデアはありますか?

ありがとう

フランソワ

4

2 に答える 2

1

イベントは何千人もの訪問者によって送信され、一括挿入することはできません

データを一括挿入またはシャードする必要があります。最初に一括挿入ルートを試してみたいと思います。

これらのイベントが自律的なプロセスによって作成されていることを示唆できないと思う場合は、データベースに直接送信するのではなく、仲介者を介してイベントを送信する必要があります。そして、そのファネルをイベントベースのサーバーとして実装するのが最も簡単です (スレッド化されたサーバーやフォークサーバーではなく)。

イベントが何であるか、どこで発生したかについては言及しません。これは、ソリューションの実装の詳細に影響を与えます。

rsyslog と syslogng の両方が MySQL バックエンドと通信します - したがって、メッセージごとに新しい接続を確立するオーバーヘッドを排除できます - しかし、どちらかがバッファリング/一括挿入を実装しているかどうかはわかりません。彼らが生成するファイルを単一のプロセスで追跡し、そこから一括挿入を作成することは確かに可能です。

このイベント ベースのサーバーこのバッファ ツール、および非同期の mysqli 呼び出しとウォッチドッグを実装するためのコードを使用して、漏斗を作成するのは比較的簡単です。または、 node.js を async mysql lib で使用できます。statsd (再び node.js を使用)のようなツールもあり、データ上のデータを集計することもできます。

または、最初から何かを書くこともできます。

ただし、書き込み専用データベースは役に立たないハードウェアです。このデータがどのように使用されるかについての詳細は提供されていません。これは、ソリューションの設計に関連しています。また、理想的にはデータ フィードは単一のプロセス/DB セッションであるため、InnoDB ではなく MyISAM を使用することをお勧めします (後のコメントで、MyISAM に問題があると述べました。これはおそらく複数のクライアントで発生したものです)。

于 2013-04-24T15:01:17.673 に答える