微服务架构案例(03):数据库选型简介,业务数据规划设计

本文源码:GitHub·点这里 || GitEE·点这里

更新进度(共6节):

01:项目技术选型简介,架构图解说明

02:业务架构设计,系统分层管理

03:数据库选型,业务数据设计规划

一、数据库选择

1、数据库分类

数据库类型 常见数据库
关系型 MySQL、Oracle、DB2、SQLServer等。
非关系型 Hbase、Redis、MongodDB等。
行式存储 MySQL、Oracle、DB2、SQLServer等。
列式存储 Hbase、ClickHouse等。
分布式存储 Cassandra、Hbase、MongodDB等。
键值存储 Memcached、Redis、MemcacheDB等。
图形存储 Neo4J、TigerGraph等。
文档存储 MongoDB、CouchDB等。

2、数据库选择

基于特定的应用环境,选择最适合的数据库,建立数据存储模式,使之能够有效地存储数据,满足各种用户的应用需求。例如:普通的业务库,数据量不大情况下选择MySQL;有频繁的搜索操作,可以使用ElasticSearch;系统存在大量热点数据,可以使用常见的缓存数据库等。

3、微服务数据库

微服务架构的一个关键点是数据库设计规划,基本原则是每个服务都有自己单独的数据库,而且只有微服务本身可以访问这个数据库。其他的服务要是想访问,只能通过调用该服务对外提供的接口进行操作,这样可以压缩数据库操作的接口,在问题排查和性能优化上都可以提供支持,这样也使系统的框架更具有条理。该模式图解如下:

微服务C通过微服务A操作数据库A,或者通过微服务B操作数据库B。

二、规划业务数据库

1、总体划分

主要使用三种数据存储:MySQL(划分三个业务库),ElasticSearch(单台),Redis(单台)。

2、用户库

(user-data)存储用户相关的数据结构,比如User信息,Token,操作日志等。

CREATE TABLE `hc_user_base` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键id‘,
  `user_name` varchar(50) DEFAULT NULL COMMENT ‘用户名‘,
  `pass_word` varchar(300) DEFAULT NULL COMMENT ‘加密密码‘,
  `phone` varchar(30) DEFAULT NULL COMMENT ‘手机号‘,
  `email` varchar(50) DEFAULT NULL COMMENT ‘邮箱‘,
  `create_time` datetime DEFAULT NULL COMMENT ‘创建时间‘,
  `update_time` datetime DEFAULT NULL COMMENT ‘更新时间‘,
  `state` int(1) DEFAULT ‘0‘ COMMENT ‘状态:0可用,1禁用‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘用户表‘;

3、管理系统库

(admin-data)存储后台微服务管理系统的支撑数据库,例如定时器,管理员权限,配置字典等。

-- 管理员列表
CREATE TABLE `hc_admin_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键id‘,
  `user_name` varchar(50) DEFAULT NULL COMMENT ‘用户名‘,
  `pass_word` varchar(300) DEFAULT NULL COMMENT ‘加密密码‘,
  `phone` varchar(30) DEFAULT NULL COMMENT ‘手机号‘,
  `email` varchar(50) DEFAULT NULL COMMENT ‘邮箱‘,
  `create_time` datetime DEFAULT NULL COMMENT ‘创建时间‘,
  `update_time` datetime DEFAULT NULL COMMENT ‘更新时间‘,
  `state` int(1) DEFAULT ‘0‘ COMMENT ‘状态:0可用,1禁用‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘管理用户表‘;

-- 角色和权限列表
CREATE TABLE `hc_role_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键ID‘,
  `role_name` varchar(64) DEFAULT NULL COMMENT ‘角色名称‘,
  `role_auth` varchar(64) DEFAULT NULL COMMENT ‘角色权限‘,
  `create_time` datetime DEFAULT NULL COMMENT ‘添加时间‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘系统角色表‘;

-- 定时器列表
CREATE TABLE `schedule_job` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘任务id‘,
  `bean_name` varchar(200) DEFAULT NULL COMMENT ‘spring bean名称‘,
  `params` varchar(2000) DEFAULT NULL COMMENT ‘参数‘,
  `cron_expression` varchar(100) DEFAULT NULL COMMENT ‘cron表达式‘,
  `status` tinyint(4) DEFAULT NULL COMMENT ‘任务状态  0:正常  1:暂停‘,
  `remark` varchar(255) DEFAULT NULL COMMENT ‘备注‘,
  `create_time` datetime DEFAULT NULL COMMENT ‘创建时间‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘定时任务‘;

4、数据分析库

(report-data)存储数据归档的报表,分析结果等,案例主要演示把用户的搜索行为进行分析,存储到报表库。

-- 书籍搜索记录
CREATE TABLE `hc_search_book` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键ID‘,
  `user_id` int(11) DEFAULT NULL COMMENT ‘用户ID‘,
  `book_id` int(11) DEFAULT NULL COMMENT ‘书籍ID‘,
  `book_name` varchar(100) DEFAULT NULL COMMENT ‘书籍名称‘,
  `search_time` datetime DEFAULT NULL COMMENT ‘搜索时间‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT=‘书籍被搜索记录‘;

-- 关键词搜索记录
CREATE TABLE `hc_search_key_word` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键ID‘,
  `user_id` int(11) DEFAULT NULL COMMENT ‘用户ID‘,
  `key_word` varchar(50) DEFAULT NULL COMMENT ‘关键词‘,
  `search_num` int(11) DEFAULT NULL COMMENT ‘搜索次数‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘关键词搜索记录‘;

5、搜索引擎库

(es-data)存储用户的搜索数据,可以基于MySQL库动态实时的导入到ES服务。

-- 书籍搜索信息表
CREATE TABLE `hc_book_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键ID‘,
  `book_name` varchar(100) DEFAULT NULL COMMENT ‘书籍名称‘,
  `book_author` varchar(100) NOT NULL DEFAULT ‘0‘ COMMENT ‘作者‘,
  `book_desc` varchar(200) DEFAULT NULL COMMENT ‘简介‘,
  `book_press` varchar(100) NOT NULL DEFAULT ‘0‘ COMMENT ‘出版社‘,
  `create_time` datetime DEFAULT NULL COMMENT ‘创建时间‘,
  `update_time` datetime DEFAULT NULL COMMENT ‘更新时间‘,
  `state` int(1) DEFAULT ‘0‘ COMMENT ‘状态:0可用,1删除‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘书籍信息表‘;

三、数据库设计总结

数据库设计是微服务设计的一个核心点,基本原则是每个微服务都有自己单独的数据库,而且只有微服务本身可以访问这个数据库。在微服务架构中,数据库设计首先要满足用户的需求,便于维护和扩展,具有很好的读写性能,还可以帮助开发人员理解和管理系统。

四、源代码地址

GitHub·地址
https://github.com/cicadasmile/husky-spring-cloud
GitEE·地址
https://gitee.com/cicadasmile/husky-spring-cloud

原文地址:https://blog.51cto.com/14439672/2447296

时间: 2024-10-13 09:12:20

微服务架构案例(03):数据库选型简介,业务数据规划设计的相关文章

微服务架构案例(01):项目技术选型简介,架构图解说明

本文源码:GitHub·点这里 || GitEE·点这里 一.单体架构 单体架构在中等偏小的业务中比较常见,场景模式就是单个应用.单个数据库.一个程序包(例如war格式或者Jar格式)包含所有业务需求功能,这是一种比较传统的架构风格. 单体架构的缺陷 复杂性高,整个项目包含的模块多,依赖模糊,修改程序容易触发不可知问题. 扩展能力受限,单体应用只能整体进行扩展,无法针对业务模块的特性进行伸缩. 稳定性差,任何微小的问题,都可能导致整个应用服务直接挂掉. 二.微服务架构 微服务架构是一种架构概念,

微服务架构案例(04):中间件集成,公共服务封装

本文源码:GitHub·点这里 || GitEE·点这里 更新进度(共6节): 01:项目技术选型简介,架构图解说明 02:业务架构设计,系统分层管理 03:数据库选型,业务数据设计规划 04:中间件集成,公共服务管理 一.中间件简介 中间件是基础软件的一类, 属于复用性极高的软件.处于操作系统软件与应用程序的之间.是一种独立的系统软件,也可以是公共的服务程序,分布式架构系统借助中间件,可以在不同的技术之间共享资源,或者不同的服务直接传递信息.中间件位操作系统之上,管理计算机资源和网络通讯.是连

【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端

在<WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例>文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Framework 4.6.1)开发的DDD/CQRS/微服务架构的案例项目:WeText.文章发出后反响很好,也很感谢大家的关注.在本文中我将介绍如何在Ubuntu 14.04.4 LTS中运行WeText项目的服务端. 为跨平台而生 从一开始的设计,我就把WeText的服务端跨平台纳入了实践目标,因此,所选择的框架

三分钟彻底弄懂什么是分布式和微服务架构

一.微服务简介 1. 微服务的诞生 微服务是基于分而治之的思想演化出来的.过去传统的一个大型而又全面的系统,随着互联网的发展已经很难满足市场对技术的需求,于是我们从单独架构发展到分布式架构,又从分布式架构发展到 SOA 架构,服务不断的被拆分和分解,粒度也越来越小,直到微服务架构的诞生. 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值. 每个服务运行在其独立的进程中,服务和服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP

微服务设计关键的难点:微服务架构的数据库是如何设计的?

单独的数据库: 微服务设计的一个关键是数据库设计,基本原则是每个服务都有自己单独的数据库,而且只有微服务本身可以访问这个数据库.它是基于下面三个原因. 优化服务接口:微服务之间的接口越小越好,最好只有服务调用接口(RPC或消息),没有其他接口.如果微服务不能独享自己的数据库,那么数据库也变成了接口的一部分,这大大拓展了接口范围. 错误诊断:生产环境中的错误大部分都是和数据库有关的,要么是数据出了问题,要么是数据库的使用方式出了问题.当你不能完全控制数据库的访问时,会有各种各样的错误发生.它可能是

成小胖学习微服务架构&#183;基础篇

看到最近“微服务架构”这个概念这么火,作为一个积极上进的程序猿,成小胖忍不住想要学习学习.而架构师老王(不是隔壁老王)最近刚好在做公司基础服务的微服务化研究和落地,对此深有研究. 于是成小胖马上屁颠屁颠的跑过去向老王请教:“王哥,我看微服务架构这么火,我也想学,您给我讲讲啥是微服务架构呗?” 老王笑了笑说:“要想知道什么是微服务架构,你得先知道什么系统架构设计.” 成小胖的理想是成为一名架构师,平时积累了不少知识,因此对“系统架构设计”这个概念还是很熟悉的,因此他马上就给出了答案[1]: 系统架

从经典架构项目中透析微服务架构的核心概念和充血模型

微服务架构和SOA区别 微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢? 我们先看相同点: 需要Registry,实现动态的服务注册发现机制:需要考虑分布式下面的事务一致性,CAP原则下,两段式提交不能保证性能,事务补偿机制需要考虑:同步调用还是异步消息传递,如何保证消息可靠性?SOA由ESB来集成所有的消息:都需要统一的Gateway来汇

Java高并发高性能分布式框架从无到有微服务架构设计

微服务架构模式(Microservice Architect Pattern).近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API).每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境.类生产环境等.另外,应尽量避免统一的.集中式的服务管理

多研究些架构,少谈些框架(1) -- 论微服务架构的核心概念(转)

微服务架构和SOA区别 微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢?我们先看相同点: 需要Registry,实现动态的服务注册发现机制: 需要考虑分布式下面的事务一致性,CAP原则下,两段式提交不能保证性能,事务补偿机制需要考虑: 同步调用还是异步消息传递,如何保证消息可靠性?SOA由ESB来集成所有的消息: 都需要统一的Gateway