多模型
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 |