微服務架構案例(03):資料庫選型簡介,業務資料規劃設計
阿新 • • 發佈:2019-11-02
更新進度(共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