欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。

Go, MySQL, Redis

功能:为基础业务(包括打车业务,单车业务,金融等)提供司乘数据维护接口,提供高效迭代能力。维护千万级数据,保证接口性能,与服务稳定性。

在项目中的职责:优化系统代码架构,优化接口性能,保证服务稳定性。提升支持基础业务开发效率。

关键成果:业务字段添加配置化,数据查询与存储优化,业务字段获取管控,数据历史追溯

解决的问题:

  • 业务发展快速,添加字段频繁,迭代周期长(以周为单位)。
  • 司乘信息字段非常多(几百个),查询和存储效率低。
  • 用户获取数据冗余,数据安全和接口性能无法保证。
  • 司乘数据变迁记录无法查询,客诉问题追查困难

解决方案:

  • 引入noSQL数据库Fushion, 将业务数据进行垂直切分,提高了业务数据扩展性。
  • 业务字段添加配置化,提升支持基础业务开发效率。
  • 对数据进行水平切分,加快查询效率。
  • 对数据进行redis缓存,提升查询效率。
  • 查询接口字段分租户管控。
  • 消费binlog生成数据流水。

收益:

  • 业务添加字段由原来周级别提升到天级别。
  • 查询与存储效率提升可以支持百万级qps。
  • 业务取数按需获取,提升数据安全和接口性能。
  • 生成用户数据流水,追查历史方便。

挑战与取舍

  • 数据字段分表的考量是什么

水平分表:用户数据有5000万之多,放一张表里查询与存储效率低,需要分成每张表100万以下比较好,我分成了101(质数)张表,每张表大概50万。

垂直分表:我把字段分成两类,1. 变化较少或基本不变的用户属性字段,如身份证,年龄,家庭住址,性别等;2. 经常变化的业务字段,如当前位置,接单状态,接单数量等。

  • 一条数据是如何被缓存到redis的,批量每件查询下如何优化
    2种查询模式:
  1. 按id查询,先把id按照hash分成101组,然后每组去库里查询,并合并mysql与fusion结果数据并缓存。这种经常用于在线实的场景。
  2. 条件查询,先用条件去es索引中查询id, 再通过id按方法1查询。这种用于离线场景。
  3. 缓存设计时间 5秒钟
  • 如何保证redis与mysql&fusion数据一致性
  1. 数据底表操作
    正常情况,有可能存在更新多张表时有1张表更新失败的情况。那就需要用到事务操作,但实际上一次更新只会涉及到1张表。
    有2种接口一个是创建或更新用户属性表,另一个是创建或更新用户业务字段表。
    在用户创建阶段,只会写用户属性,业务字段为空读取时用默认值。
    另一个接口用于更新用户业务字段。

  2. redis一致性

先更新mysql或fusion数据,若成则更新redis数据。如果redis(加重试)不成功则会由超时重新回表兜底,适合于对数据实时性要求不高的场景。

  • 强一致性需求如何保证

有些业务场景对数据一致性要求非常实时,比如用户刚创建,此时就要来查询是否创建成功。上述设计是无法保证的,原因是读的是从库。所以系统还提供了强制读主的选项,此选项只分配给特定业务使用。

  • 分租户管控为什么不用graphql
  1. 数据只有单层
    司机和用户数据结构都单层的数据,且都是单值数据结构。 graphql更适合于多层解析。

  2. 数据下游访问很少
    graphql 可解析多个下游访问,本系统已经是最下游中很少访问下游取数据。

  3. 实现简单,引入graphql使依赖加重
    取数逻辑简单,管理简单。引入graphql反而变复杂了。

打车软件中司机数据系统设计相关推荐

  1. mysql在计算机管理中的路径怎么修改_称重软件中的数据修改怎么知晓?

    称重软件 称重软件应客户需求,数据允许修改,但不允许删除只能作废.如果数据已修改,该如何知晓该数据是修改过的呢,这就用到了标记.用户修改数据时为保证数据的可追溯性,同样在数据安全方面也有相应的要求,要 ...

  2. excel数据库_标签打印软件中Excel数据整理及导入

    在使用标签打印软件来批量打印可变内容时,经常会用到数据库导入,尤其是Excel导入来实现打印可变内容,那么Excel中的数据库内容应该是什么格式具体该如何整理呢,下面我们来详细看一下. 我们在使用Ex ...

  3. 将圆滑软件中的数据改写为用grapher画多测道图

    本文将用fortran代码实现数据格式的转换,并实现用grapher画出多测道图的目的 第一步:实现数据格式转换,下面展示一些 内联代码片. Program MainImplicit NoneChar ...

  4. 力控数据写入mysQL_怎样将力控组态软件中的数据存储到关系数据库?

    力控监控组态软件为了实现力控数据库和关系数据库之间数据传输提供了多个组件,如:扩展组件中的ODBCRouter,后台组件中的ADO组件,这些组件中不仅封装了ODBC规范,同时也封装了ADO规范,用户可 ...

  5. spss常态检验_【单选题】SPSS 软件中进行数据描述、 t 检验等分析的菜单是( )。 A. 文件 B. 数据 C. 转换 D. 分析...

    [判断题]人工照明强度越大,夏季空调负荷越高. [判断题]( ) 男西服胸衬的制作过程大致有:缉底衬的省道→归拔胸衬→固定胸衬→缉衬→烫衬等. (1.5分) [判断题]细胞密实体积是以每毫升培养液中细 ...

  6. mcgs组态软件中字体如果从左到右变化_在MCGS嵌入版组态软件中,数据对象有开关型、数值型、字符型、事件型和组对象五种类型。( )...

    [单选题]直流稳压电源中滤波电路的目的是( ) [单选题]大幅度 [单选题]( ) 多数已经标准化,并作为机床附件由专业化工厂生产. [单选题]冲裁类模具不仅要保证冲件( ),还要保证冲件和废料顺利地 ...

  7. excel清单数据导入到开票软件中进行开票

    税控盘开票助手使用说明(使用手册) 写这遍文章的目的是方便以后个人使用,做个笔记记录. 首先我来说一下它是做什么用的,它的主要作用是把用户的开票数据,Excel数据.ERP 系统导入到税控盘开票软件中 ...

  8. 条码打印软件中如何实现条形码随文本数据变化而变化

    用条码打印软件制作产品标签有时候可能需要把制作的条形码和标签上某些文本数据关联,随着变化而变化,方便产品和产品之间的区分标记等等,这些功能在条码打印软件中用数据引用功能就可以实现,使条形码和文本数据之 ...

  9. 打车软件监管争论:谁大约握有车辆主导权?

    曩昔两个月间打车软件之间的补助大战再度让政府对打车软件监管事宜提上议事日程. 3月30日在江苏南京举行的打车软件监管研讨会上,交通运输部协会.发改委.工信部电信研讨院.法令专家等对事务形式的监管疑问展 ...

最新文章

  1. 什么是 CNN?Facebook 员工写给小白的机器学习入门贴彻底火了!
  2. 验证RIP被动接口只收不发的正确性
  3. VC++下命名管道编程的原理及实现
  4. 【温故知新】CSS学习笔记(字体样式属性)附加篇
  5. 图像处理基础系列-01
  6. ar路由器 pppoe下发ipv6 dns_手机从路由器获取IP、光猫PPPOE拨号过程、IP/VLAN
  7. 如何使用 AOP 和自定义注解?
  8. Spring(13)——PropertyPlaceholderConfigurer
  9. oracle数据库怎么查实例名,查询oracle数据库实例的名字
  10. 以图搜图 图像匹配_百度识图:以图搜图找到相似图片原理分析
  11. 用井字游戏理解 Minimax 算法
  12. 基于Python的无参考图像质量评价
  13. 安装Oracle 19c 的系统配置要求
  14. SX1308原厂芯片
  15. 2021年高处安装、维护、拆除新版试题及高处安装、维护、拆除考试试卷
  16. 数据结构最常用的排序算法一(冒泡、插入、选择)-Java实现
  17. Linux 工具 | 第1篇:高级流控-TC+HTB+IFB+内核模块
  18. 计算机应用无法打开,为什么电脑界面的部分软件无法打开
  19. chrome:initiator使用
  20. 这50款前端热门工具简直不要太好用了!(3)

热门文章

  1. CM-BERT: Cross-Modal BERT for Text-Audio Sentiment Analysis--文献笔记和翻译
  2. MybatisPlus之代码生成器(有此一篇即可)
  3. idea输入英文时,间距变大报红 cannot resolve symbol ‘xxx‘
  4. java基础-数组-案例练习-检测一个字符串是否为回文 回文字符串是指正着读和反着读该字符串都是相同拼写
  5. java毕业生设计医保局综合办公系统计算机源码+系统+mysql+调试部署+lw
  6. 记录--uniapp开发安卓APP视频通话模块初实践
  7. 仿写网易云音乐Demo项目(Vue3+Vite+Vuex+Vue-Router4.0)
  8. SCU - 1114 数字三角(dp入门ing)
  9. 解决/dev/fb0无法打开的问题
  10. rman初级知识(读书笔记)