天天看點

微服務架構案例(03):資料庫選型簡介,業務資料規劃設計一、資料庫選擇二、規劃業務資料庫三、資料庫設計總結四、源代碼位址

本文源碼: GitHub·點這裡 || GitEE·點這裡 更新進度(共6節):

01:項目技術選型簡介,架構圖解說明 02:業務架構設計,系統分層管理 03:資料庫選型,業務資料設計規劃

一、資料庫選擇

1、資料庫分類

資料庫類型 常見資料庫
關系型 MySQL、Oracle、DB2、SQLServer等。
非關系型 Hbase、Redis、MongodDB等。
行式存儲
列式存儲 Hbase、ClickHouse等。
分布式存儲 Cassandra、Hbase、MongodDB等。
鍵值存儲 Memcached、Redis、MemcacheDB等。
圖形存儲 Neo4J、TigerGraph等。
文檔存儲 MongoDB、CouchDB等。

2、資料庫選擇

基于特定的應用環境,選擇最适合的資料庫,建立資料存儲模式,使之能夠有效地存儲資料,滿足各種使用者的應用需求。例如:普通的業務庫,資料量不大情況下選擇MySQL;有頻繁的搜尋操作,可以使用ElasticSearch;系統存在大量熱點資料,可以使用常見的緩存資料庫等。

3、微服務資料庫

微服務架構的一個關鍵點是資料庫設計規劃,基本原則是每個服務都有自己單獨的資料庫,而且隻有微服務本身可以通路這個資料庫。其他的服務要是想通路,隻能通過調用該服務對外提供的接口進行操作,這樣可以壓縮資料庫操作的接口,在問題排查和性能優化上都可以提供支援,這樣也使系統的架構更具有條理。該模式圖解如下:
微服務架構案例(03):資料庫選型簡介,業務資料規劃設計一、資料庫選擇二、規劃業務資料庫三、資料庫設計總結四、源代碼位址

微服務C通過微服務A操作資料庫A,或者通過微服務B操作資料庫B。

二、規劃業務資料庫

1、總體劃分

微服務架構案例(03):資料庫選型簡介,業務資料規劃設計一、資料庫選擇二、規劃業務資料庫三、資料庫設計總結四、源代碼位址

主要使用三種資料存儲: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