当前位置: 首页 > news >正文

宁波网站建设优化诊断网站建设与维护方式是什么

宁波网站建设优化诊断,网站建设与维护方式是什么,wordpress 菜单字体,官网网站备案流程图MySQL实现 在数据库中设计一张签到表,记录用户每次签到的日期及其他相关信息。然后通过时间范围查询得到用户的签到记录。 CREATE TABLE user_sign_in (id BIGINT AUTO_INCREMENT PRIMARY KEY, -- 主键,自动递增userId BIGINT NOT NULL, …

MySQL实现

在数据库中设计一张签到表,记录用户每次签到的日期及其他相关信息。然后通过时间范围查询得到用户的签到记录。

CREATE TABLE user_sign_in (id BIGINT AUTO_INCREMENT PRIMARY KEY,  -- 主键,自动递增userId BIGINT NOT NULL,               -- 用户ID,关联用户表signDate DATE NOT NULL,            -- 签到日期createdTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  -- 记录创建时间UNIQUE KEY uq_user_date (userId, signDate)  -- 用户ID和签到日期的唯一性约束
);

通过唯一索引,可以确保同一用户在同一天内只能签到一次。v7MVXjmkYSVF6bWEkbEtbK7rqOSiRVZrvgDMFuqdQNE=

通过下面的 SQL 即可查询用户的签到记录:

SELECT signDate FROM user_sign_in 
WHERE userId = ? AND signDate BETWEENAND ?;

分析:

优点:原理简单,容易实现,适用于用户量较小的系统。

缺点:

1、存储空间占用大

字段名数据类型估算空间说明
idBIGINT8 字节主键,自增
userIdBIGINT8 字节用户ID
signDateDATE3 字节日期:YYYY-MM-DD
createdTimeTIMESTAMP4 字节时间戳(支持秒级精度)

如果存储 100 万个用户,365天的签到记录,需要 100 万× 365 × 40字节 = 14GB

随着用户量和数据量增大,对数据库的压力增大,直接查询数据库性能较差。除了单接口的响应会增加,可能整个系统都会被其拖垮。

基于缓存 Redis Set

可以利用内存缓存加速读写,常用的本地缓存是 Caffeine,分布式缓存是 Redis。

由于每个用户会有多个签到记录,很适合使用 Redis 的 Set 类型存储,每个用户对应一个键,Set 内的每个元素为签到的具体日期

Redis Key 的设计为:user:signins:{userId}

其中:

  1. user 是业务领域前缀
  2. signins 是具体操作或功能
  3. {userId} 表示每个用户,是动态值

如果 Redis 被多个项目公用,还可以在开头增加项目前缀区分,比如 interviewPal:user:signins:{userId}。

具体示例如下,可以使用 Redis 命令行工具添加值到集合中:

SADD user:signins:123 "2024-09-01"
SADD user:signins:123 "2024-09-02"

使用命令查找集合中的值:

SMEMBERS user:signins:123

优点:Set 数据结构天然支持去重,适合存储和检索打卡记录。

存储 100 万个用户 的 365 天 签到记录,使用 Redis 集合类型来存储每个用户的签到信息,每个用户需要大约 1880 字节(365 × 4字节)的空间,总共需要大约 1.88GB 的内存空间,相比数据库节约了 10 倍左右。

Bitmap 位图

Bitmap 位图,是一种使用位(bit)来表示数据的 紧凑 数据结构。每个位可以存储两个值:0 或 1,常用于表示某种状态或标志。因为每个位仅占用 1 位内存,Bitmap 在大规模存储二值数据(如布尔值)时,非常高效且节约空间。

核心思想:与其存储用户签到的具体日期,不如存储用户在今年的第 N 天是否签到

2024-01-01 => 1(第一天)
2024-01-03 => 3(第三天)

使用位图类型存储,每个用户对应一个键,Bitmap 的 每一位 来表示用户在 某一天 是否打卡。

把 int 优化成用 bit 存储,那么占用的空间可以优化 32 倍!假设原先占用的大小需要 32 G,那么改造后仅需 1 G

对于刷题签到记录场景,一个用户存储一年的数据仅需占用 46 字节,因为 46 * 8 = 368,能覆盖 365 天的记录。那一百万用户也才占用 43.8 MB,相比于 Redis Set 结构节约了 40 多倍存储空间!

Redis Key 的设计为:user:signins:{年份}:{userId}

设置某一个 bit 值的命令如下:

-- 表示用户在第 240 天打卡
SETBIT user:signins:2024:123 240 1
-- 表示用户在第 241 天打卡
SETBIT user:signins:2024:123 241 1

查询某一个 bit 值的命令:

GETBIT user:signins:2024:123 240
http://www.dtcms.com/a/539481.html

相关文章:

  • 安徽省六安市城乡建设厅网站做游戏陪玩网站
  • 连云港网站建设案例青岛栈桥导游词
  • 知己知彼网站长沙阳性1例
  • 巩义网站网站建设网站建设跟版网
  • 做网站需要去哪里备案深圳旅游
  • 上海市建设工程定额官方网站机房建设网站模板
  • 网站建设嗟商文件网站建设站点地图
  • 网站建设情况报告范文2023最建议买三款手机
  • 免费的企业黄页网站合肥网站建设公司哪家好
  • 网站建设服务的风险长沙做网站好的公司
  • 石家庄市住房城乡建设局网站什么是域名解析服务
  • 潮州市网站建设公司网店推广实训总结
  • 网站建设汇报稿刷百度指数
  • 苏州网站建设培训学校手表网站哪家好
  • 网站架构技术帮人做网站收多少钱
  • 海兴做网站可以免费做会计题的网站
  • 做淘宝客网站要不要备案西部数码做跳转网站
  • 乐清市建设规划局网站建设公司网站广告语
  • 徐州微信网站建设营销型网站建设 上海
  • 本地镇江网站建设win7自建网站
  • 做网站还有希望吗做网站对客户有什么帮助
  • 怎么自己网站搜不到了网站建设书籍下载
  • 合肥网站开发公司电话天津画册设计公司
  • 做电影网站要怎么样的主机做学校网站用什么模版
  • 大型网站搜索怎么做的手机网站改版公司
  • 备案期间网站如何访问国家建筑网站
  • 贾汪区住房和城乡建设局网站张家港网站 设计制作
  • WordPress多站点同步设置合肥网站开发 合肥网站优化
  • 徐州建设网站价格百度短链接
  • 网站开发外包费用的会计分录动漫新闻资讯站