我们有一个实时MySQL数据库,它有99%的插入,大约每秒100次.我们希望每天存档数据,以便可以在不影响主活动数据库的情况下对其运行查询.此外,归档完成后,我们希望清除实时数据库.

如果可能的话,在没有锁定插件的情况下,实现这一点的最佳方式是什么?我们使用INSERT DELAYED进行查询.

推荐答案

http://www.maatkit.org/具有MK-Archiver

将表中的行存档或清除到另一个表和/或文件.它的设计目的是在非常小的区块中高效地"蚕食"数据,而不会干扰关键的在线事务处理(OLTP)查询.它通过一个非回溯查询计划来实现这一点,该计划在每个查询之间保持其在表中的位置,因此每个后续查询查找更多可存档行的工作非常少.

另一种 Select 是每天简单地创建一个新的数据库表.MyISAM在这方面确实有一些优势,因为到表末尾的插入通常不会挡路,而且有一种合并表类型可以将它们全部放在一起.许多网站将httpd流量记录到这样的表中.

在Mysql 5.1中,也有分区表可以做同样的事情.

Database相关问答推荐

如何使一个IP允许在运行GitHub操作到RDS数据库时,您不允许从外部访问数据库?

便携式(PHPPass)密码哈希.我应该使用它们吗?

将整数作为字符串存储在数据库中的缺点

将 XML 存储在数据库中是否不好?

在 iphone 上本地存储数据

如何在 Rails 中不启动事务的情况下运行迁移?

如何从 T-SQL 中的表中 Select 前 N 行?

使用多个数据库模式的 JPA

限制一个 sqlite 表的最大行数

存储并仍然索引加密客户数据的最佳方式是什么?

将用户数据存储在 LDAP 而不是 RDBMS 中的原因

Fluent NHibernate 的类映射生成器

SQL Server 自动备份

TransactionScope 是如何工作的?

何时在关系数据库中使用枚举或小表?

Apache Spark 的主键

为什么 OODBMS 不像 RDBMS 那样普遍?

为什么实体框架连接需要元数据属性?

python3k中的sqlite3中的cursor.rowcount总是-1

在 Django 中,如何从数据库中 Select 100 条随机记录?