天天看點

ShardingSphere Proxy 5.x 自定義分片政策 執行個體 DemoShardingSphere Proxy 5.x 實作 自定義分片政策

ShardingSphere Proxy 5.x 實作 自定義分片政策

      在ShardingProxy 5.x版本和之前4.x版本的自定義分片政策寫法不一樣了,4.x的網上還能找到例子,但是5.x的我找了很久 也沒有比較詳細的例子,花了半天搞了一下 寫出來給大家看看 

第一步  官網下載下傳sharding proxy最新版本5.0.0Beta

      下載下傳自己找去哈 直接baidu shardingsphere進去官網下載下傳 裡面有 找到5.0的proxy

      修改兩個配置檔案如下

     1.2. server.yaml

ShardingSphere Proxy 5.x 自定義分片政策 執行個體 DemoShardingSphere Proxy 5.x 實作 自定義分片政策

authentication 是虛拟資料庫的賬号密碼 端口是3307(不是3306哈) ws_share是虛拟資料庫名稱

props 自行配置 

2.config-sharding.yaml

ShardingSphere Proxy 5.x 自定義分片政策 執行個體 DemoShardingSphere Proxy 5.x 實作 自定義分片政策
ShardingSphere Proxy 5.x 自定義分片政策 執行個體 DemoShardingSphere Proxy 5.x 實作 自定義分片政策

userss是資料庫表名稱字首 資料庫的真實結構是ws_share1 庫和ws_share2 庫 每個庫中5個表

userss_0 -> userss_4

schemaName 虛拟資料庫名稱 跟server配置裡的一緻 

dataSources  資料源 有幾個配置幾個

rules 唯一的重點就是shardingAlogorithms處 的userss_inline 本來是要寫表達式的 但是我們要自定義對吧 可以看到我之前注釋的表達式  type修改為自定義的type值(HIM_USER)這個值是自定義的下面會見到  proxy就是根據這個type找到我們寫的class

資料庫的配置  我沒改哈 跟表的一樣隻需要改下 type值就好了 自定義裡我大概寫了下

還有一步就是把proxy項目lib中shardingsphere開頭的jar包拷貝出來(因為4.0的包裡面沒有我們需要的類  5.0的包maven庫我沒找到) 一會自己建立的項目需要用到 可能不需要這麼多 但是懶得找了 就都拷貝出來吧

第二步 建立自己的java項目 實作自定義分片

          引入第一步 從proxy拷貝出來的jar包

          建立一個類 實作一下接口StandardShardingAlgorithm

ShardingSphere Proxy 5.x 自定義分片政策 執行個體 DemoShardingSphere Proxy 5.x 實作 自定義分片政策
ShardingSphere Proxy 5.x 自定義分片政策 執行個體 DemoShardingSphere Proxy 5.x 實作 自定義分片政策

第一張圖就是精确分片了 記錄的插入 還有 精确的查詢 比如= 或者 in 都會進入這個方法

這裡表我是根據id % 5 分的 庫根據id % 2 分的 跟之前的配置聯系起來看就明白了

沒啥好講的代碼很簡單

寫完代碼還有一步 就是

ShardingSphere Proxy 5.x 自定義分片政策 執行個體 DemoShardingSphere Proxy 5.x 實作 自定義分片政策

 在resources 下建立META-INF/services  再在裡面建立一個名為org.apache.shardingsphere.sharding.spi.ShardingAlgorithm的檔案 檔案内容就是自定義類的全限定名我的這個就是 com.NewHimShardingAlgorithm(隻需要有這些就夠了)

然後打成jar包

第三步 啟動檢視

       将打好的自定義jar包 放入proxy的lib目錄下 啟動proxy  然後用Navicat或者啥連接配接proxy虛拟的資料庫  連接配接資訊 你的proxy在哪裡啟動的ip就是啥(連接配接資訊不是真實的ip哈 是proxy所在的伺服器的ip) 端口是3307  賬号密碼 看server配置檔案  

      這裡有個問題 navicat的話 連接配接虛拟資料庫 高版本的貌似不行 12.0左右的navicat才可以 高版本的要麼打不開 要麼看到的庫不對