从Datomic出发,革命性的非NoSQL数据库

我终于设法了解了当今最不寻常的数据库之一,Datomic,并希望与您分享。 感谢Stuart Halloway和他的工作室!

为什么?!?

我们将很快看到,Datomic与传统的RDBMS数据库以及各种NoSQL数据库有很大的不同。 它甚至不是数据库-它是数据库之上的数据库。 直到现在我都无法解决这个问题。 理解Datomic及其独特设计和优势的关键实际上很简单。

主流数据库(和语言)是围绕1970年代的以下约束设计的:

  • 内存很贵
  • 存储很贵
  • 有必要使用专用的昂贵机器

Datomic本质上是对如果没有这些约束的话我们应该设计什么样的数据库的探索。 我们将选择什么样的设计来拥有千兆字节的RAM,具有与带宽和速度相匹配的网络,并且具有超越硬盘访问的能力,以及一时兴起地旋转和杀死服务器的能力。

但是Datomic并不是一个学术项目。 这是务实的,它想适应我们现有的环境,并让我们现在就可以轻松开始使用其未来功能。 而且它不像看起来那样新鲜和绿色。 据报道,Clojure和Datomic背后的主要思想家Rich Hickey已经考虑了这两个项目很多年了,而且设计也经过了深思熟虑。

Datomic的怪异架构

  1. Datomic是位于另一个数据库(或存储)之上的数据库–内存,文件系统,传统的RDBMS,Amazon Dynamo。
  2. 您不将查询发送到服务器并获取结果。 相反,您取回了执行查询并在本地运行查询和所有后续查询所需的所有数据。 因此,“联接”非常便宜,您可以做很多其他不可能的事情(组合来自多个数据库和本地数据结构的数据,在它们上运行任何代码,…)。 每个使用Datomic(即“对等”)的应用程序都将根据其独特的需求和使用模式,将所需的数据与自身紧密联系在一起。
  3. 所有写操作都通过一个称为Transactor的组件进行,该组件实质上对写进行序列化 ,从而确保ACID 。 听起来可能是一个瓶颈,但考虑到设计和典型的应用需求,它并不是最实用的[1] 。 (据报道,Datomic可以处理世界上所有信用卡的所有交易。在Kurt Zimmer的Relevance Podcast中收听Room Key的大量写入操作(Podcast Episode 033) 。)
  4. Datomic的工作原理与版本控制系统(如Git)非常相似。 它永远不会覆盖数据,也没有更新。 您只需将数据标记为无效,然后添加新数据即可生成新版本的数据库(请考虑git hash / svn修订号)。 然后,您可以查询数据库的最新状态或特定版本的状态。 (当然,无论何时向数据库添加事实,都不会复制整个数据库。Datomic既聪明又高效。)
  5. 它不是单个的整体服务器,存储,事务处理程序和对等点在物理上是分开的。

是什么使这成为可能?

  • 网络访问速度快于磁盘访问=>可以通过网络获取所有数据
  • 大量内存=>可以根据其实际需求在每个对等体上存储大量的子集
  • 存储量巨大且价格便宜=>我们可以轻松存储历史数据
  • 具有现代FP语言中使用的高效,不变,“持久”数据结构的经验=>廉价地创建新的“数据库值”

Datomic的独特价值主张和能力

现在,我们已经了解并希望了解Datomic的独特设计。 但是它给我们带来了什么,与其他数据库有什么区别?

该体系结构以及其他一些设计决策提供了以下关键特征:

  • 可编程性–数据,架构,查询输入/输出,事务元数据都是对等点上完全可用的基本数据结构,因此可以以以前无法想象的强大方式进行组合和处理
  • 持久性/问责制-您永远不会丢失历史记录,可以使用有关谁/为什么等的元数据来注释事务,支持查找事物的状态,事物的变化方式,进行假设分析
  • 弹性可伸缩性–由于许多负载已被推到对等端
  • 灵活性–无需严格的架构,易于根据每个对等方的独特需求进行导航,合并和缓存数据,并通过数据功能进行扩展

结束语

Datomic具有与关系数据库(尤其是ACID)相似的目标,并且可以在类似的用例中使用。 从性能角度来看,如果写入比读取更重要,或者您确实需要每秒连续写入大量数据,或者您的行数超过数十亿,那么您可能会更喜欢另一种解决方案。 得益于针对重负载安装的设计和建议的体系结构,即在存储器前面安装了memcached,后端的性能并不重要(因为对等方拥有本地所需的数据或从memcached获取数据),因此应该根据使用相关的特征选择更多。

摘要

Datomic的设计–在本地获取数据和运行查询的同级,单个写入协调器(事务处理程序),基于现有数据库/存储工具(并保留所有历史记录)的方法对我来说似乎很奇怪,可能对我来说效率很低,直到我意识到传统数据库是围绕不再存在的约束设计的。 Datomic现在对我来说很有意义,并且似乎是一种具有令人着迷的功能和巨大潜力的工具。 希望您现在也能看到。

我遗漏了一些有趣的主题,例如可以在Datomic中存储哪些数据结构以及使用的数据模型和查询模型。 要了解有关Datomic的更多信息,请访问5岁 儿童Datomic和Datomic的主页 。

奖励链接

  • Datomic中的乐观和悲观锁定的数据功能 (论坛答案)
  • HighScalability.com:VoltDB消除了六个SQL城市神话,并在过程中提供了Internet规模的OLTP – VoltDB的体系结构描述,与Datomic有一些共同点(单线程写入,作为事务单位的“存储过程”等) )
  • VoltDB – Mike Stonebraker令人难以置信的可伸缩性,SQL,ACID数据库,它也打破了70年代的约束,并利用了巨大的RAM,单线程访问等功能。

[1] Harizopoulos,S.,Abadi,DJ,Madden,S.,&Stonebraker,M.(2008年6月)。 OLTP穿过窥视镜,以及我们在那里发现的东西 。 在2008年ACM SIGMOD国际数据管理会议论文集 (第981-992页)中。 ACM。 –本文表明,传统的RDBMS在锁定和闩锁上花费了将近30%的时间,这可以通过单线程访问消除,VoltDB也可以这样做。 另请参见VoltDB白皮书 。

参考: The Holy Java博客上的JCG合作伙伴 Jakub Holy 的Datomic,革命性的非NoSQL数据库的意义 。

翻译自: https://www.javacodegeeks.com/2013/06/making-sense-out-of-datomic-the-revolutionary-non-nosql-database.html

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

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

相关文章

unity中单位是米还是厘米_401场地清理是什么,由施工单位做还是甲方做?造价中如何体现?...

场地清理是对公路用地范围及借土场范围内施工场地的清理、拆除和挖掘,以及必要的平整场地等有关作业。一、工作内容根据路基工程项目分表可以看出场地清理主要包括三方面内容:1、清理与拆除(1)清除表土路基范围内的树根、腐殖土、草皮或地表土不符合路基…

432 4.3.2 STOREDRV.Deliver; recipient thread limit exceeded

432 4.3.2 STOREDRV.Deliver; recipient thread limit exceeded 最近几天Hub-Mailbox服务器时不时就CPU超过90%。在任务管理器里面看到edgetransport占用大量CPU。进入EMC的队列查看器,看到邮箱数据库堵塞,队列上万。 堵塞的邮件大多是收件人自动回复、退…

SQL Server 关于列的权限控制

SQL Server 关于列的权限控制 原文:SQL Server 关于列的权限控制在SQL SERVER中列权限(Column Permissions)其实真没有什么好说的,但是好多人对这个都不甚了解,已经被人问了几次了,所以还是在这里介绍一下,…

简单的Spring Memcached – Spring缓存抽象和Memcached

在任何读取繁重的数据库应用程序中,缓存仍然是最基本的性能增强机制之一。 Spring 3.1发行版提供了一个很酷的新功能,称为Cache Abstraction 。 Spring Cache Abstraction为应用程序开发人员提供了一种简单,透明和分离的方式来实现任何缓存解…

华为鸿蒙系统是否上线,华为官方:鸿蒙系统2.0上线,手机能否搭载鸿蒙操作系统?...

原标题:华为官方:鸿蒙系统2.0上线,手机能否搭载鸿蒙操作系统?华为官宣鸿蒙已经过去有一年多的时间了。近日有消息称,在今年九月份华为即将举办开发者大会,届时正式发布鸿蒙2.0操作系统,相比之前…

图解 继电器模组接线图_交流接触器,继电器的知识你了解多少?(值得收藏)...

↑↑↑↑↑领取福利的小伙伴,先点击上方关注我们哦(文章字体较小,请点击放大后查看)交流接触器(Alternating Current Contactor)广泛用作电力的开断和控制电路。型号与参数交流接触器的型号很多, CJ0、CJ10系列交流接触器较为常用&#xff0c…

python - 数据类型

python - 数据类型: 基本类型: 1.数字 整数int 长整型long 浮点型float 2.字符串 文本str 字节bytes 3.布尔 true false数据集: 1.列表list 2.元祖tuple (数组) 3.字典dict 有序字典 无序字典 4.集合set 有序集合 无序集合-----------------…

CSS :root 测试

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> <style> :root {background:blue;--vvv:60px; } </style> </head> <body><h1 style" font-siz…

折线图表android,Android 折线图表MPAndroidChart的实现

昨日夜观天象&#xff0c;今日忽见北斗星陨落&#xff0c;《Android 折线图表》应运而生。single.pngmany.png一.本篇采用MPAndroidChart&#xff0c;大体实现步骤可分为两步&#xff1a;1.配置基本属性(包括X,Y轴)2.设置折线数据并添加复制代码二. 第一步&#xff0c;配置基本…

发个自己的CSS重置基础代码

关于css的重置代码有很多&#xff0c;也有不少人写过适合不同站点的重置代码&#xff0c;这里发个浩子平时使用的额方法。 代码如下&#xff1a; /* haozi / hao.chenqq.com / 2011.06.15 */body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,inp…

我最喜欢的Java高级开发人员书籍

我上一篇博客文章 &#xff08;我对高级Java开发人员的十个最喜欢的在线资源&#xff09;的想法是由Xiaoran Wang发表的针对高级Java开发人员的十大网站的启发。 Wang还写了一篇名为《面向Java高级开发人员的十大书籍》的文章。 正如关于高级Java开发人员的最佳网站上的帖子一样…

pyplot绘制图片_matplotlib系列之pyplot

pyplot对象包含了一系列用于绘图的函数&#xff0c;使得它工作起来就像MATLIB一样。它的功能例如&#xff1a;创建一个figure对象绘制一片绘图区域在区域中绘制线条或者点也可以绘制labels使用pyplot对象快速的生成一幅图片import matplotlib.pyplot as pltplt.subplot(121)plt…

字符串-----KMP竟然是18禁

今天学了一下午字符串&#xff0c;讲到结束也没讲KMP。有人问老师为什么不讲&#xff0c;老师来一句&#xff1a;字符串noip不考&#xff0c;而且还是18禁&#xff0c;自然不讲。【手动滑稽】 所以我也不讲。【微笑】 1.表达式树 表示35*8 最后计算的符号是根节点&#xff0c;是…

freopen()函数在ACM中的使用

#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);#endif https://blog.csdn.net/cfzjxz/article/details/7240165转载于:https://www.cnblogs.com/LLbinGG/p/9414366.html

CSS3详解:background

CSS3对于background做了一些修改&#xff0c;最明显的一个就是采用设置多背景&#xff0c;不但添加了4个新属性&#xff0c;并且还对目前的属性进行了调整增强。 1、多个背景图片 在css3里面&#xff0c;你可以再一个标签元素里应用多个背景图片。代码类似与css2.0版本的写法…

里bl2和bl3为什么分开_英国的水池为什么有两个水龙头?为什么英国有独立的冷热水龙头?...

如果大家看过我之前的文章&#xff0c;可能会有点映像&#xff0c;前面有提到过英国的双水龙头&#xff0c;有兴趣的朋友们可以点后面的直达链接查看&#xff1a;为什么在英国留学会掉头发&#xff1f;怎么办&#xff1f;英国的自来水&#xff08;冷水&#xff09;可以直接喝吗…

html5中折叠面板,Ant Design中折叠面板Collapse

这段时间做react项目遇到一些平常并不会去在意的问题&#xff0c;但解决的时候又需要思考一番。这次开发用到了蚂蚁金服的UI框架Ant Design。项目中有一个模块的样式和功能用到了折叠面板Collapse组件来实现。但是开发完成后有一个问题被产品提到了。问题是这样的&#xff0c;因…

在JBoss的服务器端正确解码URL参数

我今天花了很多时间来弄清楚如何在运行在JBoss上的JSF应用程序中&#xff08;使用JBoss 7 Final&#xff09;强制正确解码编码的字符。 当您有例如通过URL传递中文字符时&#xff0c;就会出现此问题。 假设您有指点事件&#xff0c;编码为&#xff05;E6&#xff05;8C&#xf…

三剑客 老大:awk命令用法

awk是一种编程语言&#xff0c;用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一 个或多个文件&#xff0c;或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能&#xff0c;是linux/unix下的一个强大编程工具。它在命令行中使用&…

SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false...

根据When an overlay node with actions is copied there is currently a SpriteKit bug where the node’s isPaused property might be set to true提示&#xff0c;SpriteKit有一个Bug需要开发者自己来填。 SpriteNode节点在被copy()复制后&#xff0c;会自动被设置为暂停&a…