仿12306校招项目业务四(乘车人模块)

乘车人表结构

分库分表策略

乘车人的数据严重依赖于用户数据。每个用户至少需要有一个对应的乘车人,即自己本人。当然,也有可能是其他人,因为允许用户注册账号后为他人购票的情况。这种关联确保了用户和乘车人之间的正确映射,使系统能够准确地处理购票和相关信息。

根据上述前提,让我们进行一些分析,来看看哪些因素会影响乘车人数据量:

1. 首先,每个用户至少会有一个对应的乘车人信息。因此,乘车人数据量至少等于用户数据量。

2. 对于情侣购票用户,有两种情况:一种是普通场景下只有一人购票,另一种是在极端情况下,双方都添加乘车人信息,以便更方便地抢票。

3. 家庭购票用户可能会在一次购票中为全家人购买车票。不过,也有可能其他家庭成员并没有注册 12306 账号。

4. 职场购票用户中,可能会有一人代表多名员工出差,购买所有人员的车票。

当然,上述因素并不能穷举所有情况。因此,在系统设计时,我们综合考虑各种情况得出一个经验值,即乘车人数据量约为用户数据量的 4 倍。虽然这个估算可能不是完全准确,但我们希望能在容量规划时考虑到一定的宽裕余量。

对于分库分表容量评估,我们通常会尽可能地进行全面的评估。这样做的好处是,即使每张表的数据量不大,也能及早发现拆分后是否存在数据问题,以便及时进行调整和优化。

需要特别指出的是,我们对表数据量的考虑阈值相对较小,这是因为我们的系统具备良好的可扩展性,能够轻松应对大量的数据增长。因此,基于这样的分库分表策略,即使在几百年后,这个分库分表仍能处理数据且不会出现性能问题。这为我们的系统提供了稳定可靠的性能保障。

乘车人数据的查询必然会涉及到用户信息,而我们的用户表是按照 username 进行分片的。鉴于这些因素,我们决定将 username 作为乘车人表的分片键。

乘车人接口

 /*** 根据用户名查询乘车人列表*/@GetMapping("/api/user-service/passenger/query")public Result<List<PassengerRespDTO>> listPassengerQueryByUsername() {return Results.success(passengerService.listPassengerQueryByUsername(UserContext.getUsername()));}
@Overridepublic List<PassengerRespDTO> listPassengerQueryByUsername(String username) {String actualUserPassengerListStr = getActualUserPassengerListStr(username);return Optional.ofNullable(actualUserPassengerListStr).map(each -> JSON.parseArray(each, PassengerDO.class)).map(each -> BeanUtil.convert(each, PassengerRespDTO.class)).orElse(null);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/491602.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring的另一大的特征:AOP

目录 AOP &#xff08;Aspect Oriented Programming&#xff09;AOP 入门案例&#xff08;注解版&#xff09;AOP 工作流程——代理AOP切入点表达式AOP 通知类型AOP通知获取数据获取切入点方法的参数获取切入点方法返回值获取切入点方法运行异常信息 百度网盘分享链接输入密码数…

BUU [CISCN2019 华东南赛区]Web4

BUU [CISCN2019 华东南赛区]Web4 题目描述&#xff1a;Click to launch instance. 开题&#xff1a; 点击链接&#xff0c;有点像SSRF 使用local_file://协议读到本地文件&#xff0c;无法使用file://协议读取&#xff0c;有过滤。 local_file://协议&#xff1a; local_file…

【MySQL面试复习】详细说下事务的特性

系列文章目录 在MySQL中&#xff0c;如何定位慢查询&#xff1f; 发现了某个SQL语句执行很慢&#xff0c;如何进行分析&#xff1f; 了解过索引吗&#xff1f;(索引的底层原理)/B 树和B树的区别是什么&#xff1f; 什么是聚簇索引&#xff08;聚集索引&#xff09;和非聚簇索引…

Spring Boot对接RocketMQ示例

部署服务 参考RocketMq入门介绍 示例 引入maven依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version></dependency>完整依赖如下&am…

考研408深度分析+全年规划

408确实很难&#xff0c;他的难分两方面 一方面是408本身的复习难度&#xff0c;我们都知道&#xff0c;408的考察科目有四科&#xff0c;分别是数据结构&#xff0c;计算机组成原理&#xff0c;操作系统和计算机网络。大家回想一下自己在大学本科时候学习这些专业课的难度&am…

中海油、中石化、中石油校招历年真题和题库

中海油、中石化、中石油是中国领先的石油和天然气公司&#xff0c;拥有雄厚的实力和丰富的资源&#xff0c;是许多求职者梦寐以求的就业机会。为了帮助应聘者更好地备战这三家公司的校园招聘&#xff0c;我特别整理了三套精心准备的校招试题资料&#xff0c;涵盖了各个领域的知…

Spring定时任务--手动执行定时任务(替代@Scheduled)

原文网址&#xff1a;Spring定时任务--手动执行定时任务&#xff08;替代Scheduled&#xff09; 简介 本文介绍SpringBoot如何手动执行定时任务。 之前此文已经介绍过&#xff0c;直接用Scheduled即可使用Spring的定时任务&#xff0c;但有时需要手动去提交定时任务&#xf…

基于相位的运动放大:如何检测和放大难以察觉的运动(01/2)

基于相位的运动放大&#xff1a;如何检测和放大难以察觉的运动 目录 一、说明二、结果的峰值三、金字塔背景3.1 可操纵金字塔3.2 亚倍频程复数可控金字塔 四、基本方针4.1 1D 问题陈述4.2 一维方法4.3 实际实施说明 五、放大倍率的限制5.1 空间支持的影响5.2 频带的影响 六、推…

苹果 CMS 大橙子 vfed 5.0优化版

大橙子模版算是在苹果 CMS 众多主题里&#xff0c;较为亮眼的一款了&#xff0c;主题简洁&#xff0c;功能众多&#xff0c;非常的齐全。 今天分享的就是大橙 5.0 版本模板&#xff0c;完美破解&#xff0c;自测无后门&#xff0c;无广告不影响任何功能体验性。下载地址&#…

【mediasoup】v3的 probation 关键字

probatorprobation基于mediaoup v3分支 probation 是探测么? 3.11.22 libwebrtc: Fix bandwidth probation dead state (PR #1031 by @vpalmisano).Running some tests with high packet loss (~20%), in most cases the server stops sending any video packet and we never …

leetcode-hot100-双指针

剪枝&#xff0c;减少不必要的计算 283. 移动零 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出: [0] 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 第一印象&#xff1a;使用一个辅助数组&#xff0c;同时以…

python常用文件操作

1.文件夹创建&#xff0c;删除&#xff0c;重命名&#xff0c;路径连接&#xff0c;文件打开&#xff0c;关闭读写 #文件夹创建 path ./test newpath "./new" #判断文件夹是否存在 ret os.path.exists(path) if ret:pass else:#创建文件夹os.mkdir(path)#文件夹重…