tinkerpop(2) 使用java调用tinkerpop,存储到derby数据库
2015-06-12 18:13
701 查看
1,关于tinkerpop
本文原文连接: /article/1665667.html 转载请注明出处!之前体验了下tinkerpop的console服务。
存储数据,然后进行查询数据。
之前写的文章:
/article/1665668.html
2,关于blueprints
Blueprints是一组针对属性图数据模型的接口、实现、测试套件,有些类似于JDBC,不同之处在于Blueprints是针对图形数据库的。Blueprints提供了一组通用的接口,允许开发者在他们的图形数据库后端即插即用。
这个图表示了blueprints的位置,在最底层,决定数据存储。
wiki参考:
https://github.com/tinkerpop/blueprints/wiki
其中blueprints支持的存储:
TinkerGraph (TinkerGraph)
Neo4j Implementation (Neo4jGraph)
Neo4jHA Implementation (Neo4jHaGraph)
Neo4jBatch Implementation (Neo4jBatchGraph)
Sail Implementation (SailGraph)
Sparksee Implementation (SparkseeGraph)
Rexster Implementation (RexsterGraph)
Accumulo Implementation (AccumuloGraph – 3rd party – implements Blueprints 2.4.0)
ArangoDB Implementation (ArangoDBGraph – 3rd party – implements Blueprints 2.3.0)
Bitsy (BitsyGraph – 3rd party – implements Blueprints 2.4.0)
Bigdata (BigdataGraph – 3rd party – implements Blueprints 2.5.0)
FluxGraph - Datomic Implementation (FluxGraph – 3rd party – implements Blueprints 2.1.0)
FoundationDB Implementation (FoundationDBGraph – 3rd party – implements Blueprints 2.4.0)
InfiniteGraph Implementation (IGGraph – 3rd party – implements Blueprints 2.1.0)
JPA Implementation (JpaGraph – 3rd party – implements Blueprints 2.5.0)
MongoDB Implementation (MongoDBGraph – 3rd party – implements Blueprints 2.3.0)
Oracle NoSQL Implementation (KVGraph – 3rd party – implements Blueprints 2.1.0)
OrientDB Implementation (OrientGraph – 3rd party – implements Blueprints 2.4.0)
SQL/JDBC Implementation – 3rd party – implements Blueprints 2.4.0)
Titan Implementation (TitanGraph – 3rd party – implements Blueprints 2.3.0)
3,配置依赖包
maven依赖:[code]<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>tinkerpop-demo</groupId> <artifactId>tinkerpop-demo</artifactId> <version>1.0</version> <!-- https://maven.apache.org/guides/mini/guide-multiple-repositories.html 增加wingnest-repo repo。 --> <repositories> <repository> <id>wingnest-repo</id> <name>wingnest repo</name> <url>http://www.wingnest.com/mvn-repo/</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.apache.tinkerpop</groupId> <artifactId>gremlin-core</artifactId> <version>3.0.0.M9-incubating</version> </dependency> <dependency> <groupId>org.apache.tinkerpop</groupId> <artifactId>gremlin-driver</artifactId> <version>3.0.0.M9-incubating</version> </dependency> <dependency> <groupId>com.tinkerpop.blueprints</groupId> <artifactId>blueprints-core</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>com.wingnest.blueprints</groupId> <artifactId>blueprints-jpa-graph</artifactId> <version>2.5.0_01</version> </dependency> <!-- add hibernate dependency --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> <scope>test</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.6.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <version>10.11.1.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derbytools</artifactId> <version>10.11.1.1</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.10.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.3.10.Final</version> </dependency> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <version>10.11.1.1</version> </dependency> </dependencies> <!-- 插件管理 --> <build> <sourceDirectory>src/main/java</sourceDirectory> <!-- 设置路径,读取路径问题. --> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.4</version> </plugin> </plugins> </pluginManagement> </build> </project>
测试代码:
[code]package com.tinkerpop.demo; import com.tinkerpop.blueprints.Direction; import com.tinkerpop.blueprints.Edge; import com.tinkerpop.blueprints.Graph; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.blueprints.impls.tg.TinkerGraph; import com.wingnest.blueprints.impls.jpa.JpaGraph; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.File; import java.util.HashMap; import java.util.Map; /** * */ public class TinkerPopDemo { private JpaGraph jpaGraph = null; @Before public void setUp() { //初始化jpa。保存到数据库中。使用hibernate 自动创建表结构。 //如果要使用mysql,这里修改属性。 Map<String, Object> props = new HashMap<String, Object>(); props.put("javax.persistence.jdbc.url", String.format("jdbc:derby:db/HibernateUnit_test_perf;create=true")); jpaGraph = new JpaGraph("HibernateUnit", props); } @After public void tearDown() throws Exception { //关闭 jpaGraph.shutdown(); } @Test public void testCreate() { //创建张三数据 Vertex zhangsan = jpaGraph.addVertex(null); zhangsan.setProperty("name", "zhangsan"); System.out.println("zhangsan:" + zhangsan.getId()); //创建李四数据 Vertex lisi = jpaGraph.addVertex(null); lisi.setProperty("name", "lisi"); System.out.println("lisi:" + lisi.getId()); //创建王五数据 Vertex wangwu = jpaGraph.addVertex(null); wangwu.setProperty("name", "wangwu"); System.out.println("wangwu:" + wangwu.getId()); //设置李四和王五朋友关系,friend是连接的名字,可以随意取。 Edge friend1 = jpaGraph.addEdge(null, zhangsan, lisi, "friend"); //设置王五和李四朋友关系 Edge friend2 = jpaGraph.addEdge(null, wangwu, lisi, "friend"); System.out.println("create finish"); } @Test public void testQuery() { //查询全部数据。 queryAll(); queryZhansanFriends(); System.out.println("query finish"); } private void queryAll() { Iterable<Vertex> allVertex = jpaGraph.getVertices(); System.out.println("######################query all######################"); for (Vertex vertex : allVertex) { System.out.print("name:" + vertex.getProperty("name")); System.out.println(",id:" + vertex.getId()); } } private void queryZhansanFriends() { Vertex zhangsan = jpaGraph.getVertex(1); System.out.println("######################query zhangsan friends######################"); Iterable<Vertex> zhansanFriends = zhangsan.getVertices(Direction.OUT, "friend"); for (Vertex vertex : zhansanFriends) { System.out.print("name:" + vertex.getProperty("name")); System.out.println(",id:" + vertex.getId()); } } @Test public void testDelete() { Vertex lisi = jpaGraph.getVertex(2); jpaGraph.removeVertex(lisi); //删除之后,查询全部。 queryAll(); queryZhansanFriends(); } }
运行结果:
[code]SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Jun 12, 2015 5:19:11 PM org.hibernate.ejb.HibernatePersistence logDeprecation WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. Jun 12, 2015 5:19:11 PM org.hibernate.ejb.HibernatePersistence logDeprecation WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. Jun 12, 2015 5:19:11 PM org.hibernate.ejb.HibernatePersistence logDeprecation WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. Jun 12, 2015 5:19:11 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation INFO: HHH000204: Processing PersistenceUnitInfo [ name: HibernateUnit ...] Jun 12, 2015 5:19:11 PM org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {4.3.10.Final} Jun 12, 2015 5:19:11 PM org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found Jun 12, 2015 5:19:11 PM org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist Jun 12, 2015 5:19:12 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> INFO: HCANN000001: Hibernate Commons Annotations {4.0.5.Final} Jun 12, 2015 5:19:13 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) Jun 12, 2015 5:19:13 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000401: using driver [org.apache.derby.jdbc.EmbeddedDriver] at URL [jdbc:derby:db/HibernateUnit_test_perf;create=true] Jun 12, 2015 5:19:13 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000046: Connection properties: {user=admin, password=****} Jun 12, 2015 5:19:13 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000006: Autocommit mode: false Jun 12, 2015 5:19:13 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 20 (min=1) Jun 12, 2015 5:19:14 PM org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.DerbyTenSevenDialect Jun 12, 2015 5:19:14 PM org.hibernate.cfg.annotations.reflection.JPAOverriddenAnnotationReader checkForOrphanProperties WARN: HHH000207: Property com.wingnest.blueprints.impls.jpa.internal.models.BpJpaElement.propMap not found in class but described in <mapping-file/> (possible typo error) Jun 12, 2015 5:19:14 PM org.hibernate.cfg.annotations.reflection.JPAOverriddenAnnotationReader checkForOrphanProperties WARN: HHH000207: Property com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaIndexItem.indexName not found in class but described in <mapping-file/> (possible typo error) Jun 12, 2015 5:19:14 PM org.hibernate.cfg.annotations.reflection.JPAOverriddenAnnotationReader checkForOrphanProperties WARN: HHH000207: Property com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaKeyIndex.keyIndexedItems not found in class but described in <mapping-file/> (possible typo error) Jun 12, 2015 5:19:14 PM org.hibernate.cfg.annotations.reflection.JPAOverriddenAnnotationReader checkForOrphanProperties WARN: HHH000207: Property com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaIndex.indexClassName not found in class but described in <mapping-file/> (possible typo error) Jun 12, 2015 5:19:14 PM org.hibernate.cfg.annotations.reflection.JPAOverriddenAnnotationReader checkForOrphanProperties WARN: HHH000207: Property com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaIndex.indexItems not found in class but described in <mapping-file/> (possible typo error) Jun 12, 2015 5:19:14 PM org.hibernate.cfg.annotations.reflection.JPAOverriddenAnnotationReader checkForOrphanProperties WARN: HHH000207: Property com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaIndexBase.version not found in class but described in <mapping-file/> (possible typo error) Jun 12, 2015 5:19:14 PM org.hibernate.cfg.annotations.reflection.JPAOverriddenAnnotationReader checkForOrphanProperties WARN: HHH000207: Property com.wingnest.blueprints.impls.jpa.internal.models.BpJpaProperty.keyName not found in class but described in <mapping-file/> (possible typo error) Jun 12, 2015 5:19:14 PM org.hibernate.cfg.annotations.reflection.JPAOverriddenAnnotationReader checkForOrphanProperties WARN: HHH000207: Property com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaKeyIndexedProperty.propertyId not found in class but described in <mapping-file/> (possible typo error) Jun 12, 2015 5:19:14 PM org.hibernate.cfg.annotations.reflection.JPAOverriddenAnnotationReader checkForOrphanProperties WARN: HHH000207: Property com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaKeyIndexedProperty.keyName not found in class but described in <mapping-file/> (possible typo error) Jun 12, 2015 5:19:14 PM org.hibernate.cfg.annotations.reflection.JPAOverriddenAnnotationReader checkForOrphanProperties WARN: HHH000207: Property com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaKeyIndexedProperty.elementType not found in class but described in <mapping-file/> (possible typo error) Jun 12, 2015 5:19:14 PM org.hibernate.cfg.annotations.reflection.JPAOverriddenAnnotationReader checkForOrphanProperties WARN: HHH000207: Property com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaKeyIndexedProperty.elementId not found in class but described in <mapping-file/> (possible typo error) Jun 12, 2015 5:19:14 PM org.hibernate.cfg.annotations.reflection.JPAOverriddenAnnotationReader checkForOrphanProperties WARN: HHH000207: Property com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaKeyIndexedProperty.bpJpaKeyIndex not found in class but described in <mapping-file/> (possible typo error) Jun 12, 2015 5:19:14 PM org.hibernate.cfg.AnnotationBinder bindClass WARN: HHH000139: Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: com.wingnest.blueprints.impls.jpa.internal.models.BpJpaElement Jun 12, 2015 5:19:14 PM org.hibernate.cfg.AnnotationBinder bindClass WARN: HHH000139: Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaIndexItem Jun 12, 2015 5:19:14 PM org.hibernate.cfg.AnnotationBinder bindClass WARN: HHH000139: Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: com.wingnest.blueprints.impls.jpa.internal.models.BpJpaVertex Jun 12, 2015 5:19:14 PM org.hibernate.cfg.AnnotationBinder bindClass WARN: HHH000139: Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: com.wingnest.blueprints.impls.jpa.internal.models.BpJpaEdge Jun 12, 2015 5:19:14 PM org.hibernate.cfg.AnnotationBinder bindClass WARN: HHH000139: Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaKeyIndex Jun 12, 2015 5:19:14 PM org.hibernate.cfg.AnnotationBinder bindClass WARN: HHH000139: Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaIndex Jun 12, 2015 5:19:14 PM org.hibernate.cfg.AnnotationBinder bindClass WARN: HHH000139: Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: com.wingnest.blueprints.impls.jpa.internal.models.BpJpaProperty Jun 12, 2015 5:19:14 PM org.hibernate.cfg.AnnotationBinder bindClass WARN: HHH000139: Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: com.wingnest.blueprints.impls.jpa.internal.models.index.BpJpaKeyIndexedProperty Jun 12, 2015 5:19:14 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init> INFO: HHH000397: Using ASTQueryTranslatorFactory Jun 12, 2015 5:19:14 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000228: Running hbm2ddl schema update Jun 12, 2015 5:19:14 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000102: Fetching database metadata Jun 12, 2015 5:19:14 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000396: Updating schema Jun 12, 2015 5:19:15 PM org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000261: Table found: .ADMIN.ENTITY Jun 12, 2015 5:19:15 PM org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000037: Columns: [element_id, id, valuedata, incomingvertex_id, dtype, removed, label, keyname, outgoingvertex_id, version] Jun 12, 2015 5:19:15 PM org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000108: Foreign keys: [fk_9r4w6h2jlb9a4e9pt3d95girc, fk_wb8dqej10hriw3o6m72yj9p, fk_ay9plo3t1cprfwdwjvp6fdwi6] Jun 12, 2015 5:19:15 PM org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000126: Indexes: [uk_7hyan3asmdvrxrlywl7v0lj6e, sql150612170336740, uk_ejspyse8mcceolr4vps96aohp, sql150612170337000, sql150612170337030, sql150612170336940] Jun 12, 2015 5:19:15 PM org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000261: Table found: .ADMIN.INDEX_BASE Jun 12, 2015 5:19:15 PM org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000037: Columns: [id, bpjpakeyindex_id, indexclassname, elementtype, dtype, removed, elementid, keyname, indexvalue, bpjpaindex_id, propertyid, indexname, version] Jun 12, 2015 5:19:15 PM org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000108: Foreign keys: [fk_7ipiov9b2bb97hkncnl76mkkm, fk_olnpc5iekqlpsk6n61ucruk96] Jun 12, 2015 5:19:15 PM org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000126: Indexes: [sql150612170337100, uk_o7ehuddxk2u2rgtqv9c8kbj75, uk_fd9ey72b1ypwplyllo410siv1, sql150612170337080, sql150612170336780, uk_l9wg7u7fi95namecr9p3apnn5, uk_tidr0ggw8dtylnj1ldr1oy4gb, uk_bke0r11vg7q6vtfud90jnfx4, uk_2u6spckbs5deg5048qfvxg5ca] Jun 12, 2015 5:19:15 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000232: Schema update complete Jun 12, 2015 5:19:15 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$StandardWarningHandler logWarning WARN: SQL Warning Code: 10000, SQLState: 01J01 Jun 12, 2015 5:19:15 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$StandardWarningHandler logWarning WARN: Database 'db/HibernateUnit_test_perf' not created, connection made to existing database instead. zhangsan:1 lisi:2 wangwu:3 create finish Jun 12, 2015 5:19:16 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop INFO: HHH000030: Cleaning up connection pool [jdbc:derby:db/HibernateUnit_test_perf;create=true] Process finished with exit code 0
对数据进行CRUD没有问题。
4,总结
本文原文连接: /article/1665667.html 转载请注明出处!代码就一个pom和java类,非常简单的就把图的数据存储到了数据库中。
存储到mysql里面类似,需要修改下jdbc连接即可。
如果作为业务服务,现在的代码再加点就基本满足了。
虽然数据库存储的比neo4j,solr等稍微慢点,但是运维成本低,数据库可以做主从复制,保护数据,同时多个服务访问一个数据库也可以解决单点服务问题。
数据库的优化非常多,非常方便,同时索引速度也挺快的。这个存储的是关系,一般情况先数据不太大,再使用mycat进行分库分表就可以扩展了。
相关文章推荐
- 第二天,Java_Day02
- SpringMVC Controller 介绍
- java 多线程编程三种实现方式
- Java泛型集合
- 对于JAVAWeb开发的最新解
- SpringMVC视图解析器技术2
- Java正则表达式入门
- 解决:eclipse导入项目不显示svn信息
- Java并发编程-03-守护线程的创建和运行
- java门禁系统面向对象程序设计
- SpringMVC视图解析器(1)
- java根据图片和文字生成自定义图片
- Java 多线程同步和异步详解
- 文件上传--基于Spring MVC框架+SmartUpload
- 文件上传--基于Spring MVC框架+SmartUpload
- java设计模式(八)---外观模式
- 开源中国GIT中Java分类下TOP10项目的活动情况分析
- java 线程池
- 开源中国GIT中Java分类下TOP10项目的活动情况分析
- Java实现的堆排序算法