溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

微服務(wù)架構(gòu)案例(03):數(shù)據(jù)庫選型簡介,業(yè)務(wù)數(shù)據(jù)規(guī)劃設(shè)計(jì)

發(fā)布時(shí)間:2020-07-02 15:26:43 來源:網(wǎng)絡(luò) 閱讀:272 作者:知了一笑 欄目:編程語言

本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里

更新進(jìn)度(共6節(jié)):

01:項(xiàng)目技術(shù)選型簡介,架構(gòu)圖解說明

02:業(yè)務(wù)架構(gòu)設(shè)計(jì),系統(tǒng)分層管理

03:數(shù)據(jù)庫選型,業(yè)務(wù)數(shù)據(jù)設(shè)計(jì)規(guī)劃

一、數(shù)據(jù)庫選擇

1、數(shù)據(jù)庫分類

數(shù)據(jù)庫類型 常見數(shù)據(jù)庫
關(guān)系型 MySQL、Oracle、DB2、SQLServer等。
非關(guān)系型 Hbase、Redis、MongodDB等。
行式存儲(chǔ) MySQL、Oracle、DB2、SQLServer等。
列式存儲(chǔ) Hbase、ClickHouse等。
分布式存儲(chǔ) Cassandra、Hbase、MongodDB等。
鍵值存儲(chǔ) Memcached、Redis、MemcacheDB等。
圖形存儲(chǔ) Neo4J、TigerGraph等。
文檔存儲(chǔ) MongoDB、CouchDB等。

2、數(shù)據(jù)庫選擇

基于特定的應(yīng)用環(huán)境,選擇最適合的數(shù)據(jù)庫,建立數(shù)據(jù)存儲(chǔ)模式,使之能夠有效地存儲(chǔ)數(shù)據(jù),滿足各種用戶的應(yīng)用需求。例如:普通的業(yè)務(wù)庫,數(shù)據(jù)量不大情況下選擇MySQL;有頻繁的搜索操作,可以使用ElasticSearch;系統(tǒng)存在大量熱點(diǎn)數(shù)據(jù),可以使用常見的緩存數(shù)據(jù)庫等。

3、微服務(wù)數(shù)據(jù)庫

微服務(wù)架構(gòu)的一個(gè)關(guān)鍵點(diǎn)是數(shù)據(jù)庫設(shè)計(jì)規(guī)劃,基本原則是每個(gè)服務(wù)都有自己單獨(dú)的數(shù)據(jù)庫,而且只有微服務(wù)本身可以訪問這個(gè)數(shù)據(jù)庫。其他的服務(wù)要是想訪問,只能通過調(diào)用該服務(wù)對(duì)外提供的接口進(jìn)行操作,這樣可以壓縮數(shù)據(jù)庫操作的接口,在問題排查和性能優(yōu)化上都可以提供支持,這樣也使系統(tǒng)的框架更具有條理。該模式圖解如下:

微服務(wù)架構(gòu)案例(03):數(shù)據(jù)庫選型簡介,業(yè)務(wù)數(shù)據(jù)規(guī)劃設(shè)計(jì)

微服務(wù)C通過微服務(wù)A操作數(shù)據(jù)庫A,或者通過微服務(wù)B操作數(shù)據(jù)庫B。

二、規(guī)劃業(yè)務(wù)數(shù)據(jù)庫

1、總體劃分

微服務(wù)架構(gòu)案例(03):數(shù)據(jù)庫選型簡介,業(yè)務(wù)數(shù)據(jù)規(guī)劃設(shè)計(jì)

主要使用三種數(shù)據(jù)存儲(chǔ):MySQL(劃分三個(gè)業(yè)務(wù)庫),ElasticSearch(單臺(tái)),Redis(單臺(tái))。

2、用戶庫

(user-data)存儲(chǔ)用戶相關(guān)的數(shù)據(jù)結(jié)構(gòu),比如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 '手機(jī)號(hào)',
  `email` varchar(50) DEFAULT NULL COMMENT '郵箱',
  `create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
  `update_time` datetime DEFAULT NULL COMMENT '更新時(shí)間',
  `state` int(1) DEFAULT '0' COMMENT '狀態(tài):0可用,1禁用',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶表';

3、管理系統(tǒng)庫

(admin-data)存儲(chǔ)后臺(tái)微服務(wù)管理系統(tǒng)的支撐數(shù)據(jù)庫,例如定時(shí)器,管理員權(quán)限,配置字典等。

-- 管理員列表
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 '手機(jī)號(hào)',
  `email` varchar(50) DEFAULT NULL COMMENT '郵箱',
  `create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
  `update_time` datetime DEFAULT NULL COMMENT '更新時(shí)間',
  `state` int(1) DEFAULT '0' COMMENT '狀態(tài):0可用,1禁用',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理用戶表';

-- 角色和權(quán)限列表
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 '角色權(quán)限',
  `create_time` datetime DEFAULT NULL COMMENT '添加時(shí)間',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系統(tǒng)角色表';

-- 定時(shí)器列表
CREATE TABLE `schedule_job` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任務(wù)id',
  `bean_name` varchar(200) DEFAULT NULL COMMENT 'spring bean名稱',
  `params` varchar(2000) DEFAULT NULL COMMENT '參數(shù)',
  `cron_expression` varchar(100) DEFAULT NULL COMMENT 'cron表達(dá)式',
  `status` tinyint(4) DEFAULT NULL COMMENT '任務(wù)狀態(tài)  0:正常  1:暫停',
  `remark` varchar(255) DEFAULT NULL COMMENT '備注',
  `create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='定時(shí)任務(wù)';

4、數(shù)據(jù)分析庫

(report-data)存儲(chǔ)數(shù)據(jù)歸檔的報(bào)表,分析結(jié)果等,案例主要演示把用戶的搜索行為進(jìn)行分析,存儲(chǔ)到報(bào)表庫。

-- 書籍搜索記錄
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 '搜索時(shí)間',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='書籍被搜索記錄';

-- 關(guān)鍵詞搜索記錄
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 '關(guān)鍵詞',
  `search_num` int(11) DEFAULT NULL COMMENT '搜索次數(shù)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='關(guān)鍵詞搜索記錄';

5、搜索引擎庫

(es-data)存儲(chǔ)用戶的搜索數(shù)據(jù),可以基于MySQL庫動(dòng)態(tài)實(shí)時(shí)的導(dǎo)入到ES服務(wù)。

-- 書籍搜索信息表
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 '創(chuàng)建時(shí)間',
  `update_time` datetime DEFAULT NULL COMMENT '更新時(shí)間',
  `state` int(1) DEFAULT '0' COMMENT '狀態(tài):0可用,1刪除',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='書籍信息表';

三、數(shù)據(jù)庫設(shè)計(jì)總結(jié)

數(shù)據(jù)庫設(shè)計(jì)是微服務(wù)設(shè)計(jì)的一個(gè)核心點(diǎn),基本原則是每個(gè)微服務(wù)都有自己單獨(dú)的數(shù)據(jù)庫,而且只有微服務(wù)本身可以訪問這個(gè)數(shù)據(jù)庫。在微服務(wù)架構(gòu)中,數(shù)據(jù)庫設(shè)計(jì)首先要滿足用戶的需求,便于維護(hù)和擴(kuò)展,具有很好的讀寫性能,還可以幫助開發(fā)人員理解和管理系統(tǒng)。

四、源代碼地址

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

微服務(wù)架構(gòu)案例(03):數(shù)據(jù)庫選型簡介,業(yè)務(wù)數(shù)據(jù)規(guī)劃設(shè)計(jì)

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI