DBDB: 一个简单的key/value数据库(一)

编译自:http://www.aosabook.org/en/500L/dbdb-dog-bed-database.html 作者:Taavi Burns 翻译:鸿 如有翻译问题或建议,请公众号留言

导论 DBDB(Dog Bed Database)是基于Python实现的key/value数据库。 它将key值与value值关联,并将该关联存储在磁盘上方便检索。DBDB可以在服务器崩溃或者发生错误的情况下保存数据,并且也避免了所有数据都保存在内存中,因此它可以存储比服务器内存更多的数据。

DBDB解决的三个问题 如果您的文件系统空间不足,会发生什么情况? 如果服务器在保存数据时死机会发生什么? 如果你的数据大小超过可用内存呢?

DBDB的特点 数据库的特点可以用ACID来描述:原子性,一致性,隔离性和持久性。DBDB中的数据更新具有原子性和持久性。但是DBDB不提供一致性保证,因为它没有对存储的数据施加限制。同样的,隔离性也没有实现。当然,应用程序可以使用属于它自己的一致性保证,但隔离性则需要专门的事务管理器。除此以外,还有其它的问题存在。例如,DBDB不会处理老数据,因此重复更新(即使是相同的key值)最终都会消耗掉所有的磁盘空间。

俯瞰DBDB DBDB分为逻辑层(数据结构:二叉树),物理层(如何在磁盘上存储数据)以及接口API(key值与value值的具体内容)几层。

代码架构 下面的模块是按终端用户的使用频率进行降序排序的,换句话说,第一个模块是用户了解的最多的模块,而最后一个模块与终端用户没有什么交集。

  • tool.py:一个用于从终端窗口使用数据库的命令行工具。
  • interface.py:定义了类(DBDB),它基于二叉树实现了Python字典数据结构。
  • logical.py:逻辑层。它是一个key值/value值存储的抽象接口。LogicalBase为数据更新提供了接口(如get,set和commit),并且对锁进行管理和回收内部节点引用。ValueRef是一个引用存储在数据库中的二进制Blob的Python对象,可以避免将所有数据一次性加载到内存中。
  • binary_tree.py:在逻辑层之下定义了一个具体的二叉树算法。BinaryTree提供了二叉树的具体实现,其中包含读取,插入和删除key/value的方法。 BinaryTree是一棵函数式的不变的二叉树;更新是通过返回一个与旧树共享公共结构的新树来实现的。 BinaryNode实现了二叉树的一个节点。BinaryNodeRef是一个特殊的ValueRef,它知道如何对BinaryNode进行序列化和反序列化。
  • physical.py:定义了物理层。 Storage类提供持久,(往往是)仅追加记录的存储。

原文发布于微信公众号 - 鸿的学习笔记(shujuxuexizhilu)

原文发表时间:2018-04-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏zhisheng

渣渣菜鸡的蚂蚁金服面试经历(二)

17、如果存取相同的数据,ArrayList 和 LinkedList 谁占用空间更大?

813
来自专栏芋道源码1024

从客户端的角度设计后端的接口

2.请求Path,http://www.online.com/api/ [path]

1483
来自专栏BestSDK

Python开发必备的6个库,有了它事半功倍!

01 Python 必备之 PyPy PyPy 主要用于何处? 如果你需要更快的 Python 应用程序,最简单的实现的方法就是通过 PyPy ,Python ...

4018
来自专栏求索之路

从零开始仿写一个抖音App——app架构更新与网络层定制

讨论1:zsh 对 bash 的支持并不是完全的,如果运行纯 bash 有时候会出问题建议不要在服务器上用。

3391
来自专栏Golang语言社区

论获取缓存值的正确姿势

论获取缓存值的正确姿势 cache 时至今日,大家对缓存想必不在陌生。我们身边各种系统中或多或少的都存在缓存,自从有个缓存,我们可以减少很多计算压力,提高应用程...

3728
来自专栏码匠的流水账

聊聊jdbc的大数据量读写相关异常的防御措施

jdbc提供fetchSize参数来设置每次查询按fetchSize分批获取。不同的数据库的jdbc driver实现不一样。

1041
来自专栏日常学python

教你用python登陆豆瓣并爬取影评

这是我的第二篇原创文章 在上篇文章爬取豆瓣电影top250后,想想既然爬了电影,干脆就连影评也爬了,这样可以看看人们评价的电影,再加上刚出不久的移动迷官3好像挺...

37110
来自专栏大内老A

[WCF-Discovery]让服务自动发送上/下线通知[原理篇]

到目前为止,我们所介绍的都是基于客户端驱动的服务发现模式,也就是说客户端主动发出请求以探测和解析可用的目标服务。在介绍WS-Discovery的时候,我们还谈到...

2166
来自专栏FreeBuf

用搜索神器Everything定位Webshell木马后门

Everything是速度最快的文件名搜索软件。其速度之快令人震惊,百G硬盘几十万个文件,可以在几秒钟之内完成索引;文件名搜索瞬间呈现结果。它小巧免费,支持中文...

2708
来自专栏三丰SanFeng

Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)

死锁(deadlock) 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态...

2859

扫码关注云+社区