search
HomeJavajavaTutorialWhat types of ShardingSphere's routing engines are there in Java development?

    ShardingSphere的路由引擎类型

    本篇文章源码基于4.0.1版本

    ShardingSphere在路由流程过程中,根据不同类型的SQL会现在不同的路由引擎,而ShardingSphere支持的路由规则也很多了,包括广播(broadcast)路由、混合(complex)路由、默认数据库(defaultdb)路由、无效(ignore)路由、标准(standard)路由以及单播(unicast)路由等等,那么具体这些路由规则对应的是什么路由引擎呢?今天我们就聊聊这个。

    路由引擎类型

    RoutingEngineFactory 用来创建路由引擎的实例,对应的是它的newInstance()方法,根据Sql语句SQLStatement对象的类型选择不同的路由引擎,有

    全库广播路由引擎DatabaseBroadcastRoutingEngine、

    全库表广播路由引擎TableBroadcastRoutingEngine、

    无效路由引擎IgnoreRoutingEngine、

    默认数据库路由引擎DefaultDatabaseRoutingEngine(对默认的数据库进行路由)、

    单播路由引擎UnicastRoutingEngine(单播路由只需要在任何数据库的任何表中获取就可以,相当于获取表中公有信息)、

    数据源组的广播路由引擎DataSourceGroupBroadcastRoutingEngine、

    数据库主库实例的广播路由引擎MasterInstanceBroadcastRoutingEngine(这个就是针对主库进行的操作,比如一些授权的SQL语句)

    笛卡尔路由引擎CartesianRoutingEngine、

    混合路由引擎ComplexRoutingEngine、

    标准路由引擎StandardRoutingEngine

    标准路由

    标准路由是ShardingSphere推荐使用的一种分片路由策略,在进行分片表只有一个或者分片表是绑定关系,这个绑定关系是在配置文件中定义的,比如如下配置:

    shardingRule:
      bindingTables: 
         table1,table2

    这个配置文件会解析成BindingTableRule集合,在进行判断绑定关系的时候根据逻辑表名获取BindingTableRule对象,判断是否在集合中,如果有就表明存在绑定关系

    路由逻辑

    路由逻辑在StandardRoutingEngine的route()中体现,具体逻辑是分两步走,先获取数据节点,在生成路由结果,获取路由接点对应StandardRoutingEngine的getDataNodes()方法:

        private Collection<DataNode> getDataNodes(final TableRule tableRule) {
            if (isRoutingByHint(tableRule)) {
                return routeByHint(tableRule);
            }
            if (isRoutingByShardingConditions(tableRule)) {
                return routeByShardingConditions(tableRule);
            }
            return routeByMixedConditions(tableRule);
        }
    • 如果是基于Hint的路由,具体就判断分片策略是否为HintShardingStrategy对象,调用routeByHint()方法

    • 如果是分片条件的路由,调用isRoutingByShardingConditions()方法

    • 否则就调用复合条件的路由

    这三种情况都会调用route0()方法,先进行数据源的路由,再进行表的路由,生成数据节点

    The above is the detailed content of What types of ShardingSphere's routing engines are there in Java development?. For more information, please follow other related articles on the PHP Chinese website!

    Statement
    This article is reproduced at:亿速云. If there is any infringement, please contact admin@php.cn delete
    How do I use Maven or Gradle for advanced Java project management, build automation, and dependency resolution?How do I use Maven or Gradle for advanced Java project management, build automation, and dependency resolution?Mar 17, 2025 pm 05:46 PM

    The article discusses using Maven and Gradle for Java project management, build automation, and dependency resolution, comparing their approaches and optimization strategies.

    How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?Mar 17, 2025 pm 05:45 PM

    The article discusses creating and using custom Java libraries (JAR files) with proper versioning and dependency management, using tools like Maven and Gradle.

    How do I implement multi-level caching in Java applications using libraries like Caffeine or Guava Cache?How do I implement multi-level caching in Java applications using libraries like Caffeine or Guava Cache?Mar 17, 2025 pm 05:44 PM

    The article discusses implementing multi-level caching in Java using Caffeine and Guava Cache to enhance application performance. It covers setup, integration, and performance benefits, along with configuration and eviction policy management best pra

    How can I use JPA (Java Persistence API) for object-relational mapping with advanced features like caching and lazy loading?How can I use JPA (Java Persistence API) for object-relational mapping with advanced features like caching and lazy loading?Mar 17, 2025 pm 05:43 PM

    The article discusses using JPA for object-relational mapping with advanced features like caching and lazy loading. It covers setup, entity mapping, and best practices for optimizing performance while highlighting potential pitfalls.[159 characters]

    How does Java's classloading mechanism work, including different classloaders and their delegation models?How does Java's classloading mechanism work, including different classloaders and their delegation models?Mar 17, 2025 pm 05:35 PM

    Java's classloading involves loading, linking, and initializing classes using a hierarchical system with Bootstrap, Extension, and Application classloaders. The parent delegation model ensures core classes are loaded first, affecting custom class loa

    See all articles

    Hot AI Tools

    Undresser.AI Undress

    Undresser.AI Undress

    AI-powered app for creating realistic nude photos

    AI Clothes Remover

    AI Clothes Remover

    Online AI tool for removing clothes from photos.

    Undress AI Tool

    Undress AI Tool

    Undress images for free

    Clothoff.io

    Clothoff.io

    AI clothes remover

    AI Hentai Generator

    AI Hentai Generator

    Generate AI Hentai for free.

    Hot Article

    R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
    4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Best Graphic Settings
    4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. How to Fix Audio if You Can't Hear Anyone
    4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: How To Unlock Everything In MyRise
    1 months agoBy尊渡假赌尊渡假赌尊渡假赌

    Hot Tools

    SublimeText3 Chinese version

    SublimeText3 Chinese version

    Chinese version, very easy to use

    MantisBT

    MantisBT

    Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

    PhpStorm Mac version

    PhpStorm Mac version

    The latest (2018.2.1) professional PHP integrated development tool

    WebStorm Mac version

    WebStorm Mac version

    Useful JavaScript development tools

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    Powerful PHP integrated development environment