shardingsphered 线程安全问题示例分析

 更新时间:2023年06月02日 10:48:54   作者:雨翔河  
这篇文章主要为大家介绍了shardingsphered 线程安全问题示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

shardingsphere

shardingsphere 版本 3.1.0 ,也是目前的最新的正式版,项目并发量很高很笨重(启动较慢),且使用了按天分表策略,在使用 shardingsphere 的过程中发现其存在分表策略的线程安全问题,会导致分表策略没有执行,直接查询的没有分表策略的逻辑表。

原因:

io.shardingsphere.core.parsing.antlr.extractor.impl.FromWhereExtractor

实现类定义

public final class FromWhereExtractor implements OptionalSQLSegmentExtractor {
    private final TableNameExtractor tableNameExtractor = new TableNameExtractor();
    private PredicateExtractor predicateSegmentExtractor;
    ...
    public Optional<FromWhereSegment> extract(final ParserRuleContext ancestorNode, final ParserRuleContext rootNode) {
        ...
        predicateSegmentExtractor = new PredicateExtractor(result.getTableAliases());
        ...
    }
    ...

这个地方 predicateSegmentExtractor 是有线程安全问题的。

并发量高的时候,predicateSegmentExtractor 成为竞争资源。

现象分析

这导致的现象是:

应用启动后分表策略不起效果,且是随机性的,假设有 20 个应用节点,应用重启之后,其中会有一个或者少量节点会出现分表策略无效,查询不到结果,再针对这个节点进行重启就会恢复正常,随机性极高。

不仅仅是我们遇到这个问题,有别的研发公司也遇到过这种问题:

https://github.com/apache/shardingsphere/issues/1967

以上就是shardingsphered 线程安全问题示例分析的详细内容,更多关于shardingsphered 线程安全的资料请关注脚本之家其它相关文章!

相关文章

  • 一步步教你写一个SpringMVC框架

    一步步教你写一个SpringMVC框架

    现在主流的Web MVC框架除了Struts这个主力外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,这篇文章主要给大家介绍了关于如何一步步写一个SpringMVC框架的相关资料,需要的朋友可以参考下
    2022-03-03
  • MyBatis一对多嵌套查询的完整实例

    MyBatis一对多嵌套查询的完整实例

    这篇文章主要给大家介绍了关于MyBatis一对多嵌套查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • mybatis 延迟加载的深入理解

    mybatis 延迟加载的深入理解

    这篇文章主要介绍了mybatis 延迟加载的深入理解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • java如何实现图片转化为数据流

    java如何实现图片转化为数据流

    这篇文章主要介绍了java如何实现图片转化为数据流,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 关于jvm的垃圾回收器以及触发full gc的场景

    关于jvm的垃圾回收器以及触发full gc的场景

    这篇文章主要介绍了关于jvm的垃圾回收器以及触发full gc的场景,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Java中的StringBuilder()常见方法详解

    Java中的StringBuilder()常见方法详解

    StringBuilder是一个可变的字符序列,此类提供一个与 StringBuffer 兼容的 API,但不保证同步,这篇文章主要介绍了StringBuilder()常见方法,需要的朋友可以参考下
    2023-09-09
  • 一文让你搞懂如何手写一个redis分布式锁

    一文让你搞懂如何手写一个redis分布式锁

    既然要搞懂Redis分布式锁,那肯定要有一个需要它的场景。高并发售票问题就是一个经典案例。本文就来利用这个场景手写一个redis分布式锁,让你彻底搞懂它
    2022-11-11
  • Java面试题冲刺第二十一天--JVM

    Java面试题冲刺第二十一天--JVM

    这篇文章主要为大家分享了最有价值的三道关于JVM的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • java门禁系统面向对象程序设计

    java门禁系统面向对象程序设计

    这篇文章主要为大家详细介绍了java门禁系统面向对象程序设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Java面向对象编程(封装/继承/多态)实例解析

    Java面向对象编程(封装/继承/多态)实例解析

    这篇文章主要介绍了Java面向对象编程(封装/继承/多态)实例解析的相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10

最新评论