1、存储设计

在上一章中,我们已经完成了基本业务流程的梳理和服务模块的划分,接下来,开始设计数据存储。

虽然在微服务的理论中,没有对数据库定强制性的规范,但一般,服务拆分之后,数据库也会对应的拆分。

这种结合业务来进行拆分的方式是数据库拆分中的垂直拆分。

数据库设计偷个懒,就不再用比较重的Power Designer,直接拿Navicat开干。

根据服务的拆分,分别建立数据库如下:

  • 用户库(shop_user):

建表语句:

  1. SET NAMES utf8mb4;
  2. SET FOREIGN_KEY_CHECKS = 0;
  3. -- ----------------------------
  4. -- Table structure for shop_user
  5. -- ----------------------------
  6. DROP TABLE IF EXISTS `shop_user`;
  7. CREATE TABLE `shop_user` (
  8. `user_id` int(16) NOT NULL AUTO_INCREMENT,
  9. `user_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
  10. `sex` tinyint(4) NULL DEFAULT 2 COMMENT '用户性别:0:女 1:男 2:未知',
  11. `phone` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号',
  12. `email` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
  13. `address` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
  14. `count` int(64) NULL DEFAULT NULL COMMENT '积分',
  15. `level` int(32) NULL DEFAULT 0 COMMENT '等级',
  16. `create_user` int(16) NULL DEFAULT NULL COMMENT '创建用户',
  17. `create_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  18. `update_user` int(16) NULL DEFAULT NULL COMMENT '更新用户',
  19. `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  20. `status` tinyint(4) NULL DEFAULT 1 COMMENT '状态',
  21. PRIMARY KEY (`user_id`) USING BTREE
  22. ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;
  23. SET FOREIGN_KEY_CHECKS = 1;
  • 商品库(shop_goods):

建表语句:

  1. SET NAMES utf8mb4;
  2. SET FOREIGN_KEY_CHECKS = 0;
  3. -- ----------------------------
  4. -- Table structure for shop_goods
  5. -- ----------------------------
  6. DROP TABLE IF EXISTS `shop_goods`;
  7. CREATE TABLE `shop_goods` (
  8. `goods_id` int(16) NOT NULL AUTO_INCREMENT COMMENT '主键',
  9. `goods_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品名称',
  10. `price` decimal(10, 2) NULL DEFAULT NULL COMMENT '价格',
  11. `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品介绍',
  12. `create_user` int(16) NULL DEFAULT NULL COMMENT '创建用户',
  13. `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  14. `update_user` int(16) NULL DEFAULT NULL COMMENT '更新用户',
  15. `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  16. `status` tinyint(4) NULL DEFAULT 0 COMMENT '状态',
  17. PRIMARY KEY (`goods_id`) USING BTREE
  18. ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
  19. SET FOREIGN_KEY_CHECKS = 1;
  • 订单库(shop_order):

建表语句:

  1. SET NAMES utf8mb4;
  2. SET FOREIGN_KEY_CHECKS = 0;
  3. -- ----------------------------
  4. -- Table structure for shop_order
  5. -- ----------------------------
  6. DROP TABLE IF EXISTS `shop_order`;
  7. CREATE TABLE `shop_order` (
  8. `order_id` int(16) NOT NULL AUTO_INCREMENT COMMENT '主键',
  9. `order_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '订单金额',
  10. `user_id` int(16) NULL DEFAULT NULL COMMENT '用户id',
  11. `order_status` tinyint(4) NULL DEFAULT NULL COMMENT '订单状态: 1:待付款 2:已支付 3:已发货 4:已完成 5:已关闭',
  12. `comment` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '评价',
  13. `create_user` int(16) NULL DEFAULT NULL COMMENT '创建用户',
  14. `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  15. `update_user` int(16) NULL DEFAULT NULL COMMENT '更新用户',
  16. `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  17. `status` tinyint(4) NULL DEFAULT NULL COMMENT '状态',
  18. PRIMARY KEY (`order_id`) USING BTREE
  19. ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
  20. -- ----------------------------
  21. -- Table structure for shop_order_detail
  22. -- ----------------------------
  23. DROP TABLE IF EXISTS `shop_order_detail`;
  24. CREATE TABLE `shop_order_detail` (
  25. `order_detail_id` int(16) NOT NULL AUTO_INCREMENT COMMENT '主键',
  26. `order_id` int(16) NULL DEFAULT NULL COMMENT '订单表主键',
  27. `goods_id` int(16) NULL DEFAULT NULL COMMENT '商品表主键',
  28. `goods_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品名称',
  29. `price` decimal(10, 2) NULL DEFAULT NULL COMMENT '商品价格',
  30. `goods_count` int(32) NULL DEFAULT NULL COMMENT '商品数量',
  31. `create_user` int(16) NULL DEFAULT NULL COMMENT '创建用户',
  32. `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  33. `update_user` int(16) NULL DEFAULT NULL COMMENT '更新用户',
  34. `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  35. `status` tinyint(4) NULL DEFAULT 0 COMMENT '状态',
  36. PRIMARY KEY (`order_detail_id`) USING BTREE
  37. ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
  38. SET FOREIGN_KEY_CHECKS = 1;

库存库(shop_stock):

建表语句:

  1. SET NAMES utf8mb4;
  2. SET FOREIGN_KEY_CHECKS = 0;
  3. -- ----------------------------
  4. -- Table structure for shop_stock
  5. -- ----------------------------
  6. DROP TABLE IF EXISTS `shop_stock`;
  7. CREATE TABLE `shop_stock` (
  8. `stock_id` int(16) NOT NULL AUTO_INCREMENT COMMENT '主键',
  9. `goods_id` int(16) NULL DEFAULT NULL COMMENT '商品表主键',
  10. `inventory` int(64) NULL DEFAULT NULL COMMENT '库存量',
  11. `create_user` int(16) NULL DEFAULT NULL COMMENT '创建用户',
  12. `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  13. `update_user` int(11) NULL DEFAULT NULL COMMENT '更新用户',
  14. `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  15. `status` tinyint(4) NULL DEFAULT 0,
  16. PRIMARY KEY (`stock_id`) USING BTREE
  17. ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
  18. SET FOREIGN_KEY_CHECKS = 1;

支付库(shop_finance):

建表语句:

  1. SET NAMES utf8mb4;
  2. SET FOREIGN_KEY_CHECKS = 0;
  3. -- ----------------------------
  4. -- Table structure for shop_payment_record
  5. -- ----------------------------
  6. DROP TABLE IF EXISTS `shop_payment_record`;
  7. CREATE TABLE `shop_payment_record` (
  8. `payment_record_id` int(16) NOT NULL AUTO_INCREMENT COMMENT '主键',
  9. `order_id` int(16) NULL DEFAULT NULL COMMENT '订单表主键',
  10. `user_id` int(16) NULL DEFAULT NULL COMMENT '支付人',
  11. `fee` decimal(16, 2) NULL DEFAULT NULL COMMENT '支付金额',
  12. `pay_type` tinyint(4) NULL DEFAULT NULL COMMENT '支付方式 1:支付宝 2:微信支付',
  13. `create_user` int(16) NULL DEFAULT NULL COMMENT '创建用户',
  14. `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  15. `update_user` int(11) NULL DEFAULT NULL COMMENT '更新用户',
  16. `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  17. `status` tinyint(4) NULL DEFAULT 0 COMMENT '状态',
  18. PRIMARY KEY (`payment_record_id`) USING BTREE
  19. ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
  20. SET FOREIGN_KEY_CHECKS = 1;

2、基础架构设计

我们首先看一下SpringCloud 官方的一些组件,有些组件不再维护升级,有些新的组件重新承担起相应的责任。zuul之后推出了gateway组件,eureka之后推出了zookeeper兼容。

我们接着看一下SpringCloud Alibaba的主要组件。

Dubbo是在国内应用非常广泛的一款高性能 Java RPC 框架。

nacos作为易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

hystrix停止开发后,交由官方Resilience4j替代来完成使命,而sentinel以更简单轻便的方式实现类比hystrix的功能,与dubbo生态更契合。

分布式事务一直是个非常令人头疼的问题,seata是比较易用的高性能微服务分布式事务解决方案。

我们要做的实例的一个粗略的架构图如下,接下来,我们会围绕SpringCloud/SpringCloud Alibaba的体系来进行我们的项目实战。

"简单的事情重复做,重复的事情认真做,认真的事情有创造性地做!"——

我是三分恶,可以叫我老三/三分/三哥/三子,一个能文能武的全栈开发,咱们下期见!


参考:

【1】:小专栏 SpringCloudAlibaba微服务实战

【2】:电商系统之订单设计篇

【3】:Spring Cloud Alibaba 新一代微服务解决方案

SpringCloud Alibaba实战(3:存储设计与基础架构设计)的更多相关文章

  1. .NET Core实战项目之CMS 第九章 设计篇-白话架构设计

    前面两篇文章给大家介绍了我们实战的CMS系统的数据库设计,源码也已经上传到服务器上了.今天我们就好聊聊架构设计,在开始之前先给大家分享一下这几天我一直在听的<从零开始学架构>里面关于架构设 ...

  2. Atitit.数据库表的物理存储结构原理与架构设计与实践

    Atitit.数据库表的物理存储结构原理与架构设计与实践 1. Oracle和DB2数据库的存储模型如图: 1 1.1. 2. 表数据在块中的存储以及RowId信息3 2. 数据表的物理存储结构 自然 ...

  3. SpringCloud Alibaba实战(7:nacos注册中心管理微服务)

    源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一节我们已经完成了Nacos Server的本地部署,这一节我们学习如何将Nac ...

  4. SpringCloud Alibaba实战(2:电商系统业务分析)

    选用了很常见的电商业务来进行SpringCloud Alibaba的实战. 当然,因为仅仅是为了学习SpringCloud Alibaba,所以对业务进行了大幅度简化,这里只取一个精简版的用户下单业务 ...

  5. SpringCloud Alibaba实战(6:nacos-server服务搭建)

    源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 大家好,我是三分恶. 这一节我们来学习SpringCloud Alibaba体系中一 ...

  6. 移动互联网实战--Web Restful API设计和基础架构

    前言: 在移动互联网的大潮中, Web Restful API逐渐成为Web Server重要的一个分支. 移动端和服务端的交互, 主流的方式还是通过Http协议的形式来进行. 请求以Get/Post ...

  7. SpringCloud Alibaba实战(4:基本开发框架搭建)

    在上一节,我们已经完成了项目的整体技术架构设计和具体的数据库设计,接下来,我们搭建整体的开发框架. 开发工具选用Idea. 开发工具只是为了提高效率,如果不习惯Idea的话,STS使用起来也是OK的. ...

  8. SpringCloud Alibaba实战(8:使用OpenFeign服务调用)

    源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一个章节,我们已经成功地将服务注册到了Nacos注册中心,实现了服务注册和服务发 ...

  9. SpringCloud Alibaba实战(11:引入服务网关Gateway)

    源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 大家好,我是三分恶. 在前面的章节中,我们已经完成了服务间的调用.统一配置等等,在这 ...

随机推荐

  1. 2021S软件工程——个人阅读作业2

    2021S软件工程--个人阅读作业2 项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任建) 这个作业的要求在哪里 个人阅读作业#2 我在这个课程的目标是 了解并熟悉软件开发的具体流程, ...

  2. WordPress 函数do_action()详解和应用举例

      do_action()函数: 我们经常能看到在一些WordPress函数中调用了do_action()函数,例如get_header(), get_footer()等调用模板的函数中经常调用do_ ...

  3. Ubuntu20安装Truffle框架并部署第一个DApp

    1.查看Ubuntu版本信息 $ screenfetch 2.安装node ①查看nodejs官网稳定版(LTS)版本号(下面的14就是此时的版本号) ②添加源 $ curl -sL https:// ...

  4. 路由器逆向分析------QEMU的基本使用方法(MIPS)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69258334 一.QEMU的运行模式 直接摘抄自己<揭秘家用路由器0day漏 ...

  5. POJ1376简单广搜

    题意:       给你一个n*m的矩阵,然后给你机器人的起点和终点,还有起点的方向,然后每次机器人有两种操作,左右旋转90度,或者是朝着原来的方向走1,2或者3步,机器人再走的过程中不能碰到格子,也 ...

  6. 11.PHP与MySQL

    PHP与MySQL 首先是PHPStorm设置创建SQL的教程,找到了一个写的不错的,在这里:http://blog.csdn.net/knight_quan/article/details/5198 ...

  7. 我的主站 SHARELIST -分享列表 (功能持续完善中 2019-11-24 版本0.3)

    网站地址: http://www.sharelist.link 网站地址二维码: 网站介绍和更新: http://106.13.105.156/sharelist.php?listid=5dbda96 ...

  8. 通过例子分析MVVM

    通过一个简单的计数器例子分析MVVM. 代码 demo2.html <!DOCTYPE html> <html lang="en"> <head> ...

  9. springboot 项目中css js 等静态资源无法访问的问题

    目录 问题场景 问题分析 问题解决 问题场景 今天在开发一个springboot 项目的时候突然发现 css js 等静态资源竟然都报404找不到,折腾了好久终于把问题都解决了,决定写篇博客,纪录总结 ...

  10. 如何用Vim搭建IDE?

    推荐:http://harttle.com/2015/07/18/vim-cpp.html 转自:http://harttle.com/2015/11/04/vim-ide.html 一年前我从Vim ...