首页 > 解决方案 > OrientDB Java 批量导入

问题描述

当我使用 Java 时,OrientDB 中的批量导入存在更大的问题。

我的数据是记录 ID 和令牌的集合。每个 ID 都存在一组令牌,但令牌可以在多个 ID 中。

例子:

身份令牌

1 2,3,4

2 3,5,7

3 1,2,4

我的图表应该有两种类型的顶点:rIDClasstokenClass. 我想给每个顶点一个对应于记录 ID 和令牌的 ID。所以tokenClass顶点的总数应该是数据中唯一token的总数。(每个令牌只创建一次!)

我怎样才能意识到这个问题?我尝试了原始文档中的“自定义批量插入”,并尝试了蓝图文档中描述的“批量实现”方法。

第一种方法的问题是,OrientDB 为每个插入的标记创建一个具有自定义 ID 的单独顶点,该自定义 ID 由系统本身设置。

第二种方法的问题是,当我尝试将顶点添加到批处理图时,我无法设置相应的顶点类,另外我得到一个异常。这是我的第二种方法的代码:

BatchGraph<OrientGraph> bgraph = new BatchGraph<OrientGraph>(graph, VertexIDType.STRING, 1);
Vertex vertex1 =  bgraph.addVertex(1);
vertex1.setProperty("uid", 1);

也许有人有解决方案。

Vertex vertex2 = bgraph.addVertex(2);
vertex2.setProperty("uid", 2);

Edge edge1 = graph.addEdge(12, vertex1 , vertex2, "EdgeConnectClass");

我得到以下异常:

Exception in thread "main" java.lang.ClassCastException:
com.tinkerpop.blueprints.util.wrappers.batch.BatchGraph$BatchVertex cannot be cast to com.tinkerpop.blueprints.impls.orient.OrientVertex
    at com.tinkerpop.blueprints.impls.orient.OrientBaseGraph.addEdge(OrientBaseGraph.java:612)
    at App.indexRecords3(App.java:83)
    at App.main(App.java:47)

标签: javagraphorientdbbulkinsertbatch-insert

解决方案


我不知道我是否理解正确,但是,如果你想要这样的模式:

在此处输入图像描述

尝试这个:

Vertex vertex1 = g.addVertex("class:rIDClass");
vertex1.setProperty("uid", 1);

Vertex token2 = g.addVertex("class:tokenClass");
token2.setProperty("uid", 2);

Edge edge1 = g.addEdge("class:rIDClass", vertex1, token2, "EdgeConnectClass");

希望能帮助到你

问候


推荐阅读