我们的架构如下所示:
- 表
tblTrip
:存储开始和结束行程日期和时间 - table
tblTripData
: 保存所有行程数据 - table
tblTripEvent
:存储与特定行程相关的事件。
然后我们还有两个表tblTripEmail
和tblTripSms
,它们存储了根据事件发送的电子邮件和短信。
我们希望仅保留 3 个月前的行程数据,我们希望不时删除并存档其余的以存储在离线数据库中。
存储在离线数据库中的最佳机制是什么?我不确定分区会有什么帮助,因为这些表在这里是相互链接的。
下面是 tblTripData 的表 desc
CREATE TABLE IF NOT EXISTS `tblTripData` (
`tripDataID` int(11) NOT NULL AUTO_INCREMENT,
`tripID` int(5) NOT NULL,
`deviceSerialNumber` varchar(20) NOT NULL,
`latitude` double NOT NULL,
`longitude` double NOT NULL,
`speed` float NOT NULL,
`course` int(3) NOT NULL,
`gpsdateTimer` datetime NOT NULL,
`insertDateTime` datetime NOT NULL,
`odoMeter` float NOT NULL DEFAULT '0',
`driverID` int(5) NOT NULL,
`eventAlertID` int(11) NOT NULL DEFAULT '0',
`tripDataInsertDateTime` datetime NOT NULL
PRIMARY KEY (`tripDataID`),
KEY `dateTime` (`gpsdateTimer`),
KEY `tripID` (`tripID`),
KEY `eventAlertID` (`eventAlertID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
试试Percona Toolkit的 pt-archiver,它允许在两个 MySQL 实例之间动态传输数据。
例如,您可以使用该
--where
选项按日期过滤结果集。它特别适合您的需求,因为您可以在同一命令中传输数据并将其从源中删除。
官方页面在这里:pt-archiver
一个例子 :
--dry-run
如果要测试,请添加选项。--no-delete
如果要将数据保留在源数据库中,请添加该选项。