簇
簇是存储记录的地方。 类对应传统文档数据库中的集合(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
查询,举例:
OrientDB将遍历类的所有簇来进行匹配。这种情况下,如果你知道数据在哪个簇,直接指定就可以避免查询其他簇,从而可以优化查询的速度。
上图,OrientDB只扫描类Customer
的China_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
]。