Crate是关系数据库吗?

时间:2016-12-08 21:52:54

标签: database relational-database crate nosql

我一开始认为它不是关系数据库,但在我读完之后我可以加入表格并将其写在他们的网站https://crate.io/overview/上(参见用例),我不是肯定的。

特别是我对这种感觉感到困惑:

  

CrateDB基于NoSQL架构,但具有标准SQL。

来自https://crate.io/overview/high-level-architecture/

3 个答案:

答案 0 :(得分:4)

通过Codd's 12 rules(已用于识别关系数据库),CrateDB不是关系数据库 - 尚未。 CrateDB的最终一致性模型并未禁止这种情况。

  

规则0:对于宣传为或声称是关系数据库管理系统的任何系统,该系统必须能够完全通过其关系功能管理数据库。

CrateDB没有另一个可以插入,检索和更新数据的界面。

  

规则1:关系数据库中的所有信息都在逻辑级别明确表示,并且以一种方式表示 - 通过表中的值。

究竟在CrateDB中可以找到什么。

  

规则2:通过使用表名,主键值和列名的组合,保证关系数据库中的每个数据(原子值)在逻辑上可访问。

这是严格执行的。通过主键访问甚至可以为您提供写后一致性。

  

规则3:完全关系型DBMS支持空值(与空字符串或空字符串不同,不同于零或任何其他数字),以系统方式表示缺失信息和不适用信息,独立于数据类型。

CrateDB支持null。

  

规则4:数据库描述在逻辑层面上以与普通数据相同的方式表示,因此授权用户可以将相同的关系语言应用于其询问,因为它们适用于常规数据。

CrateDB包含其他元表Information Schema tables

  

规则5:关系系统可以支持多种语言和各种终端使用模式(例如,填空模式)。但是,必须至少有一种语言,其语句可以通过一些明确定义的语法表达为字符串,并且在支持以下所有项目方面是全面的:

     
      
  • 数据定义。
  •   
  • 查看定义。
  •   
  • 数据处理(交互式和程序式)。
  •   
  • 诚信约束。
  •   
  • 批准。
  •   
  • 事务边界(开始,提交和回滚)。
  •   

CrateDB支持数据定义和数据操作部分,只支持单一完整性约束(主键)。这绝对是不完整的。

  

规则6:理论上可更新的所有视图也可由系统更新。

CrateDB尚不支持视图。

  

规则7:将基本关系或派生关系作为单个操作数处理的能力不仅适用于数据检索,还适用于数据的插入,更新和删除。

CrateDB目前仅用于数据检索...

  

规则8:无论何时对存储表示或访问方法进行任何更改,应用程序和终端活动在逻辑上都不会受到任何影响。

CrateDB使用SQL允许这样做;通过系统升级甚至可以提供性能/存储级别的改进。

  

规则9:当信息保留在理论上允许对基表进行不公平的任何类型的变更时,应用程序和终端活动在逻辑上保持不受影响。

部分内容仍然缺失(视图,连接上的插入/更新)。但是,对于检索数据,情况已经如此。

  

规则10:特定关系数据库特有的完整性约束必须在关系数据子语言中定义,并且可以在目录中存储,而不是在应用程序中。

这对于分布式数据库来说非常棘手,特别是外键约束。 CrateDB目前仅支持主键约束。

  

规则11:关系型DBMS具有分发独立性。

在CrateDB中,任何类型的分片/分区/分发都是为用户透明处理的。数据分发的任何类型的约束/设置都应用于数据定义级别。

  

规则12:如果关系系统具有低级别(单次记录一次)语言,则该低级别不能用于破坏或绕过更高级别关系语言中表达的完整性规则和约束(多记录-AT-A-时间)。

有人可能会说COPY FROM直接违反了此规则,因为下面没有进行类型检查和转换。但是,没有其他命令/语言/ API可以允许数据操作。

虽然CrateDB确实有一些赶上来做,但没有理由说它很快就不会成为这种意义上的关系数据库。其SQL support可能与甲骨文或Postgres'不相上下。但是很多人可以在没有特定用例的特定功能的情况下生活。

如上所述,上述所有规则都没有直接违反,而是尚未以令人满意的方式实施,因此没有理由认为CrateDB最终无法成为完全关系型数据库

(免责声明:我在那里工作)

答案 1 :(得分:0)

自关系模型开始以来,系统必须被视为关系的三个主要组成部分是(应用Codd"三组件定义"数据模型"到关系模型) :

  • 数据显示为关系(表格)
  • 操纵是通过关系和/或逻辑运算符/表达式
  • 完整性由关系和/或逻辑运算符/表达式强制执行

多用户DMBS也被理解为支持明显的原子持久性事务,同时通过重叠执行(ACID)实现受益,并且分布式DBMS被理解为支持明显的单个数据库,同时受益于多个站点的实现。 / p>

根据这些标准,CrateDB不是关系型的。

它有表,但它对表的操作极其有限,而且它几乎没有完整性功能。重新操作,它允许查询满足条件(包括聚合)的表的行,并且它允许连接多个表,但是即使对于equijoin也没有优化。重新约束,它唯一的功能是列类型,主键和非空列。它使用SQL的微小子集

请参阅以下链接中的Supported FeaturesStandard SQL Compliance链接页面:

Crate SQL
    Data Definition
        Constraints (PRIMARY KEY Constraint, NOT NULL Constraint)
        Indices
    Data Manipulation
    Querying Crate
        Retrieving Data (FROM Clause, Joins)
    Joins
    Crate SQL Syntax Reference

与非关系型DBMS一样,他们的文档并不反映对关系模型或其他基本DBMS功能的理解或欣赏。

答案 2 :(得分:-1)

CrateDB是一个分布式SQL数据库。底层技术类似于所谓的NoSQL数据库通常使用的(无共享架构,柱状索引,最终一致性,对半结构化记录的支持) - 但是可以通过传统的SQL接口访问它。

因此 - 是的,CrateDB有点像关系型SQL DB