Design Database
文章平均质量分 85
数据库相关
IQer_AC
这个作者很懒,什么都没留下…
展开
-
使用go语言构建区块链 Part4.事务1
事务是比特币的核心, 区块链的唯一目的是以安全可靠的方式存储交易, 因此在交易创建后没有人可以修改. 今天我们开始实现事务, 但由于这是一个相当大的主题, 我将它分成两部分: 在这一部分中, 我们将实现事务的通用机制, 在第二部分中, 我们将研究细节.此外, 由于代码的变化是巨大的, 在这里描述它们是没有意义的. 你可以在这里查看到所有的变化.虽然不容易, 但是现在终于实现交易了!地址(address). 我们现在还没有基于私钥(private key)的真实地址.原创 2023-05-24 20:28:43 · 1120 阅读 · 0 评论 -
使用go语言构建区块链 Part3.持久化与命令行接口
到目前为止, 我们已经建立了一个带有工作量证明系统的区块链, 这使得挖矿成为可能. 我们的实现越来越接近于一个功能齐全的区块链了. 但它仍然缺乏一些重要的功能. 今天我们将开始再数据库中存储区块链, 之后我们将实现一个简单的命令行接口来执行区块链的操作. 从本质上讲, 区块链是一个分布式数据库. 我们将忽略’分布式’的部分, 而专注于’数据库’的部分.下次我们将实现: 地址, 钱包和(可能会有)事务.敬请期待!LinksBitcoin Core数据存储boltdbflag。原创 2023-05-24 15:07:59 · 920 阅读 · 1 评论 -
使用go语言构建区块链 Part2.工作量证明
在上一篇文章中, 我们构建了一个非常简单的数据结构, 这是区块链数据库的本质.并且我们可以通过它们之间的链式关系来添加区块: 每个区块都链接到前一个区块.哎, 我们的区块链实现有一个重大缺陷: 向链中添加区块既容易又便捷. 区块链和比特币的关键之一是增加新的区块是一项艰难的任务. 今天我们将修复这个缺陷.原创 2023-05-24 11:25:15 · 777 阅读 · 0 评论 -
使用go语言构建区块链 Part1.基础原型
区块链技术是21世纪最具变革型的技术之一,它仍处于成长阶段, 其潜力尚未完全实现.从本质上说, 区块链是一个分布式的记账数据库.但它的独特之处在于它不是一个私有数据库,而是一个公共数据库, 也就是说, 每个使用它的人都有它的完整或部分副本.而且,只有在征得其他数据库维护者的同意的情况下, 才能添加新记录.此外, 正是区块链使加密货币和智能合约成为可能.在本系列文章中, 我们将构建一个基于简单区块链实现的简易的数字加密货币.原创 2023-05-24 09:29:35 · 1853 阅读 · 0 评论 -
构建一个简易数据库-用C语言从头写一个sqlite的克隆 0.前言
我在从头构建一个sqlite的克隆, 用c语言实现, 以便于理解, 我也将记录此过程.3.存储于内存中, 仅追加,单表的数据库。2.世界上最简单的SQL编译器和虚拟机。4.我们的首次测试用例(和bugs)简而言之, 数据库是如何工作的?1.介绍和配置交互式解释器环境。10.分裂以恶搞叶子节点。8.b树叶子节点的格式。13.分裂后更新父节点。9.二分查找及重复键。原创 2023-05-23 19:40:32 · 468 阅读 · 0 评论 -
从零实现一个数据库(DataBase) Go语言实现版 7.空闲列表: 重用页
由于我们的B树时不可变的, 每次对kv存储的更新都会在路径上创建新节点, 而不是更新当前节点, 从而使一些节点无法从最新版本访问到.我们需要从旧版本中重用这些不可访问的节点, 否则, 数据库文件将无限增长.原创 2023-05-23 19:08:36 · 647 阅读 · 0 评论 -
从零实现一个数据库(DataBase) Go语言实现版 6.持久化到磁盘
下面是更新master page的功能. 与用于读取的代码不同, 它不使用映射地址进行写入.这是因为通过mmap修改页不是原子性的. 内核可能会在中途刷新页并损坏磁盘文件, 而不跨越页边界的小的write操作则保证是原子性的.随着文件的增长, 我们可能需要扩展映射的范围. 扩展mmap范围的系统调用是mremap.不幸的是, 当通过重新映射扩展范围时. 我们可能无法保留起始地址. 我们扩展映射的方法是使用多个映射–为溢出文件范围创建一个新的映射.新映射的大小呈指数增长, 因此我们不必频繁调用mmap.原创 2023-05-23 17:47:27 · 995 阅读 · 0 评论 -
从零实现一个数据库(DataBase) Go语言实现版 5.B树实现(Part2))
紧接着上一篇进行b树的实现.原创 2023-05-23 15:20:08 · 863 阅读 · 0 评论 -
从零实现一个数据库(DataBase) Go语言实现版 4.B树实现(Part1))
本章将使用Go语言实现一个不可变地B+树.这是一个最小实现, 因此很容易理解.原创 2023-05-23 14:01:51 · 1394 阅读 · 1 评论 -
从零实现一个数据库(DataBase) Go语言实现版 3.B树: 思路
让我们从一个排好序的数组开始, 查询可以通过二分法来完成.但更新数组是O(n)的时间复杂度是我们需要解决的问题.更新一个大数组是很糟糕的, 所以我们把它分成更小的数组.假设我们将数组分成sqrt(n)个部分, 每个部分平均包含sqrt(n)个键.从叶子节点开始键插入.叶节点就是键的排序列表.将键插入到叶子中是微不足道的.但是, 插入可能导致节点大小超过页面大小.在这种情况下, 我们需要将叶子节点拆分为2个节点, 每个节点包含一半的键, 以便两个叶子节点都适应一个页大小.这是对b树的另一种直观理解.原创 2023-05-22 21:10:00 · 417 阅读 · 0 评论 -
从零实现一个数据库(DataBase) Go语言实现版 2.索引
然而, 在专门的应用中可能会使用哈希表/散列表.使用哈希表的另一个头痛的问题是大小调整操作.初始调整大小复杂度在O(n), 会导致磁盘空间和IO的突然增加.是有可能做到增量地调整哈希表的, 但这会增加复杂度.数据库索引大多数关于范围查询和点查询, 而且很容易看出范围查询只是点查询的一个超集.如果我们提取数据库索引的功能, 那么创建键值存储就很简单了.但关键是数据库系统可以建立在KV存储之上.哈希表/散列表在设计一个通用的kv存储时是首先被排除在外的.主要原因是排序-许多现实世界的应用需要分类和排序.原创 2023-05-22 20:18:33 · 538 阅读 · 0 评论 -
从零实现一个数据库(DataBase) Go语言实现版 1.文件与数据库
本章将展示简单地将数据存入文件地局限以及数据库解决地问题。原创 2023-05-22 16:00:12 · 495 阅读 · 0 评论 -
从零实现一个数据库(DataBase) Go语言实现版 0.介绍
如果我们忽视持久化的层面并且假设数据集很适合存在内存中, 快速地找到数据就是一个数据结构地问题. 持久化存在磁盘上的,用于查找数据的数据结构在数据库系统中就称为索引(indexes).而且数据库索引的大小可以超过内存的大小.这也就是说,如果你的问题适合使用内存解决, 那就是个比较容易的问题.这就是我们需要索引(indexes)的原因.任何结果都有可能.当你仅仅是简单写入文件的话, 你的数据并不能保证会持久化到磁盘上. 这对数据库是至关重要的.而且数据库在一次意外宕机后将会恢复到可用的状态.原创 2023-05-22 14:21:45 · 885 阅读 · 0 评论 -
数据库系统 数据库实现原理 硬盘存储基础 DBMS存储与查询实现框架图
文章目录磁盘结构磁盘读写时间(ms级别)RAID技术DBMS存储与查询实现的基本思想DBMS查询实现的框架示意图数据库-表-记录与磁盘块的映射关系数据库文件组织方式oracle数据库的数据组织无序文件组织有序文件组织聚簇文件组织散列文件组织oracle的数据组织数据库文件组织总结磁盘结构一个磁盘分多个盘面,每个盘面分多个磁道,每个磁道分多个扇区磁盘读写时间(ms级别)磁头启动时间,寻道...原创 2019-09-27 20:46:03 · 680 阅读 · 0 评论 -
数据库系统 关系代数 集合 关系 操作
关系代数 基本操作内容两个关系的属性数目必须相同,才能够进行并操作,这就是并相容性并相容性例子集合操作与纯关系操作集合操作,结果依然是集合,并无关系含义关系操作,得到的是满足某种关系的操作笛卡尔积选择操作投影操作θ-连接操作Θ操作也可以分解成关系操作自然连接操作带有去重的操作关系代数操作总结...原创 2019-09-27 20:23:19 · 1374 阅读 · 0 评论 -
数据库系统 关系模型 完整性
文章目录关系模型的实体完整性空值是什么意义是什么空值含义参照完整性用户自定义完整性总结:关系模型的主要内容关系模型的实体完整性关系的主码不能为空值空值是什么空值代表着:不知道,无意义的值意义是什么关系中的元组对应者现实世界相互之间可区分的一个个个体,这些个体通过主码来唯一标识:若主码为空,则出现不可标识的个体,这是不容许的.空值含义参照完整性用户自定义完整性用户可以自定...原创 2019-09-25 21:19:47 · 169 阅读 · 0 评论 -
数据库系统 关系模型 关系 候选键 主键 外键
文章目录关系的特性数学定义的关系关系的特性关系不可重复候选码/候选键一个关系中可以有多个候选码/候选键主码/主键主属性与非主属性外码/外键总结:什么是关系关系的特性列的同质性,每一列的分量来自与同一个值域数学定义的关系关系的特性每一列属性都满足第一范式,也就是属性不可再分的特性关系满足列无关性和行无关性,也就是说每条记录,和每列属性,不因为所在的位置不同而让两个关系不同关系不...原创 2019-09-25 21:01:58 · 4318 阅读 · 0 评论 -
数据库系统 内模式 外模式 两层映射 DBMS发展史及起因
数据库三个模式,两个映射两层映像分别是外模式到概念模式,概念模式到内模式。这样,外模式和内模式修改 就都不会影响对方。数据模型与模式模式决定数据如何定义,数据模式决定模式如何定义三大数据模式数据模式发展历程...原创 2019-09-21 12:19:26 · 919 阅读 · 0 评论 -
数据库系统 1 数据库及数据库管理系统DBMS概貌
原创 2019-09-21 09:21:55 · 173 阅读 · 0 评论