扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Schema的优化和索引 - 范式和非范式6
当使用缓存和汇总表,必须要决定是否要实时维护数据或者周期性重建数据。哪种更好完全取决与你的应用程序,但是周期性重建数据不仅仅可以节省资源,还可以使结果存放在更有效率的表中,这些表不会碎片并且含有完全排序的索引。
当你重建汇总和缓存表的时候,在操作的时候你常常需要它们的数据保持可见。你可以使用“shadow table”(影像表)来实现。当你已经创建它之后,你可以使用原子性的重命名来交换这些表。举个例子,如果你需要重建my_summary,你能创建my_summary_new,填充数据,把它和真正的表作交换。
mysql> DROP TABLE IF EXISTS my_summary_new, my_summary_old;
mysql> CREATE TABLE my_summary_new LIKE my_summary;
-- populate my_summary_new as desired
mysql> RENAME TABLE my_summary TO my_summary_old, my_summary_new TO my_summary;
在赋予新建表my_summary名之前,如果你把my_summary重命名为my_summary_old,你就可以保存这个表老的版本直到下次这个表的重建。如果新表出现问题,你也可以用旧的来替换。
计数表(Counter tables)
一个应用程序在一个表中存放计数字段,当更新计数字段的时候,会遇到并发问题。这些表在web应用程序中很常见。你能使用它们来缓存用户的好友数,文件的下载数等等。一般来说,创建一个单独的表来存放这些计数是个好的主意,这样做能使它更小更快。使用单独的表,可以避免无效的查询缓存并且让你使用更多的高级技术。
为了让例子更简单,假使你有个包含一列的计数表。来记录你网站的点击量。
mysql> CREATE TABLE hit_counter (
-> cnt int unsigned not null
-> ) ENGINE=InnoDB;
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者