本文源碼:GitHub·點這裏 || GitEE·點這裏git
更新進度(共6節):github
01:項目技術選型簡介,架構圖解說明spring
03:數據庫選型,業務數據設計規劃express
數據庫類型 | 常見數據庫 |
---|---|
關係型 | MySQL、Oracle、DB二、SQLServer等。 |
非關係型 | Hbase、Redis、MongodDB等。 |
行式存儲 | MySQL、Oracle、DB二、SQLServer等。 |
列式存儲 | Hbase、ClickHouse等。 |
分佈式存儲 | Cassandra、Hbase、MongodDB等。 |
鍵值存儲 | Memcached、Redis、MemcacheDB等。 |
圖形存儲 | Neo4J、TigerGraph等。 |
文檔存儲 | MongoDB、CouchDB等。 |
基於特定的應用環境,選擇最適合的數據庫,創建數據存儲模式,使之可以有效地存儲數據,知足各類用戶的應用需求。例如:普通的業務庫,數據量不大狀況下選擇MySQL;有頻繁的搜索操做,可使用ElasticSearch;系統存在大量熱點數據,可使用常見的緩存數據庫等。緩存
微服務架構的一個關鍵點是數據庫設計規劃,基本原則是每一個服務都有本身單獨的數據庫,並且只有微服務自己能夠訪問這個數據庫。其餘的服務要是想訪問,只能經過調用該服務對外提供的接口進行操做,這樣能夠壓縮數據庫操做的接口,在問題排查和性能優化上均可以提供支持,這樣也使系統的框架更具備條理。該模式圖解以下:性能優化
微服務C經過微服務A操做數據庫A,或者經過微服務B操做數據庫B。數據結構
主要使用三種數據存儲:MySQL(劃分三個業務庫),ElasticSearch(單臺),Redis(單臺)。架構
(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='用戶表';
(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='定時任務';
(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='關鍵詞搜索記錄';
(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