场景&方案
Contents
💠
💠 2024-11-18 14:23:50
方向需求
关于问题的解决方案
书籍
淘宝技术这十年 亿级流量网站架构核心技术
Topic
- 完整设计一个支持数十亿规模的用户系统
- 如何设计一个支持千万设备推送的消息系统
- 简单实现一个消息中间件保证消息不重复不丢失
- 如何设计供应链正逆向系统
- 如何设计财务对账系统
系统重构
知乎社区核心业务 Golang 化实践
Python所开发的模块使用Go重写
场景:
思考点:
业务需求
账号安全认证体系
消息推送
站内信: 站内信设计思路之己见(基于上百万用户)
延迟消息
千万级数据导入
场景: 将数据库外的千万或亿级Excel CSV txt等文件导入到数据库
思考点:
- 导入时 用户并发,数据库资源控制
- 操作的频率, 导入的效率
- 应用层资源优化,JVM内存 CPU占用
- 需要按实际导入端,考虑是经过JVM应用层处理,还是直接利用数据库的附属工具或机制
-
落库的类型和特点: NoSQL 或 关系型数据库
方案:
NoSQL
- MongoDB
- Elasticsearch
关系型数据库
-
MySQL
-
Clickhouse
- GreenPlum
- copy 方式, 不经过应用端去做 数据解析和写入
千万级数据导出
场景: 数据库内大表输出为 csv,Excel
思考点:
- 导出时 用户并发及数据库资源控制
- 如何在应用层接入端去感知数据库的资源状态, 协同控制并发频率 (比如: 应用层接受到请求,参考数据库资源状态设置并发数和导出数据量的约束, 而不是设置抽象的限流策略)
- 字段多且大存储高
- 如何平衡数据导出效率 和 应用JVM投入资源
- 使用独占长连接完整SQL查询数据库 和 共享连接查询分批SQL 的取舍
简单理解为分页和不分页
- 独占连接: 完整SQL查询然后不关闭连接使用游标分批去数据库fetch数据, 最后汇总
- 共享连接: SQL层加分页或者条件范围 查询小批结果集, 最后汇总
方案:
- Java应用层面可以使用JDBC长连接 游标方式查询数据分批读写
商品秒杀
数据需求
数据血缘方案
核心流程为 采集 解析 图计算 存储 展示
- 采集: 依据数据库的类型 采集到完备的DML DDL语句(create select, insert,update), 例如MySQL可解析binlog Greenplum可解析审计日志 等等。
- 解析: ANTLR4将SQL解析为AST,遍历得到每层子查询,每句SQL的有向图
- 图计算: 将前文的若干有向图 合并为一个大图 得到复杂SQL 和 一批独立SQL 完整正确的图,从而得到完整的血缘关系(入度为0 源表,出度为0 目标表)
- Gremlin Gephi
- 存储: 图数据库存储以上解析出的全部的图,需考虑节点的唯一标识
- 展示: 图查询,需前端解决海量节点数时的性能问题
- 生命周期或快照: 从业务和存储上来看,此类数据会一直累积,最后图会成为垃圾堆,可监听删除类型的DDL,移除对应的节点和边。以及依据业务特点定期快照历史数据,重建图
Greenplum/Hive 血缘解析落地方案: 采集SQL,ANTLR4解析为AST 调试规则文件,解析合并图,存入Atlas,查询Atlas
汉字-拼音 处理
汉字转换拼音,首字母模糊搜索等功能。
敏感词匹配
DFA Bloom过滤器
OCR
Optical Character Recognition
- 云厂商 例如阿里云,腾讯云等。
- tesseract
Author Kuangcp
LastMod 2023-09-22