多模型

OrientDB引擎支持, 文档, 键/值对象模型, 所以你可以把OrientDB用在任何一种类型的产品上。然而,用户选择OrientDB主要原因是它是真的具有多模型数据库系统的能力, 将四种模型的特性集成在一起。这些能力不仅仅是数据库引擎的接口,而是引擎本身就是支持四种模型。这也是它和其他多模型数据库的主要区别,其他的大多只是提供了一个API接口来模仿其他模型的使用方式。然而,他们底层还只是一种模型,因此在速度和伸缩性上有限制。

文档模型

这类模型的数据存储在文档中。一个文档是键值对(也被称为字段或属性)的集合,允许通过键访问值。值可以是原生类型,嵌入式的文档或者其他值的数组。文档不会强制保持一个模式,这是一个很便利的特性,可以保持灵活性且易于修改。文档以集合的形式存储,使得开发人员可以决定如何聚合数据。OrientDB使用""和 ""的概念作为"集合"的形式来聚合文档。这种方式提供了很多好处,我们在接下来的章节会一一介绍。

OrientDB的文档模型增加了"链接"的概念,表示文档之间的关系。在OrientDB中,你可以决定是嵌入文档还是直接连接它们。当你查询一文档时,所有的连接会自动被OrientDB解析。这是和其他文档数据库的一个主要区别,例如MongoDB或者CouchDB, 这些数据库开发人员需要单独处理文档之间的关系。

下面的表格描述了关系模型,文档模型和OrientDB文档模型的对比:

关系模型 文档模型 OrientDB文档模型
Table Collection Class or Cluster
Row Document Document
Column Key/value pair Document field
Relationship not available Link

图模型

一个图表示类网络的结构,由顶点(也叫节点)组成,顶点之间由边(也叫弧)连接。OrientDB的图模型表示为一个属性图的概念,定义如下:

  • Vertex - 一个实体可以和其他的顶点相连,具有以下必备属性:

    • 唯一标示
    • 入边集合
    • 出边集合
  • Edge - 一个实体,可以连接两个顶点,具有以下必备属性:

    • 唯一标示unique identifier
    • 连接的入度顶点(也叫head)
    • 连接的出度顶点(also known as tail)
    • 标示连接/关系的类型

除了这些主要属性之外,每个顶点和边可以自定义属性。这些属性可以由用户定义,使得顶点和边更像文档。下面将图模型,关系模型和OrientDB图模型做了对比:

关系模型 图模型 OrientDB图模型
Table Vertex and Edge Class Class that extends "V" (for Vertex) and "E" (for Edges)
Row Vertex Vertex
Column Vertex and Edge property Vertex and Edge property
Relationship Edge Edge

键值模型

三个模型中最简单的。数据库中的所有东西都可以通过键访问,值可以是简单也可以是复杂的类型。OrientDB支持文档和图的元素(顶点和边)作为值,这样就比传统的键值模型更加丰富。经典的键值模型提供"桶(buckets)"在不同的容器中聚合键值对。键值模型大多经典的用法包括:

  • POST the value as payload of the HTTP call -> /<bucket>/<key>
  • GET the value as payload from the HTTP call -> /<bucket>/<key>
  • DELETE the value by Key, by calling the HTTP call -> /<bucket>/<key>

下面将键值模型,关系模型和OrientDB键值模型做了对比:

关系模型 键值模型 OrientDB键值模型
Table Bucket Class or Cluster
Row Key/Value pair Document
Column not available Document field or Vertex/Edge property
Relationship not available Link

对象模型

这个模型是来自面向对象编程,支持类型之间的继承(子类型扩展父类型),还有 多态性( 当你实现一个基类,直接绑定编程语言中的具体对象)。

下面将对象模型,关系模型和OrientDB对象模型做了对比:

Relational Model Object Model OrientDB Object Model
Table Class Class or Cluster
Row Object Document or Vertex
Column Object property Document field or Vertex/Edge property
Relationship Pointer Link