nosql非关系型数据库_从Datomic出发,革命性的非NoSQL数据库

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,《革命性的No-NoSQL数据库》的意义 。

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

nosql非关系型数据库

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

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

相关文章

你活在一个计算机模拟中吗,一麻省理工教授认为,我们更有可能生活在计算机模拟宇宙中...

一位麻省理工学院的教授表示,我们“更有可能”生活在某种模拟宇宙中,因为我们自己离能够创造超现实的模拟也不远了。(参见在接受解释性网站Vox采访时,计算机科学家Rizwan Virk认为,如果我们生活在信息世界而不是物质世界中&#x…

尽早查看针对Java 11的功能

随着JDK 10即将进入其发布候选阶段 ,有趣的是,开始通过JDK 11观察之后会发生什么。 在撰写本文时,四个JEP ( JDK增强建议 )已正式成为JDK 11的目标(可能会出现)。 这篇文章总结了当前针对JDK 11…

如何在命令行情重启计算机,如何应对“命令式”行情

如果说十月维稳行情,是以劝说,号召并佐以缓发新股为主要行政手段,那么十一月行情的主要特征就是“命令式”的。实践证明,十月行情并不咋地,虎头蛇尾,说明主力并不十分听话,也不卖力,…

服务器系统开机提示0xc000007b,0xc000007b蓝屏解决方法

0xc000007b是一种常见的蓝屏代码,导致出现此蓝屏代码的原因有很多,BIOS设置问题,驱动问题,硬件问题等等。硬件问题对于我们小白来说解决起来有点困难。我给大家带来了解决0xc000007b蓝屏软件问题的方法,赶紧来瞧瞧吧0x…

tms tck_记录合规性–关于TCK,规格和测试

tms tck使用软件规格非常困难。 不论在哪个地方提出; 您最终遇到了一个大问题:是否已实现所有指定的内容并对其进行了测试? 在瀑布驱动的方法学时代,这一直是一个问题,即使在撰写本文的今天,敏捷性和用户故…

3D环动画css3实现,CSS3 3D酷炫立方体变换动画的实现

我爱撸码,撸码使我感到快乐!大家好,我是Counter,本章微博主要利用了CSS3的一些新特性,主要用到关键帧来使3D图形运动起来,涉及到了一些抽象的思想,立体的想象。先给大家看看完成的效果&#xff…

Spring项目的按层打包已过时

我认为Spring应用程序不应该以逐层方法构建。 在我看来,按功能打包更有意义。 首先,让我简要描述每种方法。 “按层打包”(在非Java世界中为“按类型折叠”) 该项目结构根据源代码文件所属的体系结构层将它们分为包/目录&#x…

css怎么控制两个字母,css英文字母数字自动换行且不断词方法

本文章来给各位同学介绍css怎样让英文字母数字自动换行且不断词方法总结,有需要了解的同学可进入参考。当一个定义了宽度的块状元素中填充的全部为纯英文或者纯数字的时候,在IE和FF中都会撑大容器,不会自动换行并且当数字或者英文中带有汉字时…

nmap 查看服务器版本信息,nmap命令-nmap命令扫描服务器信息的格式

用这条命令就可以扫描出目标网络的操作系统和开放端口号nmap-O...0/24上面的扫描信息直接输出到终端,如果想把结果写到文件里,可以用-oN,-oX选项输出到文本文件或xml文件。nmap-O...0/24-oXnmap_info.xml,结果会输出到XML文件&…

java构造函数内部调用_具有内部类构造函数参数的Java Reflection奇数

java构造函数内部调用关于Java内部类 Java允许成员类(在其他类内定义的类),局部类(在语句块内定义的类)和匿名类(无名称的类): class Outer {Object anonymous new Object(){}; //…

Java的新视差控件(JavaFX)

介绍 视差是一种视觉效果,您可以组合以不同速度移动的两个分层图像以获得深度感。 想想一下,当您在道路上行驶时,您会看到附近的树木在快速移动,而距离较远的树木将沿相同的方向移动,但速度较慢,结果是您感…

ajax提交file空指针,excel导入上传文件报空指针错误

页面入口全选导入导出${msg[globals.button.delete.more]}导出jsfunction excelImport() {top.layer.open({type: 1,area: [500, 300],title:"导入数据",content:$("#importBox").html() ,btn: [下载模板,确定, 关闭],btn1: function(index, layero){windo…

mockito 静态方法_Mockito –带有注释和静态方法的额外接口

mockito 静态方法在代码中,我最近遇到了一段非常糟糕的代码,该代码基于对对象执行某些操作的类转换。 当然,代码需要重构,但是如果您首先没有对该功能进行单元测试,则有时您可能无法做到/或者不想这样做(这…

手机推送信息到本地服务器,服务器信息推送到手机

服务器信息推送到手机 内容精选换一换服务器的计费方式为“包年/包月”,如果在计费周期内不想再继续使用,请参考本节指导进行退订。执行退订操作前,请确保待退订的服务器数据已完成备份或者迁移,退订完成后资源将被完全删除&#…

怎么修改服务器上的cpt文件,DELL-服务器-RAID-配置详解(28页)-原创力文档

DELL 服务器 RAID 配置详解磁盘阵列可以在安装系统之前或之后产生,系统会视之为一个(大型)硬盘,而它具有容 错及冗余的功能。磁盘阵列不单只可以加入一个现成的系统,它更可以支持容量扩展,方 法也很简单,只需要加入一个…

Apache Camel 2.21发布–新增功能

我们刚刚发布了Apache Camel 2.21,我将在此博客中重点介绍值得注意的更改。 此版本不支持Spring Boot2。对Spring Boot 2的支持将在Camel 2.22中提供, 我们计划在2018年夏季之前发布。 1)处理大型JMS消息 我们在JMS组件中添加了更好的支持&…

linux下网站服务器,Linux下使用Apache搭建Web网站服务器(示例代码)

[[email protected] ~]# yum install elinks –y主配置文件[[email protected] ~]# ls/etc/httpd/conf/httpd.conf/etc/httpd/conf/httpd.conf#我们又是怎么知道httpd的注配置文件是在你那里的呢?查看httpd注配置文件位置[[email protected] ~]# rpm -pql/mnt/Packa…

程序内存泄露监视_监视和检测Java应用程序中的内存泄漏

程序内存泄露监视因此,您的应用程序内存不足,您日夜不停地分析应用程序,以期捕获对象中的内存漏洞。 后续步骤将说明如何监视和检测您的内存泄漏,以确保您的应用程序处于安全状态。 1.怀疑内存泄漏 如果您怀疑有内存泄漏&#xf…

服务器可以装两个系统吗,云服务器可以装多个系统吗

云服务器可以装多个系统吗 内容精选换一换示例:购买并登录Windows弹性云服务器示例:购买并登录Linux弹性云服务器云平台提供了多种实例类型供您选择,不同类型的实例可以提供不同的计算能力和存储能力。同一实例类型下可以根据CPU和内存的配置…

与Spring的计划任务一起按时运行

您是否需要每天像闹钟一样在同一时间运行某个流程? 然后,Spring的预定任务适合您。 允许您使用Scheduled注释方法,以使其在指定的时间或内部间隔运行。 在本文中,我们将研究如何设置一个可以使用计划任务的项目,以及如…