在Orientdb中以分布式模式创建数据库 [英] Creating a database in Orientdb in distributed mode

查看:206
本文介绍了在Orientdb中以分布式模式创建数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们的系统以编程方式创建OrientDB数据库,并为每个客户使用一个数据库(在任何人放弃使用此设计之前,原因是安全性,在数据中心/区域之间移动某些客户/数据的可能性以及将其迁移到内部部署的可能性)。

Our system creates OrientDB databases programmatically and uses one database for each customer (before anyone jump on dismissing this design, the reasons are security, possibility to move certain customer/data between datacenters/regions and the possibility to relocation to on-premise).

这在OrientDB中以单模式运行时效果很好。但是,当数据库以分布式模式设置时(亚马逊上有3台服务器)。温和地说,这种行为很奇怪。我知道文档没有对此表示任何支持,但是我也找不到任何不支持的信息。

This works great in OrientDB in single mode. However, when the database is setup in distributed mode (3 servers, on amazon). The behaviour is, to put it mildly, weird. I know the docs doesn't say anything about this being supported, but I couldn't find anything that says it doesn't either.

有时数据库可以正常创建,但客户端会无限期锁定(在 OAdaptiveLock.lock()中)。有时需要重新启动整个集群才能使用数据库,有时,就在撰写本文时,一个OrientDB节点似乎在与其他节点同步后自行关闭(地址[1.2.3.4]:2434为SHUTTING_DOWN [LifecycleService] -> 正在强制终止... [节点] )。错误消息由stacktrace进行处理(见下文)。

Sometimes the database is created fine, but the client locks indefinitely (in OAdaptiveLock.lock()). Sometimes the whole cluster needs to be restarted to be able to use the database and sometimes, as it is as the time of writing, one OrientDB node shuts down by itself after it seems to be synching with the others (Address[1.2.3.4]:2434 is SHUTTING_DOWN [LifecycleService] -> Terminating forcefully... [Node]). The error message is proceeded by a stacktrace (see below).

所以,对我的问题:


  1. OrientDB是否以分布式模式在线支持数据库创建?

  2. 如果是,我该怎么做?

  3. 如果没有,将来是否有计划支持此计划?

预先感谢!

./ Anders

./Anders

Stacktrace:

Stacktrace:

2016-01-28 14:00:01:395 SEVER [infogile02] error on creating cluster 'superclassesedge_infogile02' in class 'superClassesEdge':  [OHazelcastPlugin][infogile02] Error on starting distributed plugin
com.orientechnologies.orient.server.distributed.ODistributedException: com.orientechnologies.orient.server.distributed.ODistributedException: Error on creating cluster 'superclassesedge_infogile02' in class 'superClassesEdge'
    at com.orientechnologies.orient.server.hazelcast.OHazelcastDistributedDatabase.configureDatabase(OHazelcastDistributedDatabase.java:241)
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installDatabaseFromNetwork(OHazelcastPlugin.java:1131)
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.requestDatabase(OHazelcastPlugin.java:971)
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installDatabase(OHazelcastPlugin.java:908)
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installNewDatabases(OHazelcastPlugin.java:1468)
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.startup(OHazelcastPlugin.java:185)
    at com.orientechnologies.orient.server.OServer.registerPlugins(OServer.java:979)
    at com.orientechnologies.orient.server.OServer.activate(OServer.java:346)
    at com.orientechnologies.orient.server.OServerMain.main(OServerMain.java:41)
Caused by: com.orientechnologies.orient.server.distributed.ODistributedException: Error on creating cluster 'superclassesedge_infogile02' in class 'superClassesEdge'
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installLocalClusterPerClass(OHazelcastPlugin.java:1631)
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installDbClustersForLocalNode(OHazelcastPlugin.java:1300)
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin$2.call(OHazelcastPlugin.java:1134)
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin$2.call(OHazelcastPlugin.java:1131)
    at com.orientechnologies.orient.server.hazelcast.OHazelcastDistributedDatabase.configureDatabase(OHazelcastDistributedDatabase.java:239)
    ... 8 more
Caused by: com.orientechnologies.orient.core.exception.ODatabaseException: Error on saving record #0:1
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.executeSaveRecord(ODatabaseDocumentTx.java:2044)
    at com.orientechnologies.orient.core.tx.OTransactionNoTx.saveRecord(OTransactionNoTx.java:159)
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.save(ODatabaseDocumentTx.java:2568)
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.save(ODatabaseDocumentTx.java:121)
    at com.orientechnologies.orient.core.record.impl.ODocument.save(ODocument.java:1768)
    at com.orientechnologies.orient.core.record.impl.ODocument.save(ODocument.java:1764)
    at com.orientechnologies.orient.core.metadata.schema.OSchemaShared$1.call(OSchemaShared.java:1213)
    at com.orientechnologies.orient.core.db.OScenarioThreadLocal.executeAsDistributed(OScenarioThreadLocal.java:71)
    at com.orientechnologies.orient.core.metadata.schema.OSchemaShared.saveInternal(OSchemaShared.java:1208)
    at com.orientechnologies.orient.core.metadata.schema.OSchemaShared.releaseSchemaWriteLock(OSchemaShared.java:642)
    at com.orientechnologies.orient.core.metadata.schema.OClassImpl.releaseSchemaWriteLock(OClassImpl.java:1824)
    at com.orientechnologies.orient.core.metadata.schema.OClassImpl.releaseSchemaWriteLock(OClassImpl.java:1819)
    at com.orientechnologies.orient.core.metadata.schema.OClassImpl.addCluster(OClassImpl.java:1088)
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installLocalClusterPerClass(OHazelcastPlugin.java:1624)
    ... 12 more
Caused by: java.lang.NullPointerException
    at com.orientechnologies.orient.core.storage.impl.local.paginated.atomicoperations.OAtomicOperationsManager.endAtomicOperation(OAtomicOperationsManager.java:148)
    at com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage.doUpdateRecord(OAbstractPaginatedStorage.java:2046)
    at com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage.updateRecord(OAbstractPaginatedStorage.java:971)
    at com.orientechnologies.orient.server.distributed.ODistributedStorage.updateRecord(ODistributedStorage.java:708)
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.executeSaveRecord(ODatabaseDocumentTx.java:2005)
    ... 25 more

2016-01-28 14:00:01:398 INFO  [10.0.9.105]:2434 [orientdb] [3.5.3] Address[10.0.9.105]:2434 is SHUTTING_DOWN [LifecycleService]
2016-01-28 14:00:01:398 WARNI [10.0.9.105]:2434 [orientdb] [3.5.3] Terminating forcefully... [Node]
2016-01-28 14:00:01:399 INFO  [10.0.9.105]:2434 [orientdb] [3.5.3] Shutting down connection manager... [Node]


推荐答案

代表tl; dr的严重情况。 Orientdb中有关分布式体系结构的文档明确指出在自动创建集群时在多个节点上创建数据库可能会导致同步问题。请先创建数据库,然后才能在分布式模式下运行。

Severe case of tl;dr on by behalf. Docs on distributed architecture in Orientdb clearly states "creation of a database on multiple nodes could cause synchronization problems when clusters are automatically created. Please create the databases before to run in distributed mode" but I didn't read that far.

在文档中,建议的解决方案似乎是分区图(此处 http://orientdb.com/docs/2.0/orientdb.wiki/Partitioned-Graphs.html )。该解决方案并不能真正解决我们的所有问题,但是从理论上讲已经足够了。

By the docs, the suggested solution seems to be "Partitioned Graphs" (described here http://orientdb.com/docs/2.0/orientdb.wiki/Partitioned-Graphs.html). That solution doesn't really address all our concerns, but is in theory good enough.

但是,实际上这是行不通的,因为交易需要对它进行大量的重写。需要以不同的方式进行管理。另一主题中的更多内容。...

However, practically that doesn't work, it requires a significant rewrite since the transactions needs to be managed differently. More on that in another topic....

这篇关于在Orientdb中以分布式模式创建数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆