关于海量级存储用户标签体系架构

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 关于海量级存储用户标签体系架构

项目场景:

对于我们运营来说,需要给用户打上不同的身份标签。比如用户是否偏重,身高范围,是不是我们的会员。。。等等一些标签。

比如我们有100W用户。我们需要来给100W用户打上接近200个不同身份的标签应该如何去做?


设计方式

  • 这里对于mysql表的设计我们有两种方式
  1. 一是采用新增列的方式来新增用户身份。一对一存储,但是这种存在的弊端是我们在新增用户身份时,每次都需要手动新增一列。来保存用户新的身份。而且有多少身份就需要多少列,对于mysql的性能会急剧降低。尽管我们可以进行垂直拆分来增加性能。但也会让mysql更难维护。以及扩展性变的很差。
  1. 二是采用一对多的形式来存储用户身份。表结构如下
ID 标签tag 标签描述 状态
1 is_vip 是否是VIP用户 1
2 is_male 是否是男性 1
3 bmi_is_ok bmi是否正常 1
ID uid 身份标签ID 状态
1 1 1 1
1 2 2 1
1 3 3 1

这样子做我们在新增身份的时候,就能灵活库扩展,在标签表新增之后,我们再按照指定的逻辑去给用户洗上标签。


如何在判断用户标签的时候实现低延时查询判断?

我们建立好标签之后是拿来用的,在业务逻辑代码中,我们经常会判断用户是否是属于某一种身份标签。以此来给用户下发不同的数据。并且在很多的业务逻辑中都有涉及,那么我们需要解决的问题就是如果实时去查询出用户是否属于某一种标签身份。

如果按照我们100W用户 一个用户200种标签的设想。那么我们表数据的存储量级是特别大的,尽管我们考虑了分表的设计。单表1000W数据去做查询也是很慢的。尤其我们很多场景下都需要实时做身份判断。

那么我们将采用redis来作为缓存数据。但是使用redis key value形式将所有用户的身份存储下来那是一个相当庞大的数据量。有没有更好的方式来进行存储呢?

首先我们抽出共性。我们的身份标签值只能为0和1,那么我们是不是可以采用bitmaps的方式来进行用户标签的存储呢?

结合bitmaps特性,我们可以有如下设计


{
    // 所有vip用户
    "user:is_vip":{
        "01001001"
    },
    // 所有男性用户
    "user:is_male":{
        "01101010"
    },
    // 所有男性用户
    "user:male":{
        "01010011"
    },
    // 用户1的所有标签
    "user:all:1":{
        "01101010"
    },
    //用户2的所有标签
    "user:all:2":{
        "00100001"
    }
}

使用上面的存储结构,我们就能快速的找出某人对应的身份信息。并且内存可控。

那么现在如何解决我们存储进去的问题

前置条件
1 以用户主表ID做为用户ID,且满足排序规则。

那么我们可以直接使用用户ID来做为偏移量来判断用户的身份

比如我们要判断uid为3的用户是不是vip
在这里插入图片描述
就能快速的或者用户是不是满足当前身份

SETBIT
GETBIT
BITCOUNT 可以实现我们当前身份下有多少个用户满足
BITPOS
BITOP
BITFIELD

同时 借助以上redis命令我们能实现更多操作。
  • SETBIT

    设置用户身份
    在这里插入图片描述
  • BITOP

    对身份标签做运算

在这里插入图片描述
我们可以借助BITOP来进行身份的交叉运算。以此来快速判断多种身份以及统计结果。

  • GETBIT

    获取用户身份

在这里插入图片描述

性能测试

setbit user:is_vip 10000000 给第10000000个用户设置是vip的身份(相当于也给前10000000个用户都设置了不是vip的身份)
在redis里面都是毫秒级响应

解决方案:

根据上面的分析,我们大致可以确定身份存储的流程,首先我们在标签表新增一种身份,我们按照指定的逻辑来将对应的身份洗进数据库,同时使用bitmaps来存储下来,不设置过期失效,如果有对应身份更新。同步到redis bitmaps。为了保持数据精准性。同时可以设置定时任务来做定时刷新,保持缓存与数据库身份的同步更新。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
存储 缓存 关系型数据库
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
阿里云RDS率先推出新型存储类型通用云盘,提供低延迟、低成本、高持久性的用户体验。
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
|
3月前
|
存储 缓存 固态存储
【vsan数据恢复】vsan分布式存储架构数据恢复案例
VSAN数据恢复环境: 一套有三台服务器节点的VSAN超融合基础架构,每台服务器节点上配置2块SSD硬盘和4块机械硬盘。 每个服务器节点上配置有两个磁盘组,每个磁盘组使用1个SSD硬盘作为缓存盘,2个机械硬盘作为容量盘。三台服务器节点上共配置6个磁盘组,共同组成VSAN存储空间,存放虚拟机文件。 需要恢复服务器节点上的数据库数据。 VSAN故障: 非正常关机导致VSAN逻辑架构出现故障,部分虚拟机磁盘组件出现问题,磁盘文件丢失。
|
7月前
|
存储 关系型数据库 数据库
【北亚企安数据恢复】Ceph分布式存储基本架构&Ceph数据恢复流程
Ceph存储可分为块存储,对象存储和文件存储。Ceph基于对象存储,对外提供三种存储接口,故称为统一存储。 Ceph的底层是RADOS(分布式对象存储系统),RADOS由两部分组成:OSD和MON。 MON负责监控整个集群,维护集群的健康状态,维护展示集群状态的各种图表,如OSDMap、MonitorMap、PGMap和CRUSHMap。 OSD负责存储数据、复制数据、平衡数据、恢复数据,与其它OSD间进行心跳检查等。通常情况下一块硬盘对应一个OSD。
|
6月前
|
存储 分布式计算 并行计算
计算存储分离架构
计算存储分离架构
|
28天前
|
存储 Kubernetes 固态存储
IEEE HPCA 2024|LightPool:高性能、轻量级的存储池化架构
IEEE HPCA 2024|LightPool:高性能、轻量级的存储池化架构
|
1月前
|
存储 监控 容灾
TiDB存储层深入:分布式存储架构与数据一致性保障
【2月更文挑战第26天】本文将深入探讨TiDB的存储层,详细解析其分布式存储架构、数据复制机制以及数据一致性保障措施。通过了解存储层的核心组件和工作原理,我们可以更好地理解TiDB如何确保数据的可靠性、高可用性和可扩展性。本文将从存储层的架构、数据分布、容错机制等方面展开介绍,帮助读者全面掌握TiDB存储层的关键技术和优势。
|
2月前
|
存储 缓存 程序员
DP读书:鲲鹏处理器 架构与编程(三)高性能处理器的存储组织与片上互联
DP读书:鲲鹏处理器 架构与编程(三)高性能处理器的存储组织与片上互联
234 0
|
2月前
|
存储 缓存 关系型数据库
Mysql专栏 - Linux底层交互和Raid存储架构
Mysql专栏 - Linux底层交互和Raid存储架构
77 0
|
3月前
|
存储 索引 Windows
PACS影像信息数字化存储系统源码,C/S架构的医学影像系统源码
全院影像设备联网与影像信息数字化存储,建立涵盖全院的PACS/RIS系统,实现从预约、登记、分诊、排队叫号、检查、诊断阅片、报告发布、自助胶片打印等流程化管理。 PACS系统应用在医院影像科时,它直接与CT、MR、ECT、DSA和DR等提供DICOM标准图像的医学设备进行软硬对接。该系统应用在超声、内窥镜、病理等科室时,提供视频、普通图片的医学设备进行软硬对接。检查结果以DICOM、BMP、JPG等多种格式进行长期保存,形成影像历史、诊断历史。这些历史数据可供医生重复调阅,作为编写诊断报告的重要参考。
PACS影像信息数字化存储系统源码,C/S架构的医学影像系统源码
|
4月前
|
存储 Kubernetes 对象存储
Kubernetes存储:Ceph架构,部署和使用
Kubernetes存储:Ceph架构,部署和使用
75 0