在orientdb分布式数据库中进行分片

时间:2016-09-10 10:32:41

标签: orientdb

我在orientDB 2.2.6中创建了一个带有3个节点的分布式数据库,即master1,master2和master3。我修改了每个节点上的hazelcast.xml和orientdb.server.config.xml文件。我在所有3个节点上使用了一个常见的default-distributed-db-config.json,如下所示。

{
   "autoDeploy": true,
  "readQuorum": 1,
  "writeQuorum": "majority",
  "executionMode": "undefined",
  "readYourWrites": true,
  "failureAvailableNodesLessQuorum": false,
  "servers": {
    "*": "master"
  },
  "clusters": {
    "internal": {
    },
   "address": {
     "owner" : "master1",
     "servers": [ "master1" ]
   },
   "address_1": {
      "owner" : "master1",
      "servers" : [ "master1" ]
   },
    "ip": {
      "owner" : "master2",
      "servers" : [ "master2" ]
    },
   "ip_1": {
      "owner" : "master2",
      "servers" : [ "master2" ]
   },
   "id": {
      "owner" : "master3",
      "servers" : [ "master3" ]
   },
   "id_1": {
      "owner" : "master3",
      "servers" : [ "master3" ]
   },
   "*": {
      "servers": [ "<NEW_NODE>" ]
    }
  }

}

然后我按顺序在master1机器master2和master3中启动分布式服务器,让它们同步默认DB。然后我在master1机器中创建了一个数据库和三个类(地址,IP,ID)及其属性和索引。正如我在default-distributed-db-config.json文件中提到的,Address类有两个集群,它们驻留在master1机器中。 IP类有两个集群,它们位于master2机器中。

当我将值插入到Address类中时,正如预期的那样,它们将遵循循环策略进入master1机器的集群。但是当我从master2机器插入IP值时,他们在master1中创建一个集群并插入到新集群中。基本上,所有的值都进入master1机器。当我执行List Clusters时,master2和master3机器中的集群为空。

因此,我无法在三个节点上分发数据。它基本上将数据存储到单个机器中。如何分片数据?我试图插入数据的方式有什么问题吗?

由于

1 个答案:

答案 0 :(得分:0)

在当前的OrientDB版本中,不会转发写入操作(创建/更新/删除)。只读是。因此,客户端应连接到处理要将数据写入的群集的服务器。

通常,这不是问题,因为选择了本地群集,但如果要在远程服务器上的特定群集上写入,则不支持此功能。