gMaster的数据划分策略有4种:主宾语随机划分、谓词随机划分、主宾语WorkLoad动态划分、谓词WorkLoad动态划分。
1 框架结构
gMaster数据库基本架构采用主-从架构,主节点负责算法的实现和任务/数据分派,从节点每个节点有一个gStore实例,管理本节点的子图。
对于建立数据库、增加三元组、删除三元组,主节点决定每个三元组被发送到何节点,从节点各自对自己接收的数据调用gStore相关功能来建立数据库/增加三元组/删除三元组。
2 划分策略
根据三元组何部分划分为两类:根据主语宾语决定、根据谓语决定。
划分节点时,1种是根据对主语、宾语、谓语计算hash值与节点数取模确认节点,1种是指定节点ID,通过ID与节点数取模确认节点。根据用户是否自定义分为两种。与前两种相乘,一共4种策略。
在构建数据库时,假设我们使用主语与宾语决定的策略
Hash(<Alice> )=Hash(<Bob>)=1 Hash(<Coral>)=2 则有 <Alice> <Partner> <Bob> -> 1(分配到一个节点) <Bob> <Partner> <Coral> -> 1 & 2(分配到两个节点) |
gMaster在构建数据库时,在第二步切割页面,选择划分策略:主宾语随机划分、谓词随机划分、主宾语WorkLoad动态划分、谓词WorkLoad动态划分。
主宾语随机划分:通过对三元组的主语、宾语计算hash值与节点数取模,根据模值分配到对应的文件。如果主语、宾语模值相等,该三元组只分配到一个节点。如果主语、宾语模值不相等,该三元组分配到两个节点。
谓词随机划分:通过对三元组的谓词计算hash值与节点数取模,根据模值分配到对应的节点。
主宾语WorkLoad动态划分:选择该策略时,策略配置文件栏位显示【上传】按扭,点击后,可上传自定义的策略文件。文件格式为<entity>\t{Node_id},entity为三元组主语或宾语,Node_id为节点id(数字类型),把计划分配到同一节点的节点id配置为相同。后台通过配置的节点id与节点数取模,根据模值分配到对应的节点。
谓词WorkLoad动态划分:选择该策略时,策略配置文件栏位显示【上传】按扭,点击后,可上传自定义的策略文件。文件格式为<predicate>\t{Node_id},predicate为三元组谓语,Node_id为节点id(数字类型),把计划分配到同一节点的节点id配置为相同。后台通过配置的节点id与节点数取模,根据模值分配到对应的节点。
综上所诉,WorkLoad动态划分策略需要手动配置策略文件,我们一般情况下使用随机划分策略。主宾语随机划分有数据膨胀情况,谓词随机划分在谓语较少情况下,可能导致某些节点无数据或数据分布不均匀。具体采用哪个策略需要根据实际数据情况而定。
若大家在实际项目中需要使用gMaster可联系运营同学或者发送邮件进行项目层面合作沟通。