首页 > 其他分享 >数据结构的基线和更新

数据结构的基线和更新

时间:2023-06-15 14:01:25浏览次数:46  
标签:数据结构 更新 SQLSession 基线 内容 复制 拷贝 序列化


问题

SQLSession 是一个非常大的内存结构,一个分布式执行的 Query 中,SQLSession 要被复制/序列化多次,复制开销非常大。如果有机会再来一遍,如何设计 SQLSession 才能避免这种开销呢?

思路

下面提出一种思路:

  1. 对于不变、可共享的数据,设计成只读结构,无需拷贝/序列化,支持多线程并发读。
  2. 对于可变内容,必须拷贝,又分成两部分,一部分是基线内容,一部分是可更新内容。
  • 基线内容支持 memcpy 直接拷贝来做序列化
  • 为了支持 memcpy 直接拷贝,要求基线部分数据结构都是 plain old data(POD
  • 可更新内容参与标准 deep_copy 过程
  • 可更新内容不参与序列化

设计

按照上面的思想设计,SQLSession 是一个容器:

class SQLSession {
public:
	SQLSessionSharable *shared_;
	SQLSessionMemCopiableVariants mem_copiable_variants_; // 如 char[1024]
	SQLSessionDeepCopiableVariants deep_copiable_variants_; // 如 vector
public:
	DEF_SERIALIZE(); // 跨机复制,序列化所有数据
	DEF_SHARE_CLONE(SQLSession); // 本机复制, 共享不变数据, 复制可变数据
private:
	Allocator allocator_;
};


标签:数据结构,更新,SQLSession,基线,内容,复制,拷贝,序列化
From: https://blog.51cto.com/u_16162111/6486739

相关文章

  • 【数据结构】部分易考知识点回顾
    期末实验考试一共线性表、树和查找、图、排序四道题。据说需要重点复习二叉树的遍历与哈希表。目前还没写完,龟速更新中。。。线性表&栈&队列顺序栈表达式求值核心逻辑核心算法是一个循环,每次读入一个元素:可能是一个数或一个符号(运算符、左右括号和结束符)括号包着的是一......
  • MONAI版本更新到 0.9 啦,看看有什么新功能
    MONAI更新到0.9版本了,你用的是多少呢?我们来看看这次有什么重要更新。MONAIBundle:MONAI捆绑包Objectdetectioninmedicalimages:医学图像中的对象检测SwinTransformersfor3Dmedicalimageanalysis:用于3D医学图像分析的SwinTransformersNewinteractivesegmentationc......
  • MONAI 叒叒叒更新了(1.0版本),这次在分割,联邦学习,病理图像,MRI重建上有动作
    MONAI此次更新大部分基于MONAIBundle。在分割模块,新增了一个Auto3DSegapp,将数据处理,模型选择,训练和评估等集合在一起。此外还提供了联邦学习,为数字病理图像新增了MetaTensor,提供更多元数据属性。在MRI数据重建模块,也新增了一些功能。接下来,具体了解一下,有没有你感兴趣的内容~......
  • python基础知识——内置数据结构(集合)
    python中的set是指一系列无序元素的集合,其中的元素都是相异的,常见的操作包括集合的并集,交集和补集等操作。1、set的创建格式set_name={value1,value2,...}创建空的集合set_name=set()注意:在创建空的集合的时候不能使用set_name={}这样创建出来的是字典。例如animals......
  • 挑战数据结构和算法面试题——最大间隔
    分析:本题首先需要理解清楚最大间隔的最小:最初的间隔为:[1,1,4,1],此时最大间隔为4删除2后的间隔为:[2,4,1],此时最大间隔为4删除3后的间隔为:[1,5,1],此时最大间隔为5删除7后的间隔为:[1,1,5],此时最大间隔为5在删除元素后的间隔为:[4,5,5],最小值为:4方法:intget_min_max_margin(int*a,constintn){......
  • 挑战数据结构和算法——栈的push、pop序列
    题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。问题分析:本题考查栈的基本操作,栈是一种“先进后出”的数据结构。判断一个序列是否是栈的pop序列是一种常见的问题,可以通过模拟push和pop的过程,push和pop总是成对出现的,如:方法:#definepush1#def......
  • 【数据结构和算法面试题】跳台阶问题
    题目来源“数据结构与算法面试题80道”。问题分析:假设为跳台阶的总跳法,当时,;当时,;当时,如果先跳1级台阶,有种方法,如果先跳2级台阶,有种方法,依次类推,可以得到下面的递推公式:方法:intget_kind(intn){ if(n<=0)return0; intresult; int*cal=(int*)malloc(sizeof(int)*n);......
  • 挑战数据结构和算法——整数的二进制表示中1的个数
    题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。问题分析:本题涉及到二进制的处理,在本题使用到&操作和>>操作。方法:intget_num(intn){intnum=0;if(n<0){num+=1;n=n*(-1);}while(n!=0){......
  • 【数据结构与算法面试题】二叉树节点的最大距离
    题目来源“数据结构与算法面试题80道”。问题分析:涉及的知识点是二叉树的遍历,遍历的方法主要有:先序遍历中序遍历后序遍历层次遍历在本题中,使用先序遍历的方法。方法:voidm_length(BSTreeNode*root,int*length,int*max_length){if(NULL==root||(NULL==root......
  • 数据结构和算法——旋转打印链表
    1、问题描述输入参数nn为正整数,如输入n=5n=5,则按行打印如下的数字:2、问题的理解这个问题是将数字1…n21…n2按照一圈一圈的方式......