背景
我花了几天时间试图弄清楚我应该如何在 MySQL 中处理大量数据。我为该软件的新服务器选择了一些程序和技术。我可能会使用运行 nginx、Percona Server的 Ubuntu 14.04LTS,并将对我计划的 3 个表使用 TokuDB,对其余表使用InnoDB 。
但我的主要问题仍未解决。如何处理数据库中的海量数据?
数据
我对可能接收的数据的估计是每年 5 亿行。我将每4 分钟从传感器接收一次测量数据。
要求
插入速度不是很关键,但我希望能够在 1-2 秒内选择几百个测量值。所需资源的数量也是一个关键因素。
当前计划
现在我考虑将传感器数据拆分为 3 个表。
编辑:在每张桌子上:
id = PK, AI
sensor_id 将被索引
CREATE TABLE measurements_minute(
id bigint(20),
value float,
sensor_id mediumint(8),
created timestamp
) ENGINE=TokuDB;
CREATE TABLE measurements_hour(
id bigint(20),
value float,
sensor_id mediumint(8),
created timestamp
) ENGINE=TokuDB;
CREATE TABLE measurements_day(
id bigint(20),
value float,
sensor_id mediumint(8),
created timestamp
) ENGINE=TokuDB;
所以我会将这4 分钟的数据存储一个月。数据 1 个月大后,将从分钟表中删除。然后平均值将从分钟值计算并插入到测量小时表中。然后,当数据存在 1 年时,所有小时数据都将被删除,每日平均值将存储在 measurement_day 表中。
问题
这被认为是这样做的好方法吗?还有什么需要考虑的吗?表分区怎么样,我应该这样做吗?我应该如何执行将日期拆分为不同的表?触发器和程序?
编辑:我的想法
知道MonetDB或Infobright是否对此有用吗?