• 2022-09-01 mysql/stonedb-多线程并行遍历元组遇到的问题分析


    摘要:

    此前的文章中介绍了使用多核cpu去分子集的访问元组并解析数据,以提升访问性能的一般性思想。但是在工程实践中遇到了很多现实性的问题。

    本文对遇到的问题做追踪。

    数据结构决定算法

    采用何种数据结构,决定了所能执行的操作。或者说,就是在设计程序时的数据模型,甚至于说是数学模型,决定了其上的操作。

    重提这句话是目的, 在于说明做多线程并行时,困难点不在于线程的任务的包装,而在于更底层的模块中包含的数据,这些数据被封装在不同的类之后,模块的抽象级别和内聚程度。

    这决定了在物理存储引擎之上的逻辑层,被限制到了何种程度,以及以何种粒度来使用物理引擎的数据结构。

    依赖倒置: 下层决定了上层的逻辑,而非上层决定了下层的逻辑

    设计模式的这个原则,目的首先是为了从横向对功能进行分解,其实也很好理解,更下层面临更多的要处理的细节,给上层提供的接口,必然是本层抽象之后的。必须首先对更底层的进行建模,然后逐层抽象,如果直接由上层的逻辑来决定下层模块的内部逻辑,表面上看起来符合问题分解和分治原则,但是现实情况是更上层由于受业务需求影响更大,导致承载的需求变动距离,架构设计层面更多考虑灵活性,这种灵活对于底层的数据模型而言是灾难性的。难以想象由于逻辑层的需求调整,导致物理层的存储实现方式的修改。

    在理解了一些设计的常识之后,就可以理解下面所面临的困境了。

    直接修改为多线程访问不同的元组子集所产生的问题:

    一. 多线程切换后, 出现上一次本线程加载的pack数据无法访问,导致需要重新加载

    问题现象:

    可以参考: <

  • 相关阅读:
    Springboot学习笔记——1
    LeetCode-1752. 检查数组是否经排序和轮转得到【数组】
    知识蒸馏方法汇总
    UDP 的报文结构
    灯光秀如何打造夜间经济新增长点
    Python文件操作
    Python类变量和实例变量(类属性和实例属性)
    EasyUI动态加载组件
    SwiftUI SQLite教程之了解如何在 SwiftUI 中使用 SQLite 数据库并执行 CRUD 操作(教程含源码)
    mysql中的字段如何选择合适的数据类型呢?
  • 原文地址:https://blog.csdn.net/adofsauron/article/details/126653849