15-721 chapter2 内存数据库

news2025/2/23 20:20:22

Background

随着时代的发展,DRAM可以容纳足够的便宜,容量也变大了。对于数据库来说,数据完全可以fit in memory,但同时面向disk的数据库架构不能很好的发挥这个特性

这张图是disk database的cpu instruction cost

 想buffer pool和logging这些开销完成可以在memory database中大幅度的下降

内存数据库的结构

存储结构

Index

同时index在内存中重建也很快,这样避免logging的额外开销。但是同时因为B+树没能利用好cache(现代cache和memory速度差异越来越大) ,性能提升也不是很大。

WAL

利用批量提交日志,同时也没有什么dirty page的概念,所以可以避免一些额外的开销比如track LSN

 

BottleNeck

disk的主要瓶颈是磁盘IO,那么内存数据库的瓶颈就多元化了。

并发控制 

一个原子的锁操作,就是如果相等的话,就设置为new value,如果不等的话,就不设置,返回值bool代表成没成功。

CAS(Compare and Swap)是一种在并发编程中用于确保原子性操作的技术,它可以避免多线程同时对同一数据进行修改而导致的数据不一致问题。

内存数据库通常使用CAS来实现乐观锁。因为内存数据库所有的数据都保存在内存中,读写速度非常快,可以快速地进行CAS操作。而且内存数据库通常不需要持久化数据到磁盘,所以也无需考虑磁盘I/O的开销。

相比之下,磁盘数据库的读写速度较慢,很难保证CAS操作的原子性。此外,磁盘数据库需要频繁进行磁盘I/O操作,而磁盘I/O的速度较慢,会影响数据库的性能。

因此,在磁盘数据库中,通常会采用其他方式来实现并发控制,如悲观锁、行级锁等。这些方法可以确保并发访问时数据的一致性,但可能会带来一定的性能开销

 2PL

二阶段锁有严格二阶段锁,就是为了保障一致性,在事务commit和abort阶段才进入锁shrinking阶段。

 两者都要可能死锁,要采取一些额外操作来监测,如背景线程,或者等待,自杀,杀别的事务

TimeStamp

就是每个record记录一个读写时间戳,然后read的话,看看是不是比写时间大,不然就 读到以前的数据。write的话,看看是不是比读写的时间戳大,如果不是的话,就过去的影响未来,应该abort.

OCC 

有三个阶段,复制数据到本地操作(一个额外的负担,所以occ性能不会太好,即便是理想冲突少的情况,然后如果大量冲突的极端情况下,会至少有一个提交,可能会性能不是那么难看),然后验证是否符合提交条件,然后才是写回,提交。更新record的时间戳。

 参考资料:

学习笔记:Staring into the Abyss - 知乎论文中文翻译

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

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

相关文章

使用PyG(PyTorch Geometric)实现基于图卷积神经网络(GCN)的节点分类任务

文章目录基本介绍PyTorch Geometric图卷积神经网络GCN节点分类任务实现Cora数据集搭建GCN模型训练与测试迭代并输出完整代码基本介绍 PyTorch Geometric PyG(PyTorch Geometric)是一个基于PyTorch的库,可以轻松编写和训练图神经网络&#x…

ChatGPT,开启人机交互新篇章

ChatGPT在世界掀起了生成式AI的热潮,2个月实现月活用户过亿,是人类有史以来突破1亿人用户最快的消费端互联网产品,打破了Tiktok9个月破亿用户的纪录。不少专家将其视为第四次工业革命,资本市场也贡献大量涨停。当第一波的热情消退…

Android 7.1 Toast修复之终极篇,进程不奔溃(包含apk和兼容外来dex插件)

修复android 7.1 Toast的篇章: 常规app通过ams lancet 字节编码处理:Android Lancet Aop 字节编码修复7.1系统Toast问题(WindowManager$BadTokenException)多渠道游戏app兼容性处理:Android 7.1 Toast修复之多渠道包动态使用Booster或者Lancet plugin …

在外web浏览器远程访问jupyter notebook服务器【内网穿透】

文章目录前言视频教程1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口转载自远控源码文章:公网远程访问jupyter notebook【cpolar内网穿透】 前言 Jupyter Notebook,它是一个交…

未来城市的微小单元:滴滴即将量产无人车

汽车诞生之后就一直作为除了家庭与公司之外的「第三空间」存在,技术的脚步从未停止过开发汽车的更多可能。尤其无人驾驶技术的出现,进一步解放了驾驶者,也让人们对于这一能够自主移动的第三空间充满了想象。作为未来城市的微小组成单元&#…

( “树” 之 DFS) 226. 翻转二叉树 ——【Leetcode每日一题】

226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root [2,1,3] 输出:[…

ThreadLocal源码分析及内存泄漏

ThreadLocal原理分析及内存泄漏ThreadLocal的使用ThreadLocal原理set方法解析replaceStaleEntry方法解析expungeStaleEntry方法解析cleanSomeSlots方法解析case 1: 向前有脏数据,向后找到可覆盖的Entrycase 2: 向前有脏数据,向后未找到可覆盖的Entrycase…

吴恩达机器学习--线性回归

文章目录前言一、单变量线性回归1.导入必要的库2.读取数据3.绘制散点图4.划分数据5.定义模型函数6.定义损失函数7.求权重向量w7.1 梯度下降函数7.2 最小二乘法8.训练模型9.绘制预测曲线10.试试正则化11.绘制预测曲线12.试试sklearn库二、多变量线性回归1.导入库2.读取数据3.划分…

掌握高效绘制地图的利器——LeafletJs

文章目录前言一、leafletJs是什么?二、快速入门1、安装2、快速入门三、进阶学习1、Map 控件2、Marker 标记3、Popup 弹出窗口4、图层四、项目实战封装文件4.1 基础点位图4.2 行驶轨迹图前言 GIS 作为获取、存储、分析和管理地理空间数据的重要工具,用 G…

数据结构与算法一览(树、图、排序算法、搜索算法等)- Review

算法基础简介 - OI Wiki (oi-wiki.org) 文章目录1. 数据结构介绍1.1 什么是数据结构1.2 数据结构分类2. 链表、栈、队列:略3. 哈希表:略4. 树4.1 二叉树4.2 B 树与 B 树4.3 哈夫曼(霍夫曼)树:Huffman Tree4.4 线段树&a…

编辑文件/文件夹权限 - Win系统

前言 我们经常会遇到由于权限不够无法删除文件/文件夹的情况,解决方案一般是编辑文件/文件夹的权限,使当前账户拥有文件的完全控制权限,然后再进行删除,下文介绍操作步骤。 修改权限 查看用户权限 右键文件/文件夹,…

(函数指针) 指向函数的指针

函数指针- 指向函数的指针函数指针的声明和使用通过函数指针调用函数函数指针做参数函数指针数组函数指针的声明和使用 函数指针的声明格式: 返回值类型 (*函数指针名)(参数列表); 其中: *函数指针名 表示函数指针的名称返回值类型 则表示该指针所指向…

【Kubernetes】StatefulSet对象详解

文章目录简介1. StatefulSet对象的概述、作用及优点1.1 对比Deployment对象和StatefulSet对象1.2 以下是比较Deployment对象和StatefulSet对象的优缺点:2. StatefulSet对象的基础知识2.1 StatefulSet对象的定义2.1.1 下表为StatefulSet对象的定义及其属性&#xff1…

上岸川大网安院

一些感慨 一年多没写过啥玩意了,因为考研去了嘿嘿。拟录取名单已出,经历一年多的考研之路也可以顺利打上句号了。 我的初试成绩是380,政治65,英语81,数学119,专业课115。 回顾这一路,考研似乎也…

分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测

分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测 目录分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测分类效果基本介绍模型描述程序设计参考资料分类效果 基本介绍 MATLAB实现CNN-BiLSTM-Attention多输入分类预测,CNN-BiLSTM结合注意力机制多输…

Vue3使用Vant组件库避坑总结

文章目录前言一、问题二、解决方法三、问题出现原因总结经验教训前言 本片文章主要写了,Vue3开发时运用Vant UI库的一些避坑点。让有问题的小伙伴可以快速了解是为什么。也是给自己做一个记录。 一、问题 vue3版本使用vant失败,具体是在使用组件时失效…

IPBX系统快速部署和Freeswitch 1.10.7自动安装

IPBX系统部署文档 IPPBX系统 1.10.7版本Freeswitch ,手机互联互通,SIP协议,分机互相拨打免费通话清晰,支持wifi或4G网络互相拨打电话,可以对接OLT设备,系统可以部署到本地物理机,也可以部署到阿…

工程质量之研发过程管理需要关注的点

一、背景 作为程序猿,工程质量是我们逃不开的一个话题,工程质量高带来的好处多多,我在写这篇文章的时候问了一下CHATGPT,就当娱乐一下,以下是ChatGPT的回答: 1、提高产品或服务的可靠性和稳定性。高质量的系…

光时域反射仪那个品牌的好用

光时域反射仪 哪个品牌好用 光时域反射仪要怎么选到合适自己的,这些问题 可能一直在困扰这一线的工作人员,下面小编就为大家一一解答下 首先光时域域反射仪是一款检测光纤线路的损耗 长度 以及 事件点的一款设备,在诊断 光纤线路 故障点的情…

从零开始学架构——CAP理论

CAP定理 CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer’s theorem),是加州大学伯克利分校的计算机科学家埃里克布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想。2002 年&…