zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

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

mysql多线程遍历 分析 2022 遇到 01 09
2023-09-27 14:25:42 时间

摘要:

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

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

数据结构决定算法

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

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

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

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

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

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

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

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

问题现象:

可以参考: <