python500行实现简单数据库(翻译)

前言

最近我又比较迷茫了!但记得有一位伟人说过“真正迷茫的人都在图书馆寻找答案”。我感觉图书馆离寝室太远了,不如就在这写文章吧。
本文是http://aosabook.org/en/500L/an-archaeology-inspired-database.html的翻译版,不过,我粗略看了一下,英文教程可能差不多也五百行。
如果您能够耐心看完,我觉得您一定会有收获!


一个受考古启发的数据库

–Yoav Rubin

Yoav Rubin 现在是微软的高级软件工程师,在此之前是一个IBM 公司主要的研究人员。他现在工作领域是云数据安全,在过去他的工作专注于发展云计算和基于web的开发环境。Yoav 持有一个神经科学领域的硕士学位和一个信息系统工程的学士学位。他在推特上的名字是@yoavrubin,他偶尔在http://yoavrubin.blogspot.com写博客。

介绍

软件开发通常被视为一个严格的输入需求和输出产品的过程。然而,软件开发人员是人类,人类有自己的观点和偏见,这影响他们的工作的结果。

在这一章中,我们将探讨常见的角度的变化如何影响研究类型的软件的设计和实现:一个数据库。

数据库系统是用来存储和查询数据。这是所有“数据工作者”做的工作;然而,系统本身是由计算机科学家设计的。因此,现代数据库系统是高度受到计算机科学家们关于“数据是什么?又能做些什么的?”的定义的影响。

例如,现在大多数数据库的更新方式是在放以前的数据的地方重写,而不是添加新数据并保持老数据。这种机制被 Rich Hickey 称为“place-oriented programming”,节约了储存空间,但无法对一条特定记录检索整个历史记录。这种设计反映了计算机科学家的观点:“历史”和它的存储价格相比更不重要!

如果你去问一位考古学家“哪里可以找到以前的数据”,回答将是“我希望,它就埋在这地下”。
(免责声明:我对一个典型的考古学家的理解是基于我参观几个博物馆、阅读一些维基百科文章和看整个印第安纳琼斯)

像一个考古学家一样设计一个数据库

如果我们让我们的可爱考古学家设计一个数据库,我们可能会发现这就是挖掘现场:

  • 所有的数据都是在现场发现并记录

  • 更深入的挖掘将揭露事物的过去状态

  • 在同一层次发现的上古神器是来自同一时期

  • 每件上古神器由它不同时间的积累组成
    例如,一堵墙在一层可能有罗马符号,和在一个更低的层可能有希腊符号。这两个观测记录作为墙的一部分状态。
    这个比喻是如图10.1:

  • 整个圆是挖掘现场

  • 每一个环都是一个层次(编号从0到4)

  • 每个区域是一个带标记的上古神器(A到E)

  • 每个上古神器都有一个“符号”属性(空白意味着没有更新)

  • 实箭头表示符号层之间的变化

  • 虚箭头表示上古神器之间的关系(例如:从E到A)
    Figure 10.1 - The Excavation Site
    图10.1


    如果我们将考古学家的语言转化为数据库设计师的语言:

  • 挖掘网站是一个数据库

  • 每个上古神器是一个实体对应的ID

  • 每个实体都有一组属性,这可能会随着时间而改变

  • 每个属性在一个特定时间都有一个特定的值


    这可能看起来和你曾经使用过的数据库很不同。这个设计有时被称为“功能数据库”,因为它使用函数式编程的领域的想法。其余的章节描述了如何实现这样的一个数据库。
    因为我们正在构建一个功能数据库,我们将使用被称为Clojure的函数式编程语言。
    Clojure有几个特质,使其很好的实现语言功能的数据库,如开箱即用的不变性、高阶函数,和元编程设施。但最终,Clojure被选中的原因是它强调清洁,严格设计,非常少编程语言能够有这些特性。

奠定基础

让我们开始通过声明的核心构造数据库。

(defrecord Database [layers top-id curr-time])


希望我还会继续翻译下去
2019年3月30日22:35:32

发布了45 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_34438779/article/details/88919922