是存储记录的地方。 对应传统文档数据库中的集合(collection)和关系数据库中的表(table),但是簇和它们不一样,簇允许你把一个类的数据存储在不同的物理位置。

To list all the configured clusters on your system, use the CLUSTERS command in the console:

orientdb> CLUSTERS

CLUSTERS:
-------------+------+-----------+-----------+
 NAME        | ID   | TYPE      | RECORDS   |
-------------+------+-----------+-----------+
 account     | 11   | PHYSICAL  |      1107 |
 actor       | 91   | PHYSICAL  |         3 |
 address     | 19   | PHYSICAL  |       166 |
 animal      | 17   | PHYSICAL  |         0 |
 animalrace  | 16   | PHYSICAL  |         2 |
 ....        | .... | ....      |      .... |
-------------+------+-----------+-----------+
 TOTAL                                23481 |
--------------------------------------------+

了解簇

默认的,OrientDB为每个类创建一个簇。但是从2.2版本以后,OrientDB 会为每个类自动创建多个簇(簇的数量和CPU核的数量相同)从而提高并发。一个类的所有记录存储在同样的簇上,和类的名字相同。一个数据库最多创建32,767 (215 - 1)个簇。了解类和簇的概念,可以使你在设计新数据库时充分发挥簇的作用。

默认的策略每个类都对应一个簇,一个类也可以对应多个簇。例如,你可以将记录分布在多个位置存储。

类-簇

这里,类Customer有两个簇:

  • USA_customers, 包含了所有美国的客户。

  • China_customers, 包含了所有中国的客户。

部署时,默认的簇是USA_customers。在类Customer上任意时候执行命令,例如INSERT语句, OrientDB都会将新数据分配给默认簇。

类-簇

INSERT语句插入新纪录到默认的USA_customers簇。插入数据到非默认簇,需要你在插入数据时指定。

当你查询Customer类时, 例如SELECT查询,举例:

Class-Cluster

OrientDB将遍历类的所有簇来进行匹配。这种情况下,如果你知道数据在哪个簇,直接指定就可以避免查询其他簇,从而可以优化查询的速度。

Class-Cluster

上图,OrientDB只扫描类CustomerChina_customers簇来进行匹配。

注意: OrientDB插入记录时选择簇的方法是可以扩展和配置的,详情看簇的选择

使用簇

OrientDB有两种簇:

  • 物理簇 (也就是本地),直接持久化写入文件系统
  • 内存簇 内容存储在内存中,易变的,当终端进程(本地命令行启动)停止或者远程的服务挂掉的时候,内容就丢失了。

大多数情况下会物理簇,因为内容要被持久化,OrientDB默认采用物理簇。

不同的簇分布在不同的服务器,将数据库中的记录物理隔离有很多好处:

  • 优化 针对一个类,只搜索部分簇,会大大提高查询速度。
  • 索引 好的分割,可以减少索引的使用。
  • 并行查询: 查询可以在多个磁盘上并行查询。
  • 分片: 可以在多个实例上存储大数据集。

增加簇Adding Clusters

当你创建类时,OrientDB会默认创建同名的簇。如果想充分利用簇的作用,可以在类上创建额外的簇。通过ALTER CLASS 语句加上ADDCLUSTER参数。

给类Customer增加一个簇,如下:

orientdb> ALTER CLASS Customer ADDCLUSTER UK_Customers

Class updated successfully

执行后,类Customer就可以覆盖英国的客户。

浏览簇的记录

簇存储了类的记录。你可以通过[BROWSE CLUSTER]浏览簇的记录,使用DISPLAY RECORD命令浏览特定的记录。

OrientDB针对默认的类也附带了一些默认的簇来存储数据。使用 CLUSTERS命令可以查看。簇ouser保存了数据库的用户数据。

查看簇ouser的记录, 执行BROWSE CLUSTER命令:

orientdb> BROWSE CLUSTER OUser

---+------+--------+--------+----------------------------------+--------+-------+
 # | @RID | @CLASS | name   | password                         | status | roles |
---+------+-------+--------+-----------------------------------+--------+-------+
 0 | #5:0 | OUser | admin  | {SHA-256}8C6976E5B5410415BDE90... | ACTIVE | [1]   |
 1 | #5:1 | OUser | reader | {SHA-256}3D0941964AA3EBDCB00CC... | ACTIVE | [1]   |
 2 | #5:2 | OUser | writer | {SHA-256}B93006774CBDD4B299389... | ACTIVE | [1]   |
---+------+--------+--------+----------------------------------+--------+-------+

这个结果和在类OUser上执行BROWSE CLASS一样,因为类OUser只有一个簇。

这个例子中,列举了数据库的所有用户。默认的用户设置不安全,提高生产环境的账户安全,参考安全.

运行BROWSE CLUSTER, 第一例显示的是标示数,可以用来查看特定记录的详细信息,例如,显示类OUser第一条记录, 执行DISPLAY RECORD命令:

orientdb> DISPLAY RECORD 0

------------------------------------------------------------------------------+
 Document - @class: OUser                      @rid: #5:0      @version: 1    |
----------+-------------------------------------------------------------------+
     Name | Value                                                             |
----------+-------------------------------------------------------------------+
     name | admin                                                             |
 password | {SHA-256}8C6976E5B5410415BDE908BD4DEE15DFB167A9C873F8A81F6F2AB... |
   status | ACTIVE                                                            |
    roles | [#4:0=#4:0]                                                       |
----------+-------------------------------------------------------------------+

牢记,这条命令依赖于上条命令BROWSE CLUSTER。你可以继续显示其他记录,但是不能显示其他类的记录,除非先执行[BROWSE CLUSTER]。