广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 如何设计统计数据表
  • 216
分享到

MySQL 如何设计统计数据表

MySQL统计数据表MySQL设计数据表 2022-05-24 21:05:47 216人浏览 薄情痞子
摘要

目录是否需要实时更新物化视图工具(Flexviews)计数表总结缓存型数据表通常在统计数据时会经常用到,因此也会叫统计性数据。举个例子来说,对于员工、部门数据表而言,我们可能会需要查询一个部门下有多少员工。这时候有三

目录
  • 是否需要实时更新
  • 物化视图工具(Flexviews)
  • 计数表
  • 总结

缓存型数据表通常在统计数据时会经常用到,因此也会叫统计性数据。举个例子来说,对于员工、部门数据表而言,我们可能会需要查询一个部门下有多少员工。这时候有三种方式实现:

  • 在部门下增加一个员工数量的字段,每次对员工进行增、改、删操作时都需要同步更新员工数量(如果员工换部门,则需要更新多个部门的员工数量)。这种方式能够保证实时性,但是却很低效。对于如果是操作不频繁时是没问题的,假设相当频繁,就意味着每次都需要操作两张表,而且业务代码都需要做埋点处理,将统计业务和普通业务深度耦合在一起了。
  • 每次查询的时候,从员工表中执行 SUM 函数,获取该部门的员工数。这种方式避免了埋点,但是每次都需要去员工数据表求和,如果员工数据量大的话会很低效。
  • 新建一张统计表,每隔一定时间从员工表中汇总每个部门的人员数量。这种定时抽取数据的方式会牺牲一定的实时性,但降低了代码的耦合,由于部门不会太多,这张表的大小是可预测的,也提高了数据访问的效率。这种方式即缓存型数据表。

以掘金的手机端个人中心为例,为展示每个用户的关注人数、关注者和掘力值,不可能每次查询都去做一次 SUM,这意味着需要做多张表的 SUM 操作,效率会很低,而且掘力值的计算还涉及到更为复杂的计算方法(与文章的浏览量和点赞数有关)。因此,可以猜测一下大致的表设计,这样在查询用户个人主页信息的时候只需要从这一张表就可以读取到所有数据了。


CREATE t_user_summay (
  id INT PRIMARY KEY,
  user_id BIGINT(20),
  focused_user_cnt INT,
  followed_user_cnt INT,
  user_value INT,
  user_level ENUM('Lv1', 'Lv2', ..., 'Lv8'),
  created_time DATETIME,
  updated_time DATETIME,
);

是否需要实时更新

在实际应用过程中,统计表有两种方式,一种是实时更新,一种是周期性的重建数据。两种方式有利有弊,实时更新保证了查询数据的即时性,但是会牺牲性能,并且要求代码埋点,而且由于数据更新是没有规律的,可能产生碎片。周期性的重建数据牺牲了实时性,如果说大部分数据都不变的话会带来不必要的统计计算,但如果数据经常变动,那周期性地重建数据显然会更高效而且避免了埋点的情况。当然,避免应用程序的埋点也可以通过触发器来完成,可以参考//www.jb51.net/article/213062.htm

物化视图工具(Flexviews)

Mysql 中,有一个 Flexviews 的开源工具用于从数据库的binlog 中提取数据完成数据统计。有点类似与视图,但与视图所不同的是,Flexviews 产生的数据表是物理表,这也是为什么称之为物化视图的原因。而且,Flexviews 还支持增量更新和全量更新。推荐使用增量更新,以避免所有行的统计数据都需要重建的情况。增量更新会检查哪些数据行数据发生了改变,再执行更新操作,相比全量更新而言性能会更高。但为了检测数据改变,需要引入一个视图记录数据行的变化日志

计数表

在实际开发中,我们经常会需要对一些操作进行计数,比如文章的阅读数、点赞数。如果将计数值放入同一张表很可能在更新的时候出现并发问题。使用独立的计数表可以避免查询缓存失效问题并使用一些更高级的技巧。例如统计文章的阅读数、点赞数的数据表:


CREATE TABLE t_article_counter (
  article_id INT PRIMARY KEY,
  read_cnt INT UNSIGNED NOT NULL,
  praise_cnt INT UNSIGNED NOT NULL
);

在更新阅读数的时候,可以使用 mysql 的内置加1操作:


UPDATE t_article_counter 
SET read_cnt = read_cnt + 1
WHERE article_id = 1;

这种方式可以使得操作是单行的,对事物而言是互斥的,因此会将事务序列化处理避免并发问题。但是却会影响并发请求量。可以对文章增加多个插槽来提高并发量。


CREATE TABLE t_article_counter (
  id INT NOT NULL PRIMARY KEY,
  slot TINYINT UNSIGNED,
  article_id INT,
  read_cnt INT UNSIGNED NOT NULL,
  praise_cnt INT UNSIGNED NOT NULL,
  INDEX(article_id)
);

这时可以创建100个插槽初始化数据,在更新的时候可以这样操作:


UPDATE t_article_counter
SET read_cnt = read_cnt + 1 
WHERE slot = RAND() * 100 AND article_id = 1;

获取某篇文章的总阅读数时,需要使用一个 SUM 操作:


SELECT SUM(read_cnt) FROM t_article_counter
WHERE article_id = 1;

这种方式实际上是空间换时间,提高了并发量。

总结

本篇介绍了如何设计统计数据表,关键的核心在于业务类型。对于更新频率低、数据量小的表使用实时同步或者直接 SUM 求和问题都不大。而对于大数据表,高频率的更新的情况,则可以使用独立的统计表。同时,若存在高并发的情况,统计表中可以考虑每项主体增加多个插槽的方式提高并发量。如果是周期性地同步数据,也可以使用 Flexviews 物化视图插件实现。

以上就是Mysql 如何设计统计数据表的详细内容,更多关于MySQL 设计统计数据表的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 如何设计统计数据表

本文链接: https://www.lsjlt.com/news/10391.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL 如何设计统计数据表
    目录是否需要实时更新物化视图工具(Flexviews)计数表总结缓存型数据表通常在统计数据时会经常用到,因此也会叫统计性数据。举个例子来说,对于员工、部门数据表而言,我们可能会需要查询一个部门下有多少员工。这时候有三...
    99+
    2022-05-24
    MySQL 统计数据表 MySQL 设计数据表
  • MySQL数据库表设计规范
    一、数据库设计 1、一般都使用 INNODB 存储引擎,除非读写比率...
    99+
    2014-11-16
    MySQL数据库表设计规范
  • oracle 数据库设计-数据库表设计
    在数据库设计中,我的工作中经常会分析怎样商业逻辑中的表格如何设计。再设计表的关系之前 需要先了解关系型数据库特点 1关系型数据库,是指采用了关系模型来组织数据的数据库;2、关系型数据库的最大特点就是事务的一...
    99+
    2022-10-18
  • MySQL 数据库设计:点餐系统菜品表
    MySQL 数据库设计:点餐系统菜品表引言:在餐饮行业中,点餐系统的设计和实现是至关重要的。其中一个核心的数据表就是菜品表,这篇文章将详细介绍如何设计和创建一个有效的菜品表,以支持点餐系统的功能。一、需求分析在设计菜品表之前,我们需要明确系...
    99+
    2023-11-01
    MySQL 数据库设计 点餐系统
  • mysql如何统计表有多少条数据
    这篇文章将为大家详细讲解有关mysql如何统计表有多少条数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 在mysql中,可以使用“sele...
    99+
    2022-10-19
  • MySQL数据库约束,表的设计
    ❤️Author: 老九 ☕️个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏:MySQL通关系列 文章目录 数据库约束no...
    99+
    2023-09-17
    数据库 mysql database
  • 如何设计一个优化的MySQL表结构来实现数据统计功能?
    如何设计一个优化的MySQL表结构来实现数据统计功能?在实际的软件开发中,数据统计是一个非常常见且重要的功能。而MySQL作为一种常用的关系型数据库管理系统,其表结构设计的优化对于数据统计功能的实现来说尤为重要。本文将介绍如何设计一个优化的...
    99+
    2023-10-31
    数据统计功能 MySQL表结构设计 优化MySQL表结构
  • 如何使用jQuery设计数据表格之设计表格基类
    这篇文章将为大家详细讲解有关如何使用jQuery设计数据表格之设计表格基类,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。步骤1 设计生成表格的基类我们希望设计一个生成表格...
    99+
    2022-10-19
  • 如何设计MySQL数据库表结构以支持会计系统的核心功能?
    如何设计MySQL数据库表结构以支持会计系统的核心功能?在设计会计系统的数据库表结构时,需要考虑核心功能的支持以及数据的完整性和可扩展性。本文将介绍如何设计MySQL数据库表结构来支持会计系统的核心功能,并且提供了具体的代码示例。设计会计科...
    99+
    2023-10-31
    mysql数据库 数据库表结构设计 会计系统功能
  • MySQL如何统计一个数据库所有表的数据量
    目录场景:官网的解释:补充:查询表大小总结 场景: mysql统计一个数据库里所有表的数据量,最近在做统计想查找一个数据库里基本所有的表数据量,数据量少的通过selec&#...
    99+
    2022-11-13
  • MySQL 常见的数据表设计误区汇总
    目录误区一:过多的数据列误区二:过多的联合查询误区三:滥用 SET替代 ENUM误区四:生硬地避免NULL误区五:使用整数替换时间戳误区六:忘记字段的最大存储范围结语:误区一:过多的数据列 MySQL 存储引擎的 ...
    99+
    2022-05-13
    MySQL 设计误区 MySQL 数据表设计
  • MySQL 配置统计数据
    什么是统计数据 统计数据怎么存储 两种存储方式: 存储形式: 存储的信息 如何更新统计数据 NULL 值如何统计 参考文档 什么是统计数据 MySQL 为了制定执行计划收集表的相关...
    99+
    2017-05-22
    MySQL 配置统计数据
  • MySQL数据库设计时如何优化
    小编给大家分享一下MySQL数据库设计时如何优化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  1、命名的技巧与规范  无论什...
    99+
    2022-10-19
  • MySQL数据库设计作业 ——《网上书店系统》数据库设计实验报告
    数据库设计作业——《网上书店系统》数据库设计 一、功能需求 普通用户:可以进行最基础的登陆操作,可浏览图书、按类别查询图书、查看 图书的详细信息,还可以注册成为会员。会员:需要填写详细信息(真实姓名、...
    99+
    2023-09-23
    数据库 mysql 课程设计 经验分享
  • MySQL 数据库的约束及数据表的设计原理
    目录1. 数据库的约束1.1 介绍1.2 约束类型1.3 not null1.4 unique1.5 default1.6 primary key1.7 foreign key1.8...
    99+
    2022-11-12
  • mysql数据库设计规范
    一、数据库设计规范1.使用innodb引擎2.数据库和表的字符集统一使用utf83.所有表和字段添加注释4.单表数据量控制...
    99+
    2019-12-06
    mysql数据库设计规范
  • MySQL数据库表设计规范是怎么样的
    小编给大家分享一下MySQL数据库表设计规范是怎么样的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、数据库设计1、一般都使用 INNODB 存储引擎,除非读写比率<1%,才考虑使...
    99+
    2022-10-18
  • Mysql树形结构的数据库表设计方案
    目录前言一、基本数据 二、继承关系驱动的设计 三、基于左右值编码的设计四、树形结构CRUD算法(1)获取某节点的子孙节点 (2)获取某节点的族谱路径(3)为某节点添加子孙节点 (4)...
    99+
    2022-11-12
  • 如何设计学校管理系统的MySQL表结构?
    如何设计学校管理系统的MySQL表结构?随着科技的发展,学校管理系统在教育领域起着重要的作用。设计一个高效可靠的学校管理系统需要考虑到数据库的表结构设计。MySQL是一种常用的关系型数据库管理系统,本文将介绍如何设计学校管理系统的MySQL...
    99+
    2023-10-31
    数据库设计 MySQL表结构 学校管理系统
  • java统计报表数据量大如何做
    如果要处理大量的数据并生成统计报表,可以考虑以下几个方面的优化:1. 数据库优化:使用合适的索引、分区、分表等技术来提高数据库查询性...
    99+
    2023-08-24
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作