日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

bolt在java,java neo4j bolt

發(fā)布時(shí)間:2025/3/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bolt在java,java neo4j bolt 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java neo4j bolt

您好,很高興為您解答:

neo4j是一個(gè)嵌入式,基于磁盤(pán)的,支持完整事務(wù)的java持久化引擎,它在圖像中而不是表中存儲(chǔ)數(shù)據(jù)。neo4j提供了大規(guī)模可擴(kuò)展性,在一臺(tái)機(jī)器上可以處理數(shù)十億節(jié)點(diǎn)/關(guān)系/屬性的圖像,可以擴(kuò)展到多臺(tái)機(jī)器并行運(yùn)行。

相對(duì)于關(guān)系數(shù)據(jù)庫(kù)來(lái)說(shuō),圖形數(shù)據(jù)庫(kù)善于處理大量復(fù)雜、互連接、低結(jié)構(gòu)化的數(shù)據(jù),這些數(shù)據(jù)變化迅速,需要頻繁的查詢(xún)——在關(guān)系數(shù)據(jù)庫(kù)中,這些查詢(xún)會(huì)導(dǎo)致大量的表連接,因此會(huì)產(chǎn)生性能上的問(wèn)題。

neo4j重點(diǎn)解決了擁有大量連接的傳統(tǒng)rdbms在查詢(xún)時(shí)出現(xiàn)的性能衰退問(wèn)題。通過(guò)圍繞圖形進(jìn)行數(shù)據(jù)建模,neo4j會(huì)以相同的速度遍歷節(jié)點(diǎn)與邊,其遍歷速度與構(gòu)成圖形的數(shù)據(jù)量沒(méi)有任何關(guān)系。

此外,neo4j還提供了非常快的圖形算法、推薦系統(tǒng)和olap風(fēng)格的分析,而這一切在目前的rdbms系統(tǒng)中都是無(wú)法實(shí)現(xiàn)的。

轉(zhuǎn)載,僅供參考。

package com.neo4j;

import java.io.File;

import java.io.IOException;

import org.neo4j.graphdb.Direction;

import org.neo4j.graphdb.GraphDatabaseService;

import org.neo4j.graphdb.Node;

import org.neo4j.graphdb.Path;

import org.neo4j.graphdb.Relationship;

import org.neo4j.graphdb.RelationshipType;

import org.neo4j.graphdb.factory.GraphDatabaseFactory;

import org.neo4j.graphdb.Transaction;

import org.neo4j.graphdb.index.Index;

import org.neo4j.graphdb.traversal.Evaluators;

import org.neo4j.graphdb.traversal.Traverser;

import org.neo4j.graphdb.traversal.TraversalDescription;

import org.neo4j.kernel.Traversal;

import org.neo4j.kernel.impl.util.FileUtils;

import org.neo4j.kernel.impl.util.StringLogger;

import org.neo4j.cypher.ExecutionEngine;

import org.neo4j.cypher.ExecutionResult;

import org.neo4j.graphalgo.PathFinder;

import org.neo4j.graphalgo.GraphAlgoFactory;

public class Example {

// private static final String DB_PATH = "target/neo4jexample";

private static final String DB_PATH = "testgraph.db";

private static final String PRIMARY_KEY = "name";

private GraphDatabaseService graphDB;

private IndexnodeIndex;

private long startNodeId;

private static enum RelTypes implements RelationshipType {

NEO_NODE,

KNOWS,

CODED_BY

}

private void clearDB() {

try {

FileUtils.deleteRecursively(new File(DB_PATH));

}

catch(IOException e) {

throw new RuntimeException(e);

}

}

public void createDB() {

clearDB();

graphDB = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);

nodeIndex = graphDB.index().forNodes("nodes");

registerShutdownHook(graphDB);

Transaction tx = graphDB.beginTx();

try {

Node startNode = graphDB.createNode();

startNodeId = startNode.getId();

Node thomas = graphDB.createNode();

thomas.setProperty( "name", "Thomas Anderson" );

thomas.setProperty( "age", 29 );

nodeIndex.add(thomas, PRIMARY_KEY, thomas.getProperty("name"));

startNode.createRelationshipTo( thomas, RelTypes.NEO_NODE );

Node trinity = graphDB.createNode();

trinity.setProperty( "name", "Trinity" );

nodeIndex.add(trinity, PRIMARY_KEY, trinity.getProperty("name"));

Relationship rel = thomas.createRelationshipTo( trinity,

RelTypes.KNOWS );

rel.setProperty( "age", "3 days" );

Node morpheus = graphDB.createNode();

morpheus.setProperty( "name", "Morpheus" );

morpheus.setProperty( "rank", "Captain" );

morpheus.setProperty( "occupation", "Total badass" );

nodeIndex.add(morpheus, PRIMARY_KEY, morpheus.getProperty("name"));

thomas.createRelationshipTo( morpheus, RelTypes.KNOWS );

rel = morpheus.createRelationshipTo( trinity, RelTypes.KNOWS );

rel.setProperty( "age", "12 years" );

Node cypher = graphDB.createNode();

cypher.setProperty( "name", "Cypher" );

cypher.setProperty( "last name", "Reagan" );

nodeIndex.add(cypher, PRIMARY_KEY, cypher.getProperty("name"));

trinity.createRelationshipTo( cypher, RelTypes.KNOWS );

rel = morpheus.createRelationshipTo( cypher, RelTypes.KNOWS );

rel.setProperty( "disclosure", "public" );

Node smith = graphDB.createNode();

smith.setProperty( "name", "Agent Smith" );

smith.setProperty( "version", "1.0b" );

smith.setProperty( "language", "C++" );

nodeIndex.add(smith, PRIMARY_KEY, smith.getProperty("name"));

rel = cypher.createRelationshipTo( smith, RelTypes.KNOWS );

rel.setProperty( "disclosure", "secret" );

rel.setProperty( "age", "6 months" );

Node architect = graphDB.createNode();

architect.setProperty( "name", "The Architect" );

nodeIndex.add(architect, PRIMARY_KEY, architect.getProperty("name"));

smith.createRelationshipTo( architect, RelTypes.CODED_BY );

tx.success();

}

finally {

tx.finish();

}

}

public Traverser getFriends(final Node person) {

TraversalDescription td = Traversal.description()

.breadthFirst()

.relationships(RelTypes.KNOWS, Direction.OUTGOING)

.evaluator(Evaluators.excludeStartPosition());

return td.traverse(person);

}

public void printNodeFriends(Node node) {

// Node neo = graphDB.getNodeById(startNodeId)

// .getSingleRelationship(RelTypes.NEO_NODE, Direction.OUTGOING)

// .getEndNode();

int friendsNumbers = 0;

System.out.println(node.getProperty(PRIMARY_KEY) + "'s friends:");

for(Path friendPath: getFriends(node)) {

System.out.println("At depth " + friendPath.length() + " => "

+ friendPath.endNode().getProperty(PRIMARY_KEY));

friendsNumbers++;

}

System.out.println("Number of friends found: " + friendsNumbers);

}

public void printCypherFriends(String name) {

graphDB = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);

ExecutionEngine engine = new ExecutionEngine(graphDB, StringLogger.logger(DB_PATH));

// ExecutionResult result = engine.execute(

// "start n=node:nodes(name=\"" + name + "\") "

// + "match n-[:KNOWS*..]->f "

// + "return distinct f, f.name");

ExecutionResult result = engine.execute("start n=node(500000) return n;");

System.out.println(result.dumpToString());

}

public void printThomasFriends() {

printNodeFriends(nodeIndex.get(PRIMARY_KEY, "Thomas Anderson").getSingle());

}

public IterablefindShortestPath(Node node1, Node node2) {

PathFinderfinder = GraphAlgoFactory.shortestPath(

Traversal.expanderForTypes(RelTypes.KNOWS, Direction.OUTGOING), 5);

Iterablepaths = finder.findAllPaths(node1, node2);

return paths;

}

public void printShortestPaths() {

Node node1 = nodeIndex.get(PRIMARY_KEY, "Thomas Anderson").getSingle();

Node node2 = nodeIndex.get(PRIMARY_KEY, "Agent Smith").getSingle();

for(Path shortestPath: findShortestPath(node1, node2)) {

System.out.println(shortestPath.toString());

}

}

private static void registerShutdownHook(final GraphDatabaseService graphDB) {

Runtime.getRuntime().addShutdownHook(new Thread() {

@Override

public void run() {

graphDB.shutdown();

}

});

}

private void shutdown() {

graphDB.shutdown();

}

/**

* @param args

*/

public static void main(String[] args) {

Example example = new Example();

// example.createDB();

long t1 = System.currentTimeMillis();

// example.printThomasFriends();

example.printCypherFriends("Thomas Anderson");

long t2 = System.currentTimeMillis();

System.out.print(t2-t1);

//example.printShortestPaths();

example.shutdown();

}

}

0

0

0

0

評(píng)論(0)

“還沒(méi)有人發(fā)表評(píng)論,快去搶占沙發(fā)吧”

總結(jié)

以上是生活随笔為你收集整理的bolt在java,java neo4j bolt的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。