イベント ロガー用の mysql テーブルの設計についてアドバイスをお願いします。
私たちのニーズ: - 多くのアクションを追跡する - 毎秒 10,000 アクション - 現時点で 10 億行
当社のハードウェア: - 2*Xeon (システムでは 32 CPU として認識) - 128 GB RAM - 6*600 SSD (Raid 10)
私たちのテーブルデザイン:
CREATE TABLE IF NOT EXISTS `log_event` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`id_event` smallint(6) NOT NULL,
`id_user` bigint(20) NOT NULL,
`date` int(11) NOT NULL,
`data` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `id_event_2` (`id_event`,`data`),
KEY `id_inscri` (`id_inscri`),
KEY `date` (`date`),
KEY `id_event_4` (`id_event`,`date`,`data`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8
ALTER TABLE `log_event`
ADD CONSTRAINT `log_event_ibfk_1` FOREIGN KEY (`id_inscri`) REFERENCES `inscription` (`id_inscri`) ON DELETE CASCADE ON UPDATE CASCADE;
私たちの問題: - プライマリとして自動インクリメントがありますが、実際には使用されていません。それを取り除くのは問題ですか?削除すると主キーがなくなります => 行を識別する方法は?
パーティショニングをしたいのですが、外国人では無理そうですか?
一括挿入は行いません。インデックスなしでメモリ テーブルに挿入し、5 分ごとにデータをコピーすることをお勧めしますか?
最適化するアイデアはありますか? この種のシステムのベストプラクティスはありますか?
ありがとう !
フランソワ