1000台のデバイスはどのように接続していますか?それぞれがサーバーへのTCP/IP接続を確立する場合は、接続先のマシンに十分なファイル記述子があることを確認する必要があります。/proc/sys/fs/file-max
最大値を確認するために見てください。単一のサーバーマシンへの1,000のクライアント接続は、多数と見なされます。
各レコードにはどのくらいのデータがありますか?ネットワークハードウェアを圧倒しますか?各レコードが10バイトの場合、1秒あたり2,000万バイト、つまり1億6,000万ビットが着信することを意味します。100メガビット/秒のイーサネットインターフェイスでは、ほぼ十分ではありません。ギガビットインターフェイスでさえ疑わしいです:巨大なスループットを維持するのは難しいです。DBMSがデータを受信するサーバーとは別のマシン上にある場合、これらのレコードは出入りする必要があり、ネットワークスループットが2倍になることに注意してください。
DBMSまたはシステムの他の部分がワークロードで遅れる可能性をどのように処理しますか?INSERTコマンドを受け入れる際のDBMSによる時折の30秒の遅延は非常に可能ですが、その間に大量の未処理のデータが蓄積されます。
この問題を、おそらく50または100のデバイスのグループに分割し、データを収集する中央サーバーのセットアップを20または10に分割することを検討する必要があります。そうすれば、単一障害点が発生せず、ネットワークハードウェアを極端にプッシュすることはなく、ハードウェアを紛失した場合に、ある種のフェイルオーバー戦略を実行できる可能性があります。また、はるかに安価で費用対効果の高いサーバーおよびネットワーク機器を使用できるようになります。
MySQLでは、実行する必要のあるクエリをサポートするために、できるだけ少ないインデックスを使用します。サマリークエリ(などSELECT COUNT(*) FROM raw WHERE timestamp > NOW() - INTERVAL 1 HOUR
)を実行すると、実行中のINSERT操作が大幅に遅くなる可能性があることに注意してください。
データフローを処理するために、ActiveMQなどのキューイングシステムの使用を検討することをお勧めします。