【发布时间】:2014-06-04 10:26:28
【问题描述】:
背景
我花了几天时间试图弄清楚我应该如何在 MySQL 中处理大量数据。我为该软件的新服务器选择了一些程序和技术。我可能会使用运行 nginx、Percona Server 的 Ubuntu 14.04LTS,并将 TokuDB 用于我计划的 3 个表,并将 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 年时,所有 小时 数据将被删除,每日平均值将存储在 measure_day 表中。
问题
这是否被认为是这样做的好方法?还有什么需要考虑的吗?表分区怎么样,我应该这样做吗?我应该如何执行将日期拆分为不同的表?触发器和过程?
编辑:我的想法
您知道 MonetDB 或 Infobright 是否对此有用?
【问题讨论】:
-
是的,但正如 OP 中所述。我打算计算旧数据的平均值并仅存储平均值。所以实际上我会少很多。
标签: mysql database-design bigdata database-partitioning tokudb