3 Sharding-Sphere初體驗(yàn)

一、官方例程解讀

官方例程 raw-jdbc-nodep-example 解讀

    /**
     * Sharding類(lèi)型:
     * 1 分庫(kù)demo
     * 2 分表demo
     * 3 同時(shí)分庫(kù)和分表demo
     * 4 主從demo
     * 5 Sharding主從demo
     */

1. Demo1 分庫(kù)

  • 數(shù)據(jù)源配置
    @Override
    public DataSource getDataSource() throws SQLException {

        /**
         * 初始化ShardingRule配置類(lèi)
         */
        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();

        /**
         * 設(shè)置TableRule和ItemRule表規(guī)則
         */
        shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
        shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());

        /**
         * 設(shè)置默認(rèn)的分庫(kù)策略配置(setDefaultDatabaseShardingStrategyConfig方法是分庫(kù)方法)
         * (分庫(kù)依據(jù)是參數(shù)user_id, 分庫(kù)算法是表名最后一個(gè)后綴2取余)
         */
        shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(
                new InlineShardingStrategyConfiguration("user_id",
                        "demo_ds_${user_id % 2}"));
        /**
         * 獲取數(shù)據(jù)源對(duì)象
         */
        return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig, new HashMap<String, Object>(), new Properties());
    }

2. Demo2 分表

  • 數(shù)據(jù)源配置
    public DataSource getDataSource() throws SQLException {
        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();

        /**
         * 設(shè)置t_order和t_order_item的表規(guī)則
         */
        shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
        shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());

        /**
         * 將表t_order和t_order_item添加到綁定的表組中
         */
        shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");

        /**
         * 設(shè)置分表策略(分表依據(jù)列order_id)
         */
        shardingRuleConfig.setDefaultTableShardingStrategyConfig(
                new StandardShardingStrategyConfiguration("order_id",
                        new PreciseModuloShardingTableAlgorithm()));
        return ShardingDataSourceFactory.createDataSource(createDataSourceMap(),
                shardingRuleConfig, new HashMap<String, Object>(), new Properties());
    }

-. 分表配置

    private static TableRuleConfiguration getOrderTableRuleConfiguration() {
        TableRuleConfiguration result = new TableRuleConfiguration();

        result.setLogicTable("t_order");
        // 設(shè)置實(shí)際的數(shù)據(jù)節(jié)點(diǎn)(即哪張表耗跛,表0或者表1)
        result.setActualDataNodes("demo_ds.t_order_${[0, 1]}"); // 分表才會(huì)設(shè)置
        // 設(shè)置主鍵生成列
        result.setKeyGeneratorColumnName("order_id");
        return result;
    }
  • 運(yùn)行結(jié)果


    demo2.png

3. Demo3 同時(shí)分庫(kù)分表

  • 數(shù)據(jù)源配置
    @Override
    public DataSource getDataSource() throws SQLException {
        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();

        shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
        shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());
        shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");

        /**
         * 分庫(kù)策略配置DatabaseSharding
         */
        shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(
                new InlineShardingStrategyConfiguration("user_id",
                        "demo_ds_${user_id % 2}"));
        /**
         * 分表策略配置TableSharding
         */
        shardingRuleConfig.setDefaultTableShardingStrategyConfig(
                new StandardShardingStrategyConfiguration("order_id",
                        new PreciseModuloShardingTableAlgorithm()));

        return ShardingDataSourceFactory.createDataSource(createDataSourceMap(),
                shardingRuleConfig, new HashMap<String, Object>(), new Properties());
    }

-. 分庫(kù)分表配置

    private static TableRuleConfiguration getOrderTableRuleConfiguration() {
        TableRuleConfiguration result = new TableRuleConfiguration();

        result.setLogicTable("t_order");
        /**
         * 分表依據(jù)
         */
        result.setActualDataNodes("demo_ds_${0..1}.t_order_${[0, 1]}");
        result.setKeyGeneratorColumnName("order_id");
        return result;
    }

    private static TableRuleConfiguration getOrderItemTableRuleConfiguration() {
        TableRuleConfiguration result = new TableRuleConfiguration();

        result.setLogicTable("t_order_item");
        /**
         * 分表依據(jù)
         */
        result.setActualDataNodes("demo_ds_${0..1}.t_order_item_${[0, 1]}");
        return result;
    }
  • 運(yùn)行結(jié)果:同上

4. Demo4 主從

-. 數(shù)據(jù)源配置

    @Override
    public DataSource getDataSource() throws SQLException {
        MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration();

        /**
         * 設(shè)置主從配置名稱
         */
        masterSlaveRuleConfig.setName("demo_ds_master_slave");

        /**
         * 設(shè)置主數(shù)據(jù)源名稱
         */
        masterSlaveRuleConfig.setMasterDataSourceName("demo_ds_master");

        /**
         * 設(shè)置從數(shù)據(jù)源名稱
         */
        masterSlaveRuleConfig.setSlaveDataSourceNames(Arrays.asList("demo_ds_slave_0",
                "demo_ds_slave_1"));
        return MasterSlaveDataSourceFactory.createDataSource(createDataSourceMap(),
                masterSlaveRuleConfig, new ConcurrentHashMap<String, Object>(), new Properties());
    }

-. 分庫(kù)分表配置 (不需要)

5. Demo5 主從數(shù)據(jù)庫(kù)且分庫(kù)分表

-. 數(shù)據(jù)源配置

    public DataSource getDataSource() throws SQLException {
        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();

        /**
         * 添加分庫(kù)分表規(guī)則
         */
        shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
        shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());
        shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");

        /**
         * 配置默認(rèn)的分庫(kù)策略
         */
        shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(
                new StandardShardingStrategyConfiguration("user_id",
                        new PreciseModuloShardingDatabaseAlgorithm()));
        /**
         * 配置默認(rèn)的分表策略
         */
        shardingRuleConfig.setDefaultTableShardingStrategyConfig(
                new StandardShardingStrategyConfiguration("order_id",
                        new PreciseModuloShardingTableAlgorithm()));
        /**
         * 配置主從數(shù)據(jù)庫(kù)規(guī)則
         */
        shardingRuleConfig.setMasterSlaveRuleConfigs(getMasterSlaveRuleConfigurations());

        return ShardingDataSourceFactory.createDataSource(createDataSourceMap(),
                shardingRuleConfig, new HashMap<String, Object>(), new Properties());
    }

-. 主從數(shù)據(jù)庫(kù)配置

    /**
     * 設(shè)置主從數(shù)據(jù)庫(kù)規(guī)則
     *
     * @return
     */
    private static List<MasterSlaveRuleConfiguration> getMasterSlaveRuleConfigurations() {

        MasterSlaveRuleConfiguration masterSlaveRuleConfig1 = new MasterSlaveRuleConfiguration();
        masterSlaveRuleConfig1.setName("ds_0");
        masterSlaveRuleConfig1.setMasterDataSourceName("demo_ds_master_0");
        masterSlaveRuleConfig1.setSlaveDataSourceNames(Arrays.asList("demo_ds_master_0_slave_0",
                "demo_ds_master_0_slave_1"));

        MasterSlaveRuleConfiguration masterSlaveRuleConfig2 = new MasterSlaveRuleConfiguration();
        masterSlaveRuleConfig2.setName("ds_1");
        masterSlaveRuleConfig2.setMasterDataSourceName("demo_ds_master_1");
        masterSlaveRuleConfig2.setSlaveDataSourceNames(Arrays.asList("demo_ds_master_1_slave_0", "demo_ds_master_1_slave_1"));

        return Lists.newArrayList(masterSlaveRuleConfig1, masterSlaveRuleConfig2);
    }

-. 分庫(kù)配置 (數(shù)據(jù)源配置中已經(jīng)配置)

        /**
         * 添加分表規(guī)則
         */
        shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
        shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());
        shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");


        /**
         * 配置默認(rèn)的分表策略
         */
        shardingRuleConfig.setDefaultTableShardingStrategyConfig(
                new StandardShardingStrategyConfiguration("order_id",
                        new PreciseModuloShardingTableAlgorithm()));

        /**
         * 配置默認(rèn)的分庫(kù)策略
         */
        shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(
                new StandardShardingStrategyConfiguration("user_id",
                        new PreciseModuloShardingDatabaseAlgorithm()));

-. 分表配置

    private static TableRuleConfiguration getOrderTableRuleConfiguration() {
        TableRuleConfiguration result = new TableRuleConfiguration();

        result.setLogicTable("t_order");

        result.setActualDataNodes("ds_${0..1}.t_order_${[0, 1]}");
        result.setKeyGeneratorColumnName("order_id");
        return result;
    }
    
    private static TableRuleConfiguration getOrderItemTableRuleConfiguration() {
        TableRuleConfiguration result = new TableRuleConfiguration();

        result.setLogicTable("t_order_item");
        result.setActualDataNodes("ds_${0..1}.t_order_item_${[0, 1]}");
        return result;
    }

感謝你的閱讀!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末苹粟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子跃闹,更是在濱河造成了極大的恐慌嵌削,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件望艺,死亡現(xiàn)場(chǎng)離奇詭異苛秕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)找默,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)艇劫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人惩激,你說(shuō)我怎么就攤上這事店煞。” “怎么了风钻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵顷蟀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我魄咕,道長(zhǎng)衩椒,這世上最難降的妖魔是什么蚌父? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任哮兰,我火速辦了婚禮,結(jié)果婚禮上苟弛,老公的妹妹穿的比我還像新娘喝滞。我一直安慰自己,他們只是感情好膏秫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布右遭。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窘哈。 梳的紋絲不亂的頭發(fā)上吹榴,一...
    開(kāi)封第一講書(shū)人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音滚婉,去河邊找鬼图筹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛让腹,可吹牛的內(nèi)容都是我干的远剩。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼骇窍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瓜晤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起腹纳,我...
    開(kāi)封第一講書(shū)人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤痢掠,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嘲恍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體志群,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蛔钙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锌云。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吁脱,死狀恐怖桑涎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情兼贡,我是刑警寧澤攻冷,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站遍希,受9級(jí)特大地震影響等曼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凿蒜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一禁谦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧废封,春花似錦州泊、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)力喷。三九已至,卻和暖如春演训,著一層夾襖步出監(jiān)牢的瞬間弟孟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工样悟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留披蕉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓乌奇,卻偏偏與公主長(zhǎng)得像没讲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子礁苗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說(shuō)明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí)爬凑,會(huì)觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 5,259評(píng)論 0 9
  • 1试伙、引言 數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程中表嘁信、字段等的命名規(guī)范也算是設(shè)計(jì)規(guī)范的一部分,不過(guò)設(shè)計(jì)規(guī)范更多的是為了確保數(shù)據(jù)庫(kù)設(shè)計(jì)的合理...
    SnowflakeCloud閱讀 40,966評(píng)論 0 48
  • 第三章 數(shù)據(jù)庫(kù)系統(tǒng) 3.1 數(shù)據(jù)庫(kù)管理系統(tǒng)的類(lèi)型 通常有多個(gè)分類(lèi)標(biāo)準(zhǔn)疏叨。如按數(shù)據(jù)模型分類(lèi)潘靖、按用戶數(shù)分類(lèi)、按數(shù)據(jù)庫(kù)分布...
    步積閱讀 2,694評(píng)論 0 7
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,934評(píng)論 6 13
  • 諾兒一天中最享受的時(shí)光就是睡前淋浴蚤蔓,這對(duì)她來(lái)說(shuō)是個(gè)驚人的發(fā)現(xiàn)卦溢。 每每自己浸潤(rùn)在暖暖的熱水中,被水流包圍著的感覺(jué)秀又,讓...
    一枝閑梅閱讀 217評(píng)論 0 2