用户中台的用户模型应该怎样设计

2024-08-21 21:12

本文主要是介绍用户中台的用户模型应该怎样设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先从场景开始

场景:你们公司有两个业务线,对外有两个App,分别是 A 和 B,小明在两个App上都注册了,他的用户数据应该怎样存储?

如果两个业务线有各自的用户系统
业务会各自存储自己的用户数据,就是App A有张用户表,App B有张用户表,两个App的数据是完全独立的。

如果是用户中台统一存储用户数据的话,一般也是两条数据,可能是存在一张表里,通过app区分,例如

app, 手机号, 昵称, 密码
A, xx, xx, xx
B, xx, xx, xx

如果是也可能是按照业务分表的做法,app A 的数据存在user_a,app B的数据存在user_b中。

这些方案都是很容易就想到的。

我们公司的业务线是没有独立的用户系统的,都是依托用户中台的,假设是你,
现在你们老板提了个需求,需要把这多个业务线的用户数据打通(不需要用户参与,用户注册时数据自动关联)。可能你脑子里已经有方案了,但接下来我要和你介绍我们的方案,这也是我司用户中台迭代的三个版本。

第一个版本

关键词:依托答辩

数据库使用的是mongo,上面例子的数据是这么存的

{"id": "xxx","name": "xx","phone": "xxx","app": ["a","b"],"password": "xxx"
}

通过手机号码关联不同业务之间的数据,app表示用户注册过的app。
从这条数据不难联想到以下几个问题:
1。如果用户在App a 上把手机号换了,其他已经注册的app岂不是也换了,用原本的账号登录不了了?!

是的,这也是导致很多用户反馈过的问题。后来我们把换号的逻辑改了,换号时,如果app不仅仅包含当前的app,那就不修改原数据,改为根据新号码创建或修改数据

2。密码都用了一个,也会出现一个app换密码,其他app密码都换了的情况,怎么办呢?

增加了app独立的密码字段app_a_password,登录时,如果有这个字段,会用这个密码校验

3。用户注销怎么办

直接从app列表里,把注销的app删掉

4。如果App A的用户和App B的用户属性不一致怎么办

效仿密码的处理,于是用户数据里多了一些这样的字段app_a_nickname,app_a_delete_time,app_b_status

于是用户数据就成了

{"_class": "java.util.HashMap","_id": "xxx","phone": "xx","account": "xx","app_b_id": "xx","alias_id": ["vBglqAqd6Sf","349954228"],"app_a_pdate":NumberLong(1573818941),"app_a_shop_code": "03064794","app_a_status":NumberInt(1),"app_a_title": "李s卫","app_a_type": "1","app_a_type2": "7","app_a_id": "vBglqAsxq6Sf","date_create":ISODate("2019-11-15T11:55:41.000Z"),"id": "vBglqAq6Sf","iid":NumberInt(349954228),"personal_shop_code": "03093255","regip": "180.152.24.41","app_a_avatar": "","weixin": "13262709697","identity": NumberInt(0),"app": ["a","b"]
}

除了数据库存储的事一坨之外,对外接口,代码逻辑也是一坨。。。

大佬总结

用户信息、员工信息、账号信息、状态、店铺code、个人钱包code 全部都糅杂在一条数据上。 这就算了,主要是多个不同业务域的
用户信息、员工信息、账号信息、状态、店铺code、个人钱包code 也全部都糅杂在一条数据上。

简单四个字:

罄竹难书

测试看了会流泪,用户看了会沉默:
1 因为原用户系统奇葩的调用拓扑
2 因为原用户系统诡异的代码实现
3 因为原用户系统面目全非的范接口的存在
4 因为原用户系统秉承着最底层业务所以无业务逻辑,但是却在Dao层写满了互相干扰的业务逻辑的神操作

后人互勉

要想练就绝世武功,就要忍受常人难忍受的痛

第二个版本

第一个已经是依托答辩了,第二个版本也是在第一托上稍微优化了下

底层数据库不适用mongo了,通过数据迁移、双写等方案,逐步将mongo上的数据迁移到了mysql中,并且按业务做了数据分离。
上面的例子,数据分别存在了 user_app_a 和 user_app_b 中。
如何解决老板的需求,把多个业务的用户数据打通呢?引入了一个uid和一张用户基础表 user_base。
user_base中存储了用户基本信息,并为每个用户生成了一个唯一的uid。
业务用户表user_app_a写入时,会查询用户基础表,得到uid,user_app_a表中的用户数据会通过uid关联到user_base。

这么设计好像没啥问题哈,但是有些业务表没有存用户手机号码,而是用用户基础表中的手机号,所以还是存在上面那个换手机号码的问题。

接口和代码逻辑里,用户对象全都是map。。。

大佬忍不住了

现实模型:
1、一个人,常规情况下,99.9999999% 他是有只一个身份证号码的。
2、一个人,常规情况下,他可以凭着自己的意愿去营业厅买电话号码的。
或一张电信sim卡,或两张sim联通卡,或三张电信sim卡(实名认证之后一个人最多拥有5张卡)。
3、一个人,常规情况下,他可以凭着自己的意愿去营业厅注销他自己的sim卡的。
或一张,或两张,或全部(只要他没欠费,没有涉嫌刑事备注)。
4、一个人,常规情况下,他是可以在自己的APP里面换电话号码的,或一年一次、或半年一次、或每天都可以、或只要手速够快每秒钟都可以。

所以一个常规的正常的用户系统 为什么 换电话号码会是个问题呢?

所以为什么我们要去讨论这个问题呢?

第三个版本

在这个版本,我们终于可以正常的更换手机号码了!!!

在第二个版本的基础上,不再通过uid和用户基础表强关联了。

不再使用map了。不同的业务允许有不同的用户模型,有不同的接口,不同的逻辑。
真的是天下大势,分久必合,合久必分。。。

用户模型应该怎么设计呢

这个问题我还没有很好的答案
一个物理人在一个应用域下可以有多个用户(未实名认证)。

一个用户在一家企业(店铺/集团)下有一个员工,但是一个用户可以在多家企业(店铺/集团)下都有任职,从而一个用户是可以有多个不同企业的员工身份。

一个员工为了使用 其它服务能力,必须拥有账号做为操作的载体,从而一个员工在所属的店铺/集团下可以有多个账号,实现不同的职能划分。

用户和员工、账号的性质区分
用户:属于个人
员工、账号:属于企业组织
在组织的层面上,强烈要求只允许修改 员工,账号的信息,用户信息的操作不以组织的意志为转移,组织对用户只能有读的能力。
在属性设计时要明确哪些是企业的信息和要用到的信息,要维护到员工、账号中去,哪些是个人信息,可以维护到用户中。从模型概念上说,用户只属于个人,所以他可以任职且被多个组织可见,如果其中一个组织修改了用户的信息,会影响到其他的组织对用户的使用。

用户的唯一性
用户中有唯一判别其他用户的业务属性,如手机号、邮箱等等。没有唯一性的用户会不可控,破坏业务的发展。

账号的使用必须依赖于存在的用户
一个可执行的账号,是依赖员工、店铺存在的,而员工是依赖用户存在的。
必须要有所属用户,账号才可以进行业务操作

这篇关于用户中台的用户模型应该怎样设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1094292

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}