一个基于共享内存的内存数据库:2 设计

news2024/11/15 15:35:37

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客


        本专题:基于共享内存的内存数据库_初级代码游戏的博客-CSDN博客 

        从这里开始顺序阅读:一个基于共享内存的内存数据库:1 介绍-CSDN博客 

一、存储设计

1.1 设计图

 

1.2 基本技术指标

 

 1.3 数据类型

1.4 列定义

1.5 索引定义

1.6 数据存储

        单一的数据块,存储连续N个数值,回收连续N个数值,可再分配。目前的再分配策略为按照N分配,不同的N不能分配(即不能合并和分割)。
        字符串数据实际存储在字符串池,字符串池带索引。目前字符串池空间不可回收。
 

1.7 索引存储

        单一的索引块,存储表的名字、索引的名字和记录指针(指向数据块的连续N个数值),索引本身不存储索引列的数据。

二、并发策略

2.1 三级锁定

2.2 库可配置锁定级别


        库的锁定级别可配置,如果库配置为库锁,则所有操作都会提升为库锁,如果库配置为表锁,则记录锁请求被提升为表锁。

2.3 用户可指定锁定级别


        用户接口可指定锁定级别,系统自动选择允许的锁定级别。默认锁定级别为库的配置级别。
        例如用户指定记录锁,但库配置为表锁,则采用表锁。
 

2.4 库的锁定级别的选择

 

2.5 用户操作的锁定级别的选择

        本节讨论仅限于用户指定的锁定级别比库设定的级别更高(锁定范围更大)的情形。
        注意,指定比库设置更高(更大范围,库>表>记录)的锁定级别将导致锁定提升为独占锁,例如,对记录锁级别的库指定表锁操作将采用独占表锁,不论指定的是独占锁还是并发锁。
        应当仅在必要时指定更高的锁定级别,因为这将独占表或库,主要有两种情形适合提升锁定级别:对操作的性能要求很高(例如在一个混合了静态数据和实时数据的库里面)或者是进行维护操作。
 

2.6 使用限制

        基于某些技术上的理由,存在如下使用限制:
1    CShmBD::DropTable是库独占锁定,不能和任何操作同时进行。
2    CShmDB不支持多线程并发操作,CRecordSet可以有多个但每个都不能多线程并发操作
3    同一进程多线程锁定同一条记录可能会死锁,同一进程锁定而等待的记录锁操作会超时出错退出(非同一进程锁定没有超时设定),因此多线程访问同一张表要避免长时间锁定同一条记录。
4    不同进程可能导致死锁,死锁是数据库无法避免的难题。为了尽量减少死锁发生,要尽可能避免同时锁定两个对象。例如进程1以A表为准逐条记录查询B表的相关记录,同时进程2以B表为准逐条记录查询A表的相关记录,这样就会产生一个死锁。这种情形要么程序缓存数据避免同时打开两张表(这样程序就会变得复杂),要么约定必须以A为准查询B(这样能解决一部分问题但很难完善地约束所有相关进程)。


(未完待续)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2107234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencv轮廓近似,模板匹配

在图像处理领域,轮廓近似和模板匹配是两种非常关键的技术,它们广泛应用于计算机视觉、图像分析和图像识别等多个方面。本文将详细介绍如何使用OpenCV库进行轮廓近似和模板匹配,并给出具体的代码示例。 一、轮廓近似(Contour Appr…

使用stripe进行在线支付、退款、订阅、取消订阅功能(uniapp+h5)

stripe官网:Stripe 登录 | 登录 Stripe 管理平台 然后在首页当中打开测试模式,使用测试的公钥跟私钥进行开发 测试卡号 4242 4242 4242 4242 1234 567 在线支付 stripe的在线支付有两种,第一种就是无代码,第二中就是使用api进行自定义,一般来说推荐第二种进行开发 无…

谁还只会用OBS?多场景录制试试这四款!

很多人在录屏的时候,尤其是打游戏的朋友,第一时间想到的都是OBS,其实除了这款工具,还有很多好用的第三方录屏工具,一样可以帮助我们录制出不卡顿的高清视频。今天,我们就来对比一下市面上四款热门的录屏软件…

echarts环形图

let dataValue[{value: 30,name: 桥梁,percent: 0.25,color: rgba(248,95,94,1),radius: [75%, 80%],center: [22%, 50%],},{value: 15,name: 隧道,percent: 0.25,color: rgba(243,185,71,1),radius: [65%, 70%],center: [22%, 50%],},{value: 18,name: 路基,percent: 0.25,col…

类似antdesign悬浮按钮上浮小动画【已验证,正常运行】

以下是基于vue2的完整代码&#xff0c;习惯用vue写了&#xff0c;如果是其他框架复制div和css就行 部分代码来自我搭建的GPT4o/Claude <template><div class"progress-container"><div class"circlenav-container"><div class"…

深度学习——引言

一、机器学习的关键因素 1.1 数据 每个数据集由一 个个样本组成&#xff0c;大多情况下&#xff0c;数据遵循独立同分布。通常每个样本由一组特征属性组成。 好的数据集 { 数据样本多 正确的数据 ( g a r b a g e i n , g a r b a g e o u t ) 好的数据集 \begin{cases} 数据…

通俗易懂理解Hive四种排序

前言 Hive的四种排序包括Sort By、Order By、Distribute By和Cluster By。有关这四种排序的区别&#xff0c;在大数据面试中可能会经常被问到&#xff0c;在我们很多人的实际应用中可能最常用的就是全局排序order by&#xff0c;因此对于其他几个排序理解并不准确&#xff0c;…

ardupilot开发 --- 炸酱面 篇

我的头可不是面头捏的 奥维互动地图ovital航点文件转Mission planner航点文件 奥维互动地图ovital航点文件转Mission planner航点文件 gcj02 转 wgs84 奥维互动地图&#xff1a;https://www.ovital.com 航线1.ovjsn 转换工具&#xff1a;https://github.com/huangyangl/geo_c…

Linux之grep命令

在文本文件中过滤&#xff0c;包含指定字符串的行 – grep [选项] 字符串 文本文件...• 常用命令选项 – -v&#xff0c;取反匹配 – -i&#xff0c;忽略大小写 ]# grep root /etc/passwd #包含root的行 ]# grep -v root /etc/passwd #不包含root ]# grep ROOT…

操作系统的功能及应用

操作系统介绍 操作系统&#xff08;Operating System, OS&#xff09;是计算机系统中不可或缺的核心软件&#xff0c;它负责管理和控制计算机硬件与软件资源&#xff0c;提供用户与计算机之间的交互界面。本文将详细探讨操作系统的功能、分类及其在现代社会中的应用。 操作系统…

通过redis-operator 来部署 Redis Cluster 集群

安装 Redis Operator 首先&#xff0c;需要安装 redis-operator。可以通过 Helm 或直接应用 YAML 文件来安装。 使用 Helm 安装&#xff1a; helm repo add ot-helm https://ot-container-kit.github.io/helm-charts/ helm install redis-operator ot-helm/redis-operator --…

2024 年的 Web3 游戏:演变、趋势和市场动态

Web3 游戏行业在经历了多年的快速发展和变革之后&#xff0c;正在2024年迎来全新的阶段。这个行业从最初的边玩边赚&#xff08;Play-to-Earn, P2E&#xff09;模式出发&#xff0c;如今正在向更为平衡的“边玩边赚”模式转型。这种转型不仅解决了早期 P2E 模式下存在的可持续性…

自动驾驶真正踏出迈向“用户”的第一步:IROS24新SOTA提出个性化的实例迁移模仿学习

导读&#xff1a; 本文针对自动驾驶规划任务&#xff0c;提出了一种基于实例的迁移模仿学习方法&#xff0c;通过预先训练的微调框架从专家域迁移专业知识&#xff0c;以解决用户域数据稀缺问题。实验结果显示&#xff0c;该方法能有效捕捉用户驾驶风格并实现具有竞争力的规划性…

select、poll、epoll的原理

目录 1.IO多路复用 2.select原理 3.poll原理 4.epoll原理 5.select、poll、epoll总结 6.epoll原理详解 6.1内核收包的过程 6.2进程调度时的阻塞 6.3再来看一下内核收网络数据的过程 6.4select的原理 6.5epoll的设计原理 6.6补充 6.7总结 1.IO多路复用 IO多路复用…

数据时代的领航者:首席数据官(CDO)如何影响城市治理?

随着2023年9月的到来&#xff0c;多个中国城市包括长沙和北京相继宣布引入首席数据官&#xff08;CDO&#xff09;机制&#xff0c;这标志着国家数据管理体系进入一个新纪元。 首席数据官的设立不仅是对传统数据管理方式的重大革新&#xff0c;也是增强数据战略意识和推动数据…

托勒密世界地图:现代地形图绘制的标杆诞生于公元2世纪

关注我们 - 数字罗塞塔计划 - 今天要为大家分享一幅公元150年左右的世界地图——托勒密世界地图&#xff0c;它是由古埃及的数学家、天文学家、地理学家及占星家劳狄乌斯托勒密绘制的。托勒密著有《天文学大成》、《地理学》和《占星四书》等著作&#xff0c;其中《地理学》一书…

从校园到产业园:数字媒体人才如何无缝对接产业需求?

在当今数字化时代&#xff0c;数字媒体产业蓬勃发展&#xff0c;对专业人才的需求日益旺盛。然而&#xff0c;如何实现从校园到产业园的无缝对接&#xff0c;成为关键问题。 为了实现无缝对接&#xff0c;一方面&#xff0c;学校应加强与产业的合作。邀请行业专家走进校园授课、…

免费分享一套SpringBoot+Vue驾校(预约)管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue驾校(预约)管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue驾校(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 传统办法管理信息首先需要花费的时间比较多&…

OpenCV与Matplotlib:灰度图像

目录 读取灰度图像 代码解释 1. 导入库 2. 读取彩色图像 3. 转换为灰度图像 4. 将 BGR 图像转换为 RGB 格式 5. 创建子图并显示图像 总结&#xff1a; 整体代码 效果展示 衍生操作 1. 边缘检测 代码说明 整体代码 效果展示 2. 图像二值化 代码说明 整体代码 效…

kali——nmap的使用

目录 前言 普通nmap扫描 扫描单个目标地址 扫描多个目标地址 扫描范围目标地址 扫描目标网段 扫描众多目标地址 排除扫描 扫描指定端口 路由追踪 进阶扫描 综合扫描&#xff08;-A&#xff09; 目标网段在线主机&#xff08;-sP&#xff09; 目标主机指纹扫描&am…