学习
实践
活动
工具
TVP
写文章
专栏首页java架构计划训练营账号微服务+流量包设计(第七章)海量数据处理-商用短链

账号微服务+流量包设计(第七章)海量数据处理-商用短链

第七章 商用短链平台实战-账号微服务+流量包设计

第1集 账号微服务和流量包数据库表+索引规范讲解《上》

简介:账号微服务和流量包数据库表+索引规范讲解

  • 短链平台大课难度层级曲线图:由浅入深
  • 索引规范
    • 主键索引名为 pk_字段名; pk即 primary key;
    • 唯一索引名为 uk_字段名;uk 即 unique key
    • 普通索引名则为 idx_字段名;idx 即index 的简称
  • account表
CREATE TABLE `account` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `account_no` bigint DEFAULT NULL,
  `head_img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '头像',
  `phone` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '手机号',
  `pwd` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码',
  `secret` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '盐,用于个人敏感信息处理',
  `mail` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '邮箱',
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户名',
  `auth` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '认证级别,DEFAULT,REALNAME,ENTERPRISE,访问次数不一样',
  `gmt_create` datetime DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_phone` (`phone`) USING BTREE,
  UNIQUE KEY `uk_account` (`account_no`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

第2集 账号微服务和流量包数据库表+索引规范讲解《下》

简介:账号微服务和流量包数据库表+索引规范讲解

  • 账号和流量包的关系:一对多
  • traffic流量包表
    • 思考点
      • 海量数据下每天免费次数怎么更新?
      • 海量数据付费流量套餐包每天次数限制怎么更新?
      • 高性能扣减流量包设计怎么做?
      • 流量包数据更新处理-高并发下分布式事务怎么解决
CREATE TABLE `traffic` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `day_limit` int DEFAULT NULL COMMENT '每天限制多少条,短链',
  `day_used` int DEFAULT NULL COMMENT '当天用了多少条,短链',
  `total_limit` int DEFAULT NULL COMMENT '总次数,活码才用',
  `account_no` bigint DEFAULT NULL COMMENT '账号',
  `out_trade_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '订单号',
  `level` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '产品层级:FIRST青铜、SECOND黄金、THIRD钻石',
  `expired_date` date DEFAULT NULL COMMENT '过期日期',
  `plugin_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '插件类型',
  `product_id` bigint DEFAULT NULL COMMENT '商品主键',
  `gmt_create` datetime DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_trade_no` (`out_trade_no`,`account_no`) USING BTREE,
  KEY `idx_account_no` (`account_no`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
  • traffic_task 流量包任务表(先建-后续会讲用途)
CREATE TABLE `traffic_task` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `account_no` bigint DEFAULT NULL,
  `traffic_id` bigint DEFAULT NULL,
  `use_times` int DEFAULT NULL,
  `lock_state` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '锁定状态锁定LOCK  完成FINISH-取消CANCEL',
  `message_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一标识',
  `gmt_create` datetime DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_msg_id` (`message_id`) USING BTREE,
  KEY `idx_release` (`account_no`,`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

第3集 账号微服务-流量包业务模型概念补充

简介:账号微服务流量包业务模型概念补充

  • 业务模型补充

第4集 项目引入Mybatis-plus-generator代码自动生成工具

简介:介绍Mybatis-plus-generator代码自动化生成工具

  • 介绍
    • 底层是模板引擎技术,可以自定义生成的java类模板
  • 基础版mybatis-genarator
  • 进阶版mybatis-plus-genarator
  • 注意
    • 使用起来和普通版的mybatis generator一样,但是这个纯代码,不用复杂xml配置
    • 任何框架,不要使用过多的侵入或者框架定制化深的内容,防止后续改动耦合性高,成本大
  • 添加依赖
    • 统一Common项目添加,各个项目测试类里面配置
    <!-- 代码自动生成依赖 begin -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!-- velocity -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
        <!-- 代码自动生成依赖 end-->
  • 代码(标记TODO的记得修改)
public class MyBatisPlusGenerator {

    public static void main(String[] args) {
        //1. 全局配置
        GlobalConfig config = new GlobalConfig();
        // 是否支持AR模式
        config.setActiveRecord(true)
                // 作者
                .setAuthor("二当家小D")
                // 生成路径,最好使用绝对路径,window路径是不一样的
                //TODO  TODO  TODO  TODO
                .setOutputDir("/Users/xdclass/Desktop/demo/src/main/java")
                // 文件覆盖
                .setFileOverride(true)
                // 主键策略
                .setIdType(IdType.AUTO)

                .setDateType(DateType.ONLY_DATE)
                // 设置生成的service接口的名字的首字母是否为I,默认Service是以I开头的
                .setServiceName("%sService")

                //实体类结尾名称
                .setEntityName("%sDO")

                //生成基本的resultMap
                .setBaseResultMap(true)

                //不使用AR模式
                .setActiveRecord(false)

                //生成基本的SQL片段
                .setBaseColumnList(true);

        //2. 数据源配置
        DataSourceConfig dsConfig = new DataSourceConfig();
        // 设置数据库类型
        dsConfig.setDbType(DbType.MYSQL)
                .setDriverName("com.mysql.cj.jdbc.Driver")
                //TODO  TODO  TODO  TODO
                .setUrl("jdbc:mysql://120.79.150.146:3306/dcloud_account?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai")
                .setUsername("root")
                .setPassword("xdclass.net168");

        //3. 策略配置globalConfiguration中
        StrategyConfig stConfig = new StrategyConfig();

        //全局大写命名
        stConfig.setCapitalMode(true)
                // 数据库表映射到实体的命名策略
                .setNaming(NamingStrategy.underline_to_camel)

                //使用lombok
                .setEntityLombokModel(true)

                //使用restcontroller注解
                .setRestControllerStyle(true)

                // 生成的表, 支持多表一起生成,以数组形式填写
                //TODO  TODO  TODO  TODO
                .setInclude("account","traffic","traffic_task");

        //4. 包名策略配置
        PackageConfig pkConfig = new PackageConfig();
        pkConfig.setParent("net.xdclass")
                .setMapper("mapper")
                .setService("service")
                .setController("controller")
                .setEntity("model")
                .setXml("mapper");

        //5. 整合配置
        AutoGenerator ag = new AutoGenerator();
        ag.setGlobalConfig(config)
                .setDataSource(dsConfig)
                .setStrategy(stConfig)
                .setPackageInfo(pkConfig);

        //6. 执行操作
        ag.execute();
        System.out.println("======= 小滴课堂 Done 相关代码生成完毕  ========");
    }
}
  • 导入生成好的代码
    • model (为啥不放common项目,如果是确定每个服务都用到的依赖或者类才放到common项目)
    • mapper 类接口拷贝
    • resource/mapper文件夹 xml脚本拷贝
    • controller
    • service 不拷贝
  • Mybatis plus配置控制台打印日志
#配置plus打印sql日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

第5集 账号微服务注册Nacos+配置文件增加

简介:账号微服务注册Nacos+配置文件增加

启动账号微服务

  • 排除sharding-jdbc依赖
						<exclusions>
                <exclusion>
                        <groupId>org.apache.shardingsphere</groupId>
                        <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
                </exclusion>
            </exclusions>
  • 增加main函数主类
@MapperScan("net.xdclass.mapper")
@EnableTransactionManagement
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class AccountApplication {

    public static void main(String[] args) {
        SpringApplication.run(AccountApplication.class, args);
    }

}
  • 配置文件
  cloud:
    nacos:
      discovery:
        server-addr: 120.79.150.146:8848
        username: nacos
        password: nacos

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://120.79.150.146:3306/dcloud_account?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: xdclass.net168

多个微服务增加配置+代码生成配置映入

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://www.sky12580.cn复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • mysql分库分表方案(第十四/十五章/十六章/十七章/十八章)海量数据处理-商用短链

    分片策略(如果要看各个策略的实际操作,看ShardingSphere专题视频即可)

    高大北
  • 腾讯百度阿里,三巨头谁最开放?

    本文独家授权虎嗅发表,2013年8月14日 大约一周前,微信第一自媒体联盟WeMedia的微信群爆发了一次激烈的讨论,主题是关于中国互联网巨头的开放。有人说腾讯...

    罗超频道
  • Apache SeaTunnel 分布式数据集成平台

    随着互联网流量爆发式增长,越来越多的公司业务需要支撑海量数据存储,对高并发、高可用、高可扩展性等特性提出了更高的要求,这促使各种类型的数据库快速发展,至今常见数...

    smartsi
  • 网络测量之EverFlow(SIGCOMM-2015)

    SIGCOMM 2015年中,由微软研究院发表了题为《Packet-Level Telemetry in Large Datacenter Networks》的...

    我是东东东
  • 新浪微博技术分享:微博实时直播答题的百万高并发架构实践1、概述2、什么是直播答题3、直播答题的技术挑战4、答题直播技术方案5、如何解决实时性、可靠性与高并发?6、本文小结附录1:更多直播技术文章参考附

    本文将分享新浪微博系统开发工程师陈浩在 RTC 2018 实时互联网大会上的演讲。他分享了新浪微博直播互动答题架构设计的实战经验。其背后的百万高并发实时架构,值...

    JackJiang
  • 基于flink的电商用户行为数据分析【1】| 项目整体介绍

    愉悦的一周又要开始了,本周菌哥打算用几期文章为大家分享一个之前在B站自学的一个项目——基于flink的电商用户行为数据分析。本期我们先对项目整体...

    大数据梦想家
  • 一篇读懂分布式架构下的负载均衡技术:分类、原理、算法、常见方案等

    关于“负载均衡”的解释,百度词条里:负载均衡,英文叫Load Balance,意思就是将请求或者数据分摊到多个操作单元上进行执行,共同完成工作任务。

    JackJiang
  • 中台整合零售:腾讯电商业务中台的 Serverless 架构升级

    零售领域变革不是一个新话题,从电商到 O2O ,从无人售货柜到机器人导购,腾讯云的尝试一直未曾止步。对于传统零售企业来说,通过数据中台可以让顾客与需求更好地匹配...

    腾讯云原生
  • 海量规模下DCI网络的设计与实现

    前言         随着云计算业务的蓬勃发展,全球资源的持续布局,对基础网络带来了极大的挑战。腾讯DCI超过千级节点中有数百台核心设备,庞大的骨干域带来的软...

    鹅厂网事
  • 行稳致远:腾讯自研DPU商用情况与技术演进

    前言     2022年9月2日,第二届SmartNIC & DPU技术创新峰会在北京成功举办。     去年在第一届峰会上,腾讯以《从SmartNIC到DPU...

    鹅厂网事
  • vivo营销自动化技术解密|开篇

    营销自动化是指专门为营销部门或组织设计的软件平台和技术,可以更有效地在线进行多渠道营销并使重复性任务自动化。营销部门和销售人员通过制定任务和流程的操作标准,然后...

    冬夜先生
  • 大数据应用及其解决方案(完整版)

    大数据,IT行业的又一次技术变革,大数据的浪潮汹涌而至,对国家治理、企业决策和个人生活都在产生深远的影响,并将成为云计算、物联网之后信息技术产业领域又一重大创新...

    全栈程序员站长
  • 海量之道系列文章之弱联网优化 (七)

    多异步经过前面不懈的努力,初步打造了一个比较好的技术根基,好马配好鞍,好车配风帆,怎么就把领先优势拱手送与特斯拉了。用户欲壑难平,资源供不应求,靠“术”并无法优...

    樊华恒
  • 短连服务crud(第十八章/十九章/二十章/二十一章)海量数据处理-商用短链

    高大北
  • IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理

    一个安全的信息系统,合法身份检查是必须环节。尤其IM这种以“人”为中心的社交体系,身份认证更是必不可少。

    JackJiang
  • 新浪微博技术分享:微博实时直播答题的百万高并发架构实践

    本文将分享新浪微博系统开发工程师陈浩在 RTC 2018 实时互联网大会上的演讲。他分享了新浪微博直播互动答题架构设计的实战经验。其背后的百万高并发实时架构,值...

    JackJiang

扫码关注腾讯云开发者

领取腾讯云代金券