自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

開(kāi)源一個(gè)教學(xué)型分庫(kù)分表示例項(xiàng)目

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
分庫(kù)分表之所以被廣泛使用,因?yàn)楣こ滔鄬?duì)簡(jiǎn)單,但分庫(kù)分表并不僅僅是分片,還是需要考慮如何擴(kuò)縮容(全量同步、增量同步、數(shù)據(jù)校驗(yàn)等)。

在筆者心中,消息隊(duì)列,緩存,分庫(kù)分表是高并發(fā)解決方案三劍客。

分庫(kù)分表之所以被廣泛使用,因?yàn)楣こ滔鄬?duì)簡(jiǎn)單,但分庫(kù)分表并不僅僅是分片,還是需要考慮如何擴(kuò)縮容(全量同步、增量同步、數(shù)據(jù)校驗(yàn)等)。

圖片圖片

因此,筆者做了一個(gè)教學(xué)型分庫(kù)分表示例項(xiàng)目 ,計(jì)劃將分庫(kù)分表的技術(shù)體系都實(shí)際演示一遍。

圖片圖片

https://github.com/makemyownlife/shardingsphere-jdbc-demo

當(dāng)前項(xiàng)目包含三個(gè)模塊 :

  • shardingjdbc4-spring:使用 shardingsphere-JDBC 4.X 實(shí)現(xiàn)分庫(kù)分表功能
  • shardingjdbc5-spring:使用 shardingsphere-JDBC 5.X 實(shí)現(xiàn)分庫(kù)分表功能
  • idgenerator: 基于 grpc 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的服務(wù)端 ID 生成器

下面我們展示如何運(yùn)行 shardingjdbc4-spring 模塊,shardingsphere JDBC 4.x 如何整合 spring 實(shí)現(xiàn)分庫(kù)分表功能。

1 業(yè)務(wù)分析

筆者曾經(jīng)為武漢一家 O2O 公司訂單服務(wù)做過(guò)分庫(kù)分表架構(gòu)設(shè)計(jì) ,當(dāng)企業(yè)用戶創(chuàng)建一條采購(gòu)訂單 , 會(huì)生成如下記錄:

  • 訂單基礎(chǔ)表 t_ent_order  :?jiǎn)螚l記錄
  • 訂單詳情表 t_ent_order_detail  :?jiǎn)螚l記錄
  • 訂單明細(xì)表 t_ent_order_item:N  條記錄

訂單每年預(yù)估生成記錄 1 億條,數(shù)據(jù)量不大也不小,筆者參考原來(lái)神州專車的分庫(kù)分表方式,制定了如下的分庫(kù)分表策略:

  • 訂單基礎(chǔ)表按照 ent_id (企業(yè)用戶編號(hào)) 分庫(kù)(四個(gè)分庫(kù)),訂單詳情表保持一致。
  • 訂單明細(xì)表按照 ent_id (企業(yè)用戶編號(hào)) 分庫(kù) (四個(gè)分庫(kù)),同時(shí)也要按照 ent_id (企業(yè)編號(hào)) 分表(八個(gè)分表)。

2 環(huán)境準(zhǔn)備

創(chuàng)建 4 個(gè)庫(kù),分別是:ds_0、ds_1、ds_2、ds_3  。

然后這四個(gè)分庫(kù)分別執(zhí)行 doc 目錄下的 shardingjdbc-spring.sql 文件。

圖片圖片

執(zhí)行結(jié)果如下圖所示,每個(gè)分庫(kù)都包含訂單基礎(chǔ)表 , 訂單詳情表 ,訂單明細(xì)表 。但是因?yàn)槊骷?xì)表需要分表,所以包含多張表。

圖片圖片

3 項(xiàng)目結(jié)構(gòu)

打開(kāi)項(xiàng)目,如下圖所示:

圖片圖片

這是一個(gè)典型的 springboot 項(xiàng)目,包含控制器層、實(shí)體層、服務(wù)層 。

1、pom 文件配置依賴

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.1.1</version>
</dependency>

2、分片配置 application-test.yml

圖片圖片

  • 配置數(shù)據(jù)源,上面配置數(shù)據(jù)源是:ds0、ds1、ds2、ds3 ;
  • 配置打印日志,也就是:sql.show ,在測(cè)試環(huán)境建議打開(kāi) ,便于調(diào)試;
  • 配置哪些表需要分庫(kù)分表 ,在 shardingsphere.datasource.sharding.tables 節(jié)點(diǎn)下面配置:

圖片圖片

上圖中我們看到配置分片規(guī)則包含如下兩點(diǎn):

1.真實(shí)節(jié)點(diǎn)

對(duì)于我們的應(yīng)用來(lái)講,我們查詢的邏輯表是:t_ent_order_item 。

它們?cè)跀?shù)據(jù)庫(kù)中的真實(shí)形態(tài)是:t_ent_order_item_0 到  t_ent_order_item_7。

真實(shí)數(shù)據(jù)節(jié)點(diǎn)是指數(shù)據(jù)分片的最小單元,由數(shù)據(jù)源名稱和數(shù)據(jù)表組成。

訂單明細(xì)表的真實(shí)節(jié)點(diǎn)是:ds$->{0..3}.t_ent_order_item_$->{0..7} 。

2.分庫(kù)分表算法

分別配置分庫(kù)策略和分表策略 , 每種策略都需要配置分片字段( sharding-columns )和分片算法。

4 測(cè)試接口

修改配置文件 application-test.yml ,配置好 MySQL 數(shù)據(jù)庫(kù) 和 Redis 服務(wù) 。

啟動(dòng) Main 函數(shù):

圖片圖片

啟動(dòng)過(guò)程中,會(huì)打印 shardingsphere jdbc 日志 。

圖片圖片

啟動(dòng)成功之后,訪問(wèn) swagger ui 地址:

http://localhost:9793/shardingsphere-jdbc-server/doc.html#/home

接下來(lái),我們進(jìn)行兩個(gè)測(cè)試:新增訂單和按照訂單 ID 查詢

1、測(cè)試存儲(chǔ)訂單

圖片圖片

點(diǎn)擊發(fā)送按鈕,接口響應(yīng)成功。

圖片圖片

我們插入1 條訂單記錄、1 條訂單詳情表進(jìn)入 ds3 分片,并且 2 條訂單條目表進(jìn)入 ds3 分片的 t_ent_order_item_7 表。

2、測(cè)試存儲(chǔ)訂單

圖片圖片

參數(shù)名稱是 orderId , 參數(shù)值:609335823493160961 ,點(diǎn)擊發(fā)送按鈕,接口響應(yīng)成功 , 返回訂單信息。

圖片 圖片

責(zé)任編輯:武曉燕 來(lái)源: 勇哥Java實(shí)戰(zhàn)
相關(guān)推薦

2015-07-29 10:00:16

開(kāi)源項(xiàng)目

2025-04-07 04:00:00

教學(xué)型任務(wù)調(diào)度系統(tǒng)

2014-10-21 10:25:50

程序員

2021-03-02 14:50:57

開(kāi)源技術(shù) 項(xiàng)目

2017-11-07 11:36:57

開(kāi)源項(xiàng)目代碼

2022-06-30 07:34:46

分庫(kù)分表外賣訂單系統(tǒng)

2021-06-24 09:53:05

前端架構(gòu)開(kāi)源

2022-05-20 12:24:45

分庫(kù)分表Java依賴

2022-02-28 08:23:02

開(kāi)源項(xiàng)目重構(gòu)

2013-08-19 12:40:18

開(kāi)源項(xiàng)目

2024-07-02 08:28:17

開(kāi)源代碼社區(qū)

2017-07-19 15:19:19

數(shù)據(jù)庫(kù)DB分庫(kù)實(shí)施策略

2020-04-10 10:15:29

算法開(kāi)源Github

2022-01-04 09:01:10

開(kāi)源項(xiàng)目開(kāi)源技術(shù)

2019-01-15 10:02:06

Kubernetes開(kāi)源工具微服務(wù)

2019-04-26 13:07:14

GitHub開(kāi)源代碼倉(cāng)庫(kù)

2018-02-08 18:00:49

Spark文件測(cè)試

2024-06-24 03:00:00

2015-09-08 10:32:21

開(kāi)源項(xiàng)目選擇方式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)