类与集群 #

一、类(Class)概述 #

1.1 什么是类 #

类是OrientDB中组织数据的基本单位,类似于关系数据库中的表:

text
类的作用:
├── 定义数据结构
├── 组织相关记录
├── 支持继承
├── 关联集群存储
└── 定义约束规则

1.2 类的类型 #

类型 说明 基类
Document Class 普通文档类 -
Vertex Class 顶点类(图模型) V
Edge Class 边类(图模型) E

1.3 内置类 #

text
内置类:
├── V - 所有顶点的基类
├── E - 所有边的基类
├── OUser - 用户
├── ORole - 角色
├── OIdentity - 身份基类
├── OTriggered - 触发器基类
└── OFunction - 函数

二、创建类 #

2.1 基本语法 #

sql
CREATE CLASS <class-name> 
[EXTENDS <super-class>] 
[CLUSTER <cluster-name>] 
[ABSTRACT]

2.2 创建文档类 #

sql
CREATE CLASS Person
CREATE CLASS Product
CREATE CLASS Order

2.3 创建顶点类 #

sql
CREATE CLASS Person EXTENDS V
CREATE CLASS Company EXTENDS V
CREATE CLASS Product EXTENDS V

2.4 创建边类 #

sql
CREATE CLASS KNOWS EXTENDS E
CREATE CLASS WORKS_AT EXTENDS E
CREATE CLASS BOUGHT EXTENDS E

2.5 创建抽象类 #

sql
CREATE CLASS BaseEntity ABSTRACT
CREATE PROPERTY BaseEntity.id STRING
CREATE PROPERTY BaseEntity.createdAt DATETIME
CREATE PROPERTY BaseEntity.updatedAt DATETIME

2.6 创建带集群的类 #

sql
CREATE CLASS Person CLUSTER person_cluster
CREATE CLASS Person CLUSTER person_east, person_west

三、查看类 #

3.1 列出所有类 #

sql
SELECT FROM metadata:schema
SELECT expand(classes) FROM metadata:schema

3.2 查看类详情 #

sql
INFO CLASS Person

输出示例:

text
Class................: Person
Default cluster.......: person (id=12)
Supported cluster ids: [12]
Cluster selection.....: round-robin
Properties:
- name: STRING
- age: INTEGER
- email: STRING
Indexes:
- Person.name (UNIQUE)

3.3 查看类属性 #

sql
SELECT properties FROM (
    SELECT expand(classes) FROM metadata:schema
) WHERE name = 'Person'

3.4 查看类继承关系 #

sql
SELECT name, superClasses FROM (
    SELECT expand(classes) FROM metadata:schema
) WHERE superClasses IS NOT NULL

四、修改类 #

4.1 添加属性 #

sql
ALTER CLASS Person ADD name STRING
CREATE PROPERTY Person.name STRING

4.2 修改类名称 #

sql
ALTER CLASS Person RENAME User

4.3 修改类属性 #

sql
ALTER CLASS Person STRICTMODE true
ALTER CLASS Person OVERSIZE 0.5

4.4 添加超类 #

sql
ALTER CLASS Employee ADDSUPERCLASS Person

4.5 移除超类 #

sql
ALTER CLASS Employee REMOVESUPERCLASS Person

五、删除类 #

5.1 删除空类 #

sql
DROP CLASS Person

5.2 删除有数据的类 #

sql
DELETE FROM Person
DROP CLASS Person

5.3 级联删除 #

sql
DROP CLASS Person UNSAFE

5.4 删除注意事项 #

text
删除类前注意:
├── 检查是否有子类
├── 检查是否有关联的边
├── 备份重要数据
└── 确认删除操作

六、类继承 #

6.1 继承概念 #

text
继承特点:
├── 子类继承父类所有属性
├── 子类继承父类索引
├── 支持多重继承
├── 查询父类包含子类记录
└── 支持抽象类

6.2 单继承 #

sql
CREATE CLASS Person EXTENDS V
CREATE PROPERTY Person.name STRING
CREATE PROPERTY Person.age INTEGER

CREATE CLASS Employee EXTENDS Person
CREATE PROPERTY Employee.employeeId STRING
CREATE PROPERTY Employee.salary DOUBLE

CREATE CLASS Customer EXTENDS Person
CREATE PROPERTY Customer.customerId STRING
CREATE PROPERTY Customer.level STRING

6.3 多重继承 #

sql
CREATE CLASS Auditable ABSTRACT
CREATE PROPERTY Auditable.createdAt DATETIME
CREATE PROPERTY Auditable.updatedAt DATETIME

CREATE CLASS SoftDeletable ABSTRACT
CREATE PROPERTY SoftDeletable.deletedAt DATETIME
CREATE PROPERTY SoftDeletable.isDeleted BOOLEAN DEFAULT false

CREATE CLASS Order EXTENDS V, Auditable, SoftDeletable
CREATE PROPERTY Order.orderNumber STRING

6.4 继承查询 #

sql
SELECT FROM Person
SELECT FROM Employee
SELECT FROM Person WHERE @class = 'Person'
SELECT FROM Person WHERE @class IN ['Person', 'Employee', 'Customer']

6.5 继承层次查看 #

sql
SELECT name, superClasses, subClasses FROM (
    SELECT expand(classes) FROM metadata:schema
)

七、属性(Property) #

7.1 创建属性 #

sql
CREATE PROPERTY Person.name STRING
CREATE PROPERTY Person.age INTEGER
CREATE PROPERTY Person.email STRING
CREATE PROPERTY Person.salary DOUBLE
CREATE PROPERTY Person.isActive BOOLEAN
CREATE PROPERTY Person.createdAt DATETIME

7.2 属性约束 #

sql
CREATE PROPERTY Person.email STRING (MANDATORY, NOTNULL)
CREATE PROPERTY Person.age INTEGER (MIN 0, MAX 150)
CREATE PROPERTY Person.score INTEGER (DEFAULT 0)
CREATE PROPERTY Person.status STRING (REGEXP '^(active|inactive)$')

7.3 属性类型约束 #

约束 说明
MANDATORY 必须有值
NOTNULL 不能为NULL
READONLY 只读
MIN n 最小值
MAX n 最大值
DEFAULT v 默认值
REGEXP r 正则匹配

7.4 修改属性 #

sql
ALTER PROPERTY Person.name MANDATORY true
ALTER PROPERTY Person.age MIN 0
ALTER PROPERTY Person.age MAX 150
ALTER PROPERTY Person.status DEFAULT 'active'

7.5 删除属性 #

sql
ALTER CLASS Person REMOVE name
DROP PROPERTY Person.name

7.6 链接类型属性 #

sql
CREATE PROPERTY Person.employer LINK Company
CREATE PROPERTY Person.friends LINKLIST Person
CREATE PROPERTY Person.tags LINKSET Tag
CREATE PROPERTY Person.projects LINKMAP Project

7.7 嵌入类型属性 #

sql
CREATE PROPERTY Person.address EMBEDDED Address
CREATE PROPERTY Person.phoneNumbers EMBEDDEDLIST
CREATE PROPERTY Person.skills EMBEDDEDSET
CREATE PROPERTY Person.settings EMBEDDEDMAP

八、集群(Cluster)概述 #

8.1 什么是集群 #

集群是OrientDB的物理存储单元:

text
集群特点:
├── 存储记录的物理容器
├── 每个类至少有一个集群
├── 一个类可以有多个集群
├── 支持数据分片
└── 支持分布式存储

8.2 集群类型 #

类型 说明
Physical 物理存储(默认)
Memory 内存存储
Distributed 分布式集群

8.3 默认集群 #

text
创建类时自动创建:
├── 类名对应的集群
├── cluster id 自动分配
└── 默认使用 round-robin 策略

九、创建集群 #

9.1 创建物理集群 #

sql
CREATE CLUSTER person_cluster
CREATE CLUSTER person_east PHYSICAL

9.2 创建内存集群 #

sql
CREATE CLUSTER temp_cluster MEMORY

9.3 创建带ID的集群 #

sql
CREATE CLUSTER person_cluster ID 100

9.4 为类添加集群 #

sql
CREATE CLASS Person EXTENDS V
CREATE CLUSTER person_east
CREATE CLUSTER person_west
ALTER CLASS Person ADDCLUSTER person_east
ALTER CLASS Person ADDCLUSTER person_west

十、集群管理 #

10.1 查看所有集群 #

sql
SELECT FROM cluster:*
SELECT name, id, records, size FROM cluster:*

10.2 查看集群详情 #

sql
SELECT FROM cluster:person
SELECT name, id, records, size, growthFactor FROM cluster:person

10.3 查看类关联的集群 #

sql
SELECT name, clusterIds, clusterSelection FROM (
    SELECT expand(classes) FROM metadata:schema
) WHERE name = 'Person'

10.4 从类移除集群 #

sql
ALTER CLASS Person REMOVECLUSTER person_west

10.5 删除集群 #

sql
DROP CLUSTER person_west

十一、集群选择策略 #

11.1 选择策略类型 #

策略 说明
round-robin 轮询(默认)
default 使用默认集群
balanced 负载均衡

11.2 设置选择策略 #

sql
ALTER CLASS Person CLUSTERSELECTION round-robin
ALTER CLASS Person CLUSTERSELECTION balanced
ALTER CLASS Person CLUSTERSELECTION default

11.3 设置默认集群 #

sql
ALTER CLASS Person DEFAULTCLUSTER person_east

十二、数据分片 #

12.1 分片策略 #

text
数据分片场景:
├── 按地域分片
├── 按时间分片
├── 按业务分片
└── 按数据量分片

12.2 创建分片结构 #

sql
CREATE CLASS Order EXTENDS V
CREATE CLUSTER order_2024_q1
CREATE CLUSTER order_2024_q2
CREATE CLUSTER order_2024_q3
CREATE CLUSTER order_2024_q4
ALTER CLASS Order ADDCLUSTER order_2024_q1
ALTER CLASS Order ADDCLUSTER order_2024_q2
ALTER CLASS Order ADDCLUSTER order_2024_q3
ALTER CLASS Order ADDCLUSTER order_2024_q4

12.3 指定集群插入 #

sql
INSERT INTO CLUSTER:order_2024_q1 (orderDate, amount) 
VALUES ('2024-01-15', 1000)

INSERT INTO CLUSTER:order_2024_q2 (orderDate, amount) 
VALUES ('2024-04-15', 2000)

12.4 按集群查询 #

sql
SELECT FROM CLUSTER:order_2024_q1
SELECT FROM CLUSTER:order_2024_q1 WHERE orderDate > '2024-01-01'

十三、集群配置 #

13.1 设置增长因子 #

sql
ALTER CLUSTER person_east GROWTH_FACTOR 20
ALTER CLUSTER person_west GROWTH_FACTOR 50

13.2 设置文件大小 #

sql
ALTER CLUSTER person_east FILE_SIZE_MAX 1073741824

13.3 压缩集群 #

sql
COMPACT CLUSTER person_east

十四、集群统计 #

14.1 查看集群大小 #

sql
SELECT name, size, records FROM cluster:*
ORDER BY size DESC

14.2 查看记录分布 #

sql
SELECT name, records, 
       ROUND(records * 100.0 / (SELECT SUM(records) FROM cluster:*), 2) AS percentage
FROM cluster:*
WHERE name LIKE 'person%'
ORDER BY records DESC

14.3 集群性能监控 #

sql
SELECT name, 
       records, 
       size, 
       ROUND(size * 1.0 / records, 2) AS avgRecordSize
FROM cluster:*
WHERE records > 0
ORDER BY avgRecordSize DESC

十五、类与集群最佳实践 #

15.1 类设计原则 #

text
类设计原则:
├── 单一职责原则
├── 合理使用继承
├── 避免过深的继承层次
├── 使用抽象类提取公共属性
└── 合理设置属性约束

15.2 集群使用场景 #

text
集群使用建议:
├── 小数据量:使用默认集群
├── 大数据量:按业务分片
├── 地理分布:按地区分片
├── 时间序列:按时间分片
└── 高可用:分布式集群

15.3 性能优化 #

text
性能优化建议:
├── 热数据使用内存集群
├── 冷数据使用物理集群
├── 合理设置增长因子
├── 定期压缩集群
└── 监控集群大小

十六、实际应用示例 #

16.1 用户系统设计 #

sql
CREATE CLASS User EXTENDS V
CREATE PROPERTY User.id STRING (MANDATORY)
CREATE PROPERTY User.username STRING (MANDATORY, NOTNULL)
CREATE PROPERTY User.email STRING (MANDATORY, NOTNULL)
CREATE PROPERTY User.password STRING (MANDATORY)
CREATE PROPERTY User.status STRING DEFAULT 'active'
CREATE PROPERTY User.createdAt DATETIME DEFAULT sysdate()
CREATE PROPERTY User.updatedAt DATETIME

CREATE INDEX User.id UNIQUE
CREATE INDEX User.username UNIQUE
CREATE INDEX User.email UNIQUE

16.2 订单系统设计 #

sql
CREATE CLASS Order EXTENDS V
CREATE PROPERTY Order.id STRING (MANDATORY)
CREATE PROPERTY Order.userId LINK User (MANDATORY)
CREATE PROPERTY Order.status STRING DEFAULT 'pending'
CREATE PROPERTY Order.totalAmount DECIMAL
CREATE PROPERTY Order.createdAt DATETIME DEFAULT sysdate()

CREATE CLASS OrderItem EXTENDS V
CREATE PROPERTY OrderItem.orderId LINK Order (MANDATORY)
CREATE PROPERTY OrderItem.productId LINK Product (MANDATORY)
CREATE PROPERTY OrderItem.quantity INTEGER (MIN 1)
CREATE PROPERTY OrderItem.price DECIMAL

CREATE CLASS CONTAINS EXTENDS E

16.3 分片存储示例 #

sql
CREATE CLASS Log EXTENDS V
CREATE PROPERTY Log.level STRING
CREATE PROPERTY Log.message STRING
CREATE PROPERTY Log.createdAt DATETIME

CREATE CLUSTER log_2024_01
CREATE CLUSTER log_2024_02
ALTER CLASS Log ADDCLUSTER log_2024_01
ALTER CLASS Log ADDCLUSTER log_2024_02

INSERT INTO CLUSTER:log_2024_01 (level, message, createdAt)
VALUES ('INFO', 'System started', '2024-01-01 00:00:00')

十七、总结 #

类与集群要点:

概念 要点
数据的逻辑组织单位
继承 支持单继承和多继承
属性 定义字段和约束
集群 数据的物理存储单位
分片 使用多集群实现数据分片

下一步,让我们学习文档操作!

最后更新:2026-03-27