簇的选择
当你对应一个类创建一个新的记录时,OrientDB自动选择一个簇来存储这条记录。有一些配置策略,你可以用来决定OrientDB选择合适的簇来存储新的记录。
default
选择类中的属性defaultClusterId
对应的簇。 1.7以前, 这是默认的方法。round-robin
按照配置的簇的列表,依次记录。balanced
根据类配置的簇,校验每个簇的记录数,将新记录分配到最小的簇。 为了避免导致插入延迟的问题,OrientDB 每隔5s甚至更长计算一次。local
当数据库分布式部署时,会选择当前节点的master簇。这样可以有助于避免冲突,减少节点间远程调用的网络延迟。
你可以通过ALTER CLASS...CLUSTERSELECTION
命令来修改策略。例如:
orientdb> ALTER CLASS Account CLUSTERSELECTION round-robin
自定义簇选择策略
除了上面列出的策略,你可以通过JAVA API自己开发策略。
通过实现
OClusterSelectionStrategy
接口,来自定义策略,代码如下:package mypackage; public class RandomSelectionStrategy implements OClusterSelectionStrategy { public int getCluster(final OClass iClass, final ODocument doc) { final int[] clusters = iClass.getClusterIds(); // RETURN A RANDOM CLUSTER ID IN THE LIST return new Random().nextInt(clusters.length); } public String getName(){ return "random"; } }
牢记
getCluster()
方法也可以接受ODocument
作为参数,这样就可以基于文档的内容决定存储的clusterId
。把你的策略进行注册,在源代码的
core
模块的目录META-INF/service
下,找到文件com.orientechnologies.orient.core.metadata.schema.clusterselection.OClusterSelectionStrategy
(没有就创建),添加如下内容:mypackage.RandomSelectionStrategy
默认就包含如下内容:
com.orientechnologies.orient.core.metadata.schema.clusterselection.ORoundRobinClusterSelectionStrategy com.orientechnologies.orient.core.metadata.schema.clusterselection.ODefaultClusterSelectionStrategy com.orientechnologies.orient.core.metadata.schema.clusterselection.OBalancedClusterSelectionStrategy
在数据库的命令行,通过
ALTER CLASS...CLUSTERSELECTION
命令指定策略,random
对应上面的getName()
方法。orientdb>
ALTER CLASS Employee CLUSTERSELECTION random