11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

数据库即值

  • 2013-06-16
  • 本文字数:1133 字

    阅读完需:约 4 分钟

QCon New York 2013 上, Rich Hickey 做了一次话题为函数式数据库的演讲。Hickey 因创造了 Clojure 编程语言而蜚声业内,目前他正在开发函数式数据库 Datomic 。在他的演讲中,Hickey 表示函数式语言中的两个非常有用的属性:数据即值(data as values)和纯函数(译者注:Pure Functions ,不会产生副作用的函数,副作用指的是函数会改变外界环境的某些属性,或者返回值依赖于外部环境的某个属性),同样也有适用于数据库这一环境。他认为,这与对象关联的编程有很大不同。对象包含了数据和逻辑,就像是一台机器:它顺序地进行处理并不断改变自己的状态。每次调用对象上的方法都有可能返回不同的结果。这种状态可能会以某种不可预知的方式进行改变。例如,由于另一个线程同样也引用了该对象并修改了它。这让与对象关联的程序很难进行对结果的推断。而我们今天所使用的数据库与对象非常相似:一个数据库服务器就是一个不断改变状态,并且具有查询逻辑和变化部分的单独实体(有可能存在多份复制),可以采用事务的概念来弥补对数据库不可变(immutable)值的缺失。

Hickey 以反问的口吻向观众说道:“如果将所有这些函数式的属性应用到数据库上岂不是很好?”在这样的一个世界里,整个数据库将可以代表一个(不变)值,而查询就好比是以一个或多个数据库作为参数的函数。这样一来,数据库便可以在多个线程间被安全的传递,而在相同数据库值上进行的相同查询将会产生相同的结果。自然地,由于一个不可变的数据库对大家来说并不是很有用处,所以我们将会使用事务处理器(transactor)来产生变更,更准确地说是:基于先前的数据库值产生新的数据库值。给定事务处理器一个数据库值和变化的数量,它将会返回一个新的数据库值。程序可以在任何时间向数据库索取它的当前值。 Datomic 就是一个拥有这些属性的数据库。

这种针对数据库的函数式方式应用了函数式编程的核心思想,即严格地将数据库的数据和逻辑进行区分。数据被持久化在默默无闻的数据存储上,甚至可以存储在像 Amazon 的 DynamoDB 这样的简单键值存储上。事务处理器进程将会对事务进行协调,并且在出现多个“节点(peer)”(Datomic 对客户端的叫法) 于同一时间执行事务时起到主要的作用。通常节点会以 Java 库的形式集成到应用当中。一个节点会与事务处理器建立起一个连接来执行事务性的变化。查询会由节点本身来执行,并根据实际的需要来进行延迟(lazily)数据加载。为了使查询更加简单,Datomic 支持以 Datalog 作为查询语言,该语言是 Prolog 的一个子集,非常适合以声明式的方式进行数据库查询。

关于 Datomic 的更多信息可以访问它的官方网站。InfoQ 曾经发表过 Datomic 的架构数据模型的文章,并且同样发表了上文所提到的关于 Datomic 的演讲视频

查看英文原文: The Database as a Value

2013-06-16 06:331227
用户头像

发布了 52 篇内容, 共 21.2 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

顺应医改,积极布局——集采背景下的高值医用耗材发展洞察2022

易观分析

医用耗材

如何用Pygame制作简单的贪吃蛇游戏

行者AI

自助洗车加盟具体都有哪些优势

车白兔自助洗车机加盟

自助洗车加盟

Flutter在数字生活的发展与天翼云盘落地实践

flutter 架构 混合应用开发 移动开发 客户端

推荐一个好用的设计师导航网址

小炮

新思科技在《 2022 年 Gartner® 应用安全测试关键能力报告》中表现优异 在五个常见用例中荣获最高分

InfoQ_434670063458

新思科技 Gartner 应用安全测试

数据的软删除—什么时候需要?又如何去实现?

翊君

6月月更

企业如何提升文档管理水平

小炮

统一认证中心 Oauth2 认证坑

Xiao8

6月月更

Linux 之父亮相,OpenCloudOS 社区开放日来了

腾讯安全云鼎实验室

掌握高性能计算前,我们先了解一下它的历史

华为云开发者联盟

华为云 高性能计算 处理器

图像搜索是什么

Geek_e369a5

图像搜索 图像搜索是什么

Cube 技术解读 | Cube 渲染设计的前世今生

阿里巴巴终端技术

ios android 渲染 跨端

这几个垂直类小众导航网站,你绝对不会想错过

小炮

想加盟自助洗车不知道一般啥流程

车白兔自助洗车机加盟

自助洗车加盟

传统企业在进行信息化升级的过程中,如何做好信息化顶层设计

WorkPlus Lite

第二届征文大赛开奖啦!速来领奖!

InfoQ写作社区官方

热门活动 初夏征文

攻防演练 | 网络安全“吹哨人”:安全监控

青藤云安全

网络安全 主机安全 攻防演练

乘风破浪,探索数据可视化开发平台FlyFish开源背后的秘密!

云智慧AIOps社区

前端开发 低代码 数据可视化 大屏可视化 优秀开源项目

李飞飞:我更像物理学界的科学家,而不是工程师|深度学习崛起十年

OneFlow

人工智能 深度学习 李飞飞 ImageNet

一文带你了解J.U.C的FutureTask、Fork/Join框架和BlockingQueue

华为云开发者联盟

Java 开发 华为云

新思科技助力以色列Visuality Systems推进安全“左移”

InfoQ_434670063458

软件开发 代码 新思科技 安全测试 安全左移

项目那么多为何要选择自助洗车

车白兔自助洗车机加盟

自助洗车加盟

自助洗车加盟前要准备些什么吗

车白兔自助洗车机加盟

自助洗车加盟 自助洗车品牌

改变世界的开发者丨玩转“俄罗斯方块”的瑶光少年

华为云开发者联盟

人工智能 华为云 俄罗斯方块

为什么要开发分布式操作系统

LAXCUS分布式操作系统

分布式计算 分布式存储 超算 云边端协同 分布式操作

flutter系列之:UI layout简介

程序那些事

flutter 程序那些事 6月月更

华为云鲲鹏DevKit代码迁移实战

乌龟哥哥

6月月更

直播预告 | 解构OLAP!新型多维分析架构范式全公开!Apache Doris 将带来五个重磅议题!

SelectDB

数据库 OLAP MPP Apaache Doris 直播活动

搭建在线帮助中心,轻松帮助客户解决问题

小炮

仅需三步学会使用低代码ThingJS与森数据DIX数据对接

森友小锘

可视化 数字孪生

数据库即值_数据库_Zef Hemel_InfoQ精选文章