微服务架构案例(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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Portworx《年度容器技术采用情况调查》:多云成为使用容器技术的主要驱动力
在多个云平台上运行应用程序已经成为了容器技术使用的主要驱动力,带来了远超以往的益处,如开发者效率的提升以及支持微服务等。 在2018年版本的《年度容器技术采用情况调查》中,Portworx访谈的用户数量从2017年的250位增加到了2018年的424位。从更加成熟的容器用户角度来看:安全、数据管理和多云是目前面临的最大挑战,同时永久性存储已经不再最大的问题。 在过去几年中我们看到,人们常说锁定某个单一云供应商是不利的,但实际上并不会同时使用多个云服务提供商。调查显示,在那些声称因为多云才使用容器技术的受访者中,仅有26%的受访者实际上在多个云平台上使用容器。与之相比,强调开发者效率的受访者中则有40%是在多个云平台上运行容器的。只有12%的受访者认为微服务架构推动了容器技术的使用,这与2017年的32%相比是个下滑。2018年,有超过25%的受访者认为容器的应用主要是为了节省基础架构的成本。 与容器相比,无服务器化观点依旧较为流行。开发者认为如果不需要维护服务器,则可以获得更高的工作效率,同时减少云基础架构的支出。这一组别的容器使用者倾向于认为“无服务器化会让容器过时”,有41%的受访...
- 下一篇
今日头条在消息服务平台和容灾体系建设方面的实践与思考
本篇文章整理自今日头条的沈辉在 RocketMQ 开发者沙龙中的演讲,主要和大家分享一下,RocketMQ 在微服务架构下的实践和容灾体系建设。沈辉是今日头条的架构师,主要负责 RocketMQ 在头条的落地以及架构设计,参与消息系统的时间大概一年左右。 以下是本次分享的议题: 头条的业务背景 为什么选择 RocketMQ RocketMQ 在头条的落地实践 头条的容灾系统建设 业务背景 今日头条的服务大量使用微服务,容器数目巨大,业务线繁多, Topic 的数量也非常多。另外,使用的语言比较繁杂,包括 Python,Go, C++, Java, JS 等,对于基础组件的接入,维护 SDK 的成本很高。 引入 RocketMQ 之前采用的消息队列是 NSQ 和 kafka , NSQ 是纯内存的消息队列,缺少消息的持久性,不落盘直接写到 Go
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7,CentOS8安装Elasticsearch6.8.6