数据库相关

MySQL 中数据库引擎 Archive 与 Blackhole

在涉及到订单操做的时候,咱们采用了 celery 来进行异步写入日志,以保证数据的安全。数据库

遇到了一个数据库引擎 Archive,支持行级锁,不支持事务操做,支持并发插入,很适合用来当日志,但它只能进行 INSERT 和 SELECT 操做,不容许 UPDATE/REPLACE/DELETE 操做。安全

而后其实它也不容许 Truncate 操做,当我在测试完毕后想清空表时,就变得很蛋疼,必须删除表重建。并发

后来又发现了一个新的数据库引擎 Blackhole,它能像黑洞同样,吸取全部写入的数据。所以能够把 Archive 临时修改成 Blackhole 引擎,让 Blackhole 先把表中全部项目吸取进黑洞,使表变成了一张空表。这时再将引擎修改回 Archive,就能够达到跟 Truncate 同样的效果了。异步

删除操做 Truncate 与 Delete

这两个操做并不同。测试

Delete 操做会被记录下来,并且是每行修改都会被记录,删除是物理性的删除。删除的时候只会删除没有外键约束的数据,被外键约束的行不会被删除。id 计数不会被重置。Delete 是能够跟上 Where 条件的。阿里云

Truncate 也会被记录下来,可是它不会物理地删除这些数据,只是作一下标志说这些位置能够被从新使用,因此 Truncate 的速度会更快。若是表中有外键约束存在,必须删除约束后再进行 Truncate,不然会失败。同时 Truncate 操做会重置 id 计数。Truncate 不能跟条件字段。日志

阿里云 RDS 控制面板中的清空表操做属于 Truncate。此处的删除指的是删除表中所有数据或某些数据,若是要删除整个表,包括表接口,可使用 Drop 命令。blog

参考资料

  1. 如何选择MySQL存储引擎
相关文章
相关标签/搜索