【问题标题】:OrientDB embedded and distributedOrientDB 嵌入式和分布式
【发布时间】:2016-04-25 18:44:12
【问题描述】:

我应该在 Java-Groovy 应用程序中以嵌入式模式使用 OrientDB。同时,我必须在几台机器上分发这个 java-groovy 应用程序。

问题是:是否可以从所有机器访问同一个数据库?换句话说:在OrientDB中是否可以有一个嵌入式模式的分布式数据库?

谢谢

【问题讨论】:

    标签: distributed orientdb


    【解决方案1】:

    我知道我回答这个问题有点晚了,但我希望这会帮助其他人在谷歌上搜索同样的问题:

    我能够在嵌入式模式下运行 OrientDB 并启用集群(分发)。以下是完整代码

    System.setProperty("ORIENTDB_HOME","/your path to OrientDB/orientdb-community-1.7-rc1");
    
      OServer server = OServerMain.create();
      server.startup(
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" + 
       "<orient-server>\n" + 
       "    <handlers>\n" +  
       "        <!-- CLUSTER PLUGIN, TO TURN ON SET THE 'ENABLED' PARAMETER TO 'true' -->\n" + 
       "        <handler class=\"com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin\">\n" + 
       "            <parameters>\n" + 
       "                <!-- <parameter name=\"nodeName\" value=\"europe1\" /> -->\n" + 
       "                <parameter name=\"enabled\" value=\"true\" />\n" + 
       "                <parameter name=\"configuration.db.default\" value=\"${ORIENTDB_HOME}/config/default-distributed-db-config.json\" />\n" + 
       "                <parameter name=\"configuration.hazelcast\" value=\"${ORIENTDB_HOME}/config/hazelcast.xml\" />\n" + 
       "                <parameter name=\"conflict.resolver.impl\" value=\"com.orientechnologies.orient.server.distributed.conflict.ODefaultReplicationConflictResolver\" />\n" + 
       "                \n" + 
       "                <!-- PARTITIONING STRATEGIES -->\n" + 
       "                <parameter name=\"sharding.strategy.round-robin\" value=\"com.orientechnologies.orient.server.hazelcast.sharding.strategy.ORoundRobinPartitioninStrategy\" />\n" + 
       "            </parameters>\n" + 
       "        </handler>\n" + 
       "        <!-- AUTOMATIC BACKUP, TO TURN ON SET THE 'ENABLED' PARAMETER TO 'true' -->\n" + 
       "        <handler class=\"com.orientechnologies.orient.server.handler.OAutomaticBackup\">\n" + 
       "            <parameters>\n" + 
       "                <parameter name=\"enabled\" value=\"false\" />\n" + 
       "                <parameter name=\"delay\" value=\"4h\" />\n" + 
       "                <parameter name=\"target.directory\" value=\"backup\" />\n" + 
       "                <parameter name=\"target.fileName\" value=\"${DBNAME}-${DATE:yyyyMMddHHmmss}.json\" /><!-- ${DBNAME} AND ${DATE:} VARIABLES ARE SUPPORTED -->\n" + 
       "                <parameter name=\"db.include\" value=\"\" /><!-- DEFAULT: NO ONE, THAT MEANS ALL DATABASES. USE COMMA TO SEPARATE MULTIPLE DATABASE NAMES -->\n" + 
       "                <parameter name=\"db.exclude\" value=\"\" /><!-- USE COMMA TO SEPARATE MULTIPLE DATABASE NAMES -->\n" + 
       "            </parameters>\n" + 
       "        </handler>\n" + 
       "        <!-- MAIL, TO TURN ON SET THE 'ENABLED' PARAMETER TO 'true' -->\n" + 
       "        <handler class=\"com.orientechnologies.orient.server.plugin.mail.OMailPlugin\">\n" + 
       "            <parameters>\n" + 
       "                <parameter name=\"enabled\" value=\"true\" />\n" + 
       "                <!-- CREATE MULTIPLE PROFILES WITH profile.<name>... -->\n" + 
       "                <parameter name=\"profile.default.mail.smtp.host\" value=\"localhost\" />\n" + 
       "                <parameter name=\"profile.default.mail.smtp.port\" value=\"25\" />\n" + 
       "                <parameter name=\"profile.default.mail.smtp.auth\" value=\"true\" />\n" + 
       "                <parameter name=\"profile.default.mail.smtp.starttls.enable\" value=\"true\" />\n" + 
       "                <parameter name=\"profile.default.mail.smtp.user\" value=\"\" />\n" + 
       "                <parameter name=\"profile.default.mail.smtp.password\" value=\"\" />\n" + 
       "                <parameter name=\"profile.default.mail.date.format\" value=\"yyyy-MM-dd HH:mm:ss\" />\n" + 
       "            </parameters>\n" + 
       "        </handler>\n" + 
       "        <!-- SERVER SIDE SCRIPT INTERPRETER. WARNING! THIS CAN BE A SECURITY HOLE: ENABLE IT ONLY IF CLIENTS ARE TRUCT, TO TURN ON SET THE 'ENABLED' PARAMETER \n" + 
       "            TO 'true' -->\n" + 
       "        <handler class=\"com.orientechnologies.orient.server.handler.OServerSideScriptInterpreter\">\n" + 
       "            <parameters>\n" + 
       "                <parameter name=\"enabled\" value=\"false\" />\n" + 
       "            </parameters>\n" + 
       "        </handler>\n" + 
       "    </handlers>\n" + 
       "    <network>\n" + 
       "        <protocols>\n" + 
       "            <!-- Default registered protocol. It reads commands using the HTTP protocol and write data locally -->\n" + 
       "            <protocol name=\"binary\" implementation=\"com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary\" />\n" + 
       "            <protocol name=\"http\" implementation=\"com.orientechnologies.orient.server.network.protocol.http.ONetworkProtocolHttpDb\" />\n" + 
       "        </protocols>\n" + 
       "        <listeners>\n" + 
       "            <listener protocol=\"binary\" ip-address=\"0.0.0.0\" port-range=\"2424-2430\" />\n" + 
       "            <listener protocol=\"http\" ip-address=\"0.0.0.0\" port-range=\"2480-2490\">\n" + 
       "                <parameters>\n" + 
       "                    <!-- Connection's custom parameters. If not specified the global configuration will be taken -->\n" + 
       "                    <parameter name=\"network.http.charset\" value=\"utf-8\" />\n" + 
       "                    <!-- Define additional HTTP headers to always send as response -->\n" + 
       "                    <!-- Allow cross-site scripting -->\n" + 
       "                    <!-- parameter name=\"network.http.additionalResponseHeaders\" value=\"Access-Control-Allow-Origin: *;Access-Control-Allow-Credentials: true\" /-->\n" + 
       "                </parameters>\n" + 
       "                <commands>\n" + 
       "                    <command\n" + 
       "                        pattern=\"GET|www GET|studio/ GET| GET|*.htm GET|*.html GET|*.xml GET|*.jpeg GET|*.jpg GET|*.png GET|*.gif GET|*.js GET|*.css GET|*.swf GET|*.ico GET|*.txt GET|*.otf GET|*.pjs GET|*.svg\"\n" + 
       "                        implementation=\"com.orientechnologies.orient.server.network.protocol.http.command.get.OServerCommandGetStaticContent\">\n" + 
       "                        <parameters>\n" + 
       "                            <!-- Don't cache html resources in development mode -->\n" + 
       "                            <entry name=\"http.cache:*.htm *.html\" value=\"Cache-Control: no-cache, no-store, max-age=0, must-revalidate\\r\\nPragma: no-cache\" />\n" + 
       "                            <!-- Default caching -->\n" + 
       "                            <entry name=\"http.cache:default\" value=\"Cache-Control: max-age=120\" />\n" + 
       "                        </parameters>\n" + 
       "                    </command>\n" + 
       "                </commands>\n" + 
       "            </listener>\n" + 
       "        </listeners>\n" + 
       "        <cluster>\n" + 
       "        </cluster>\n" + 
       "    </network>\n" + 
       "    <storages>\n" + 
       "    </storages>\n" + 
       "    <users>\n" + 
       "    </users>\n" + 
       "    <properties>\n" + 
       "        <!-- Uses the Hazelcast's distributed cache as 2nd level cache -->\n" + 
       "        <!-- <entry name=\"cache.level2.impl\" value=\"com.orientechnologies.orient.server.hazelcast.OHazelcastCache\" /> -->\n" + 
       "\n" + 
       "        <!-- DATABASE POOL: size min/max -->\n" + 
       "        <entry name=\"db.pool.min\" value=\"1\" />\n" + 
       "        <entry name=\"db.pool.max\" value=\"20\" />\n" + 
       "        \n" + 
       "        <!-- LEVEL1 AND 2 CACHE: enable/disable and set the size as number of entries -->\n" + 
       "        <entry name=\"cache.level1.enabled\" value=\"false\" />\n" + 
       "        <entry name=\"cache.level1.size\" value=\"1000\" />\n" + 
       "        <entry name=\"cache.level2.enabled\" value=\"true\" />\n" + 
       "        <entry name=\"cache.level2.size\" value=\"1000\" />\n" + 
       "        \n" + 
       "        <!-- PROFILER: configures the profiler as <seconds-for-snapshot>,<archive-snapshot-size>,<summary-size>  -->\n" + 
       "        <entry name=\"profiler.enabled\" value=\"true\" />\n" + 
       "        <!-- <entry name=\"profiler.config\" value=\"30,10,10\" />  -->     \n" + 
       "\n" + 
       "        <!-- LOG: enable/Disable logging. Levels are: finer, fine, finest, info, warning -->\n" + 
       "        <entry name=\"log.console.level\" value=\"info\" />\n" + 
       "        <entry name=\"log.file.level\" value=\"fine\" />\n" + 
       "    </properties>\n" + 
       "</orient-server>");
      server.activate();
    

    我们需要添加以下jars

    concurrentlinkedhashmap-lru-1.3.1.jar
    hazelcast-3.1.jar
    javassist-3.16.1-GA.jar
    orient-commons-1.7-rc1.jar
    orientdb-client-1.7-rc1.jar
    orientdb-core-1.7-rc1.jar
    orientdb-distributed-1.7-rc1.jar
    orientdb-enterprise-1.7-rc1.jar
    orientdb-object-1.7-rc1.jar
    orientdb-server-1.7-rc1.jar
    

    【讨论】:

      【解决方案2】:

      是的,看看:https://github.com/orientechnologies/orientdb/wiki/Embedded-Server。通过分布式配置,多个嵌入式服务器可以跨网络同步。

      【讨论】:

      • 使用嵌入式 OrientDB 时,如果我在每个线程上使用不同的 ODatabaseDocumentTx 或 ODatabaseGraphTx 实例,则可以从多个线程访问同一个数据库。这样对吗?我问你这个,因为我也可以读到,当使用“本地”时,不能从不同的进程访问同一个数据库。谢谢。
      • 线程始终是同步的,但每个线程始终使用一个 ODatabase* 实例。
      • 链接失效了,这是新链接:orientdb.com/docs/2.1/Embedded-Server.html
      • 看起来此解决方案需要付费企业许可证。可能应该在答案中提及。
      • 绝对不是,这与社区版一起工作,任何使用都是免费的(Apache2 许可证)
      【解决方案3】:

      我创建了一个小示例项目,演示如何设置嵌入式 orientdb 集群。

      该示例由位于两个不同项目中的两个测试组成。每个测试都会启动一个新的 orientdb 服务器。其中一个测试写入数据,第二个测试读取已写入的数据。

      我仍在尝试找出一些怪癖,但到目前为止它能够说明基本原理。

      https://github.com/Jotschi/orientdb-cluster-test

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-18
        • 1970-01-01
        相关资源
        最近更新 更多