使用APOC和Neo4j


正如我们所知,Neo4j将开发人员从麻烦的数据库中拉了出来。它并没有让您摆脱旧的数据库,而且它确实提供了对预定义过程的支持。

关系数据库提供了更好的性能、可伸缩性、生产力、易用性和安全性等优势,Neo4j还提供了一些可以执行上述操作的令人惊叹的工具。

是的,我说的是APOC和和Neo4j一起使用APOC。这对开发人员来说是一件幸事。它提供了许多预定义的过程和用户定义的函数/视图,以便我们可以轻松地使用它并提高我们的工作效率。

apoC代表Cypher上的AweseProcedure。apoC是各个领域的程序库。它是在Neo4j3.0中引入的。

我们可以在许多领域使用APOC,包括:

  • 图形算法。
  • 元数据。
  • 手动索引和关系索引。
  • 全文搜索。
  • 与MongoDB、ElasticSearch、Cassandra和关系数据库等其他数据库集成。
  • 从API和文件加载XML和JSON。
  • 字符串和文本函数。
  • 并发和批处理密码执行。
  • 空间功能和锁。
  • 收集和映射实用程序。

第二条路

  • 克隆neo4j-apoc-procedurehere
  • 转到文件夹cd neo4j-apoc-procedures
  • $Neo4j_Home/plugins/cp target/apoc-1.0.0-SNAPSHOT.jar $Neo4j_Home/plugins/)。
  • 重新启动您的Neo4j服务器。

神谕

我们是最后一个将数据迁移到Neo4j的数据库,但很明显,同样重要的是。我们可以的download JDBC JAR file,把它放进去$Neo4j_Home/plugins, 并重新启动Neo4j。我们可以在以下位置提供URL$Neo4j_Home/comf/neo4j.conf作为:

apoc.jdbc.oracle_url.url=jdbc:oracle:thin:user/password@127.0.0.1:1521/XE

重新启动Neo4j服务器后,我们设置将数据从Oracle迁移到Neo4j。我们从Oracle获取数据,在Oracle中我们有一个名称为employee_details

CALL apoc.load.jdbc('oracle_url','employee_details') YIELD row
RETURN count(*);

让我们为数据创建索引、约束和关系。

/**
* Here we define schema and key.
*/
CALL apoc.schema.assert(
 {EMPINFO:['name', 'age','salary']},
 {EMPINFO:['id'],ADDRESS:['address']});

现在,我们加载数据并执行合并和创建操作,以便可以创建节点以及节点之间的关系。

/**
* Here we load data in Neo4j and create a node with the help of the schema that we defined
* earlier.
*/
CALL apoc.load.jdbc('oracle_url','employee_details') yield row
MERGE (g:ADDRESS {name:row.ADDRESS})
CREATE (t:EMPINFO {id:toString(row.ID), name:row.NAME, age:toString(row.AGE), salary:toString(row.SALARY)})
CREATE (t)-[:LIVE]->(g);

我们可以看到关系图,它看起来如下所示:

/**
* For Displaying Performed Relation
*/
 
MATCH p=()-[r:LIVE]->() RETURN p LIMIT 25;

MySQL

我们要从MySQL迁移数据。像以前一样,我们必须download the JDBC JAR file然后把它放进去$Neo4j_Home/plugins$Neo4j_Home/conf/neo4j.conf成为:

apoc.jdbc.mysql_url.url=jdbc:mysql://localhost:3306/test?user=user&password=pass

重新启动Neo4j服务器。现在,我们准备将数据从Cassandra迁移到Neo4j。

我们点击MySQL,开始获取数据,并执行计数操作。

CALL apoc.load.jdbc('mysql_url','employee_data') yield row
RETURN count(*);

一种数据库系统

当我们使用PostgreSQL时,我们必须download the JDBC JAR file,把它放进去$Neo4j_Home/plugins,并重新启动Neo4j。重启Neo4j服务器后,我们设置将数据从PostgreSQL迁移到Neo4j。

CALL apoc.load.driver('org.postgresql.Driver');

employee_details为Neo4j干杯。

with 'jdbc:postgresql://localhost:5432/testdb?user=postgres&password=postgres' as url
CALL apoc.load.jdbc(url,'employee_details') YIELD row
RETURN count(*);

如果我们不想使用这些步骤,那么我们可以在$Neo4j_Home/conf/neo4j.conf 并重新启动服务器:

apoc.jdbc.postgresql_url.url=jdbc:postgresql://localhost:5432/testdb?user=postgres&password=postgres

我们现在可以直接获取数据。我们不需要装载驱动程序。

CALL apoc.load.jdbc('postgresql_url','employee_details') YIELD row
RETURN count(*);

在数据中创建节点和关系。

/**
* Here we define schema and key. In the first column we define those column_name
* which can be null and in the second we define the column name that we want to be unique.
*/
 
CALL apoc.schema.assert( {Detail:['name','age','address','salary']},
{Detail:['id']});
 
/**
* Here we load data in Neo4j and create a node with the help of schemas which we defined
* earlier.
*/
 
CALL apoc.load.jdbc('jdbc:postgresql://localhost:5432/testdb?user=postgres&password=postgres','employee_details') yield row
CREATE (t:Detail {id:toString(row.id), name:row.name,
age:toString(row.age), address:row.address, salary:toString(row.salary)})
return t;

我们必须运行以下命令来设置Cassandra中的初始数据:

curl -OL https://raw.githubusercontent.com/neo4j-contrib/neo4j-cassandra-connector/master/db_gen/playlist.cql
curl -OL https://raw.githubusercontent.com/neo4j-contrib/neo4j-cassandra-connector/master/db_gen/artists.csv
curl -OL https://raw.githubusercontent.com/neo4j-contrib/neo4j-cassandra-connector/master/db_gen/songs.csv
$CASSANDRA_HOME/bin/cassandra
$CASSANDRA_HOME/bin/cqlsh -f playlist.cql

我们已经用数据设置了我们的Cassandra数据库。我们必须得download the JDBC JAR file然后把它放进去$Neo4j_Home/plugins。我们可以在以下位置提供URL$Neo4j_Home/conf/neo4j.conf成为:

apoc.jdbc.cassandra_songs.url=jdbc:cassandra://localhost:9042/playlist

重新启动Neo4j服务器。现在,我们准备将数据从Cassandra迁移到Neo4j。

我们点击Cassandra,开始获取数据并执行计数操作。

CALL apoc.load.jdbc('cassandra_songs','artists_by_first_letter') yield row
RETURN count(*);

让我们为数据创建索引、约束和关系。

CALL apoc.load.jdbc('cassandra_songs','artists_by_first_letter') yield row
RETURN count(*);

现在,我们将加载数据并执行合并和创建操作,以便可以创建节点和节点之间的关系。

/**
* Here we define schema and key.
*/
CALL apoc.schema.assert(
  {Track:['title','length']},
  {Artist:['name'],Track:['id'],Genre:['name']});

/**
* Here we load data in the neo4j and create node with the help of schema which we define
* earlier.
*/
CALL apoc.load.jdbc('cassandra_songs','track_by_artist') yield row
MERGE (a:Artist {name:row.artist})
MERGE (g:Genre {name:row.genre})
CREATE (t:Track {id:toString(row.track_id), title:row.track,
length:row.track_length_in_seconds})
CREATE (a)-[:PERFORMED]->;(t)
CREATE (t)-[:GENRE]->(g);

/**
* For Displaying Performed Relation
*/
 
MATCH p=()-[r:PERFORMED]->() RETURN p LIMIT 25;

注意:正如我们所讨论的,我想再说一遍,如果您不将驱动程序名称更新为$Neo4j_Home/conf/neo4j.conf, 然后你必须在Neo4j中加载驱动程序。否则,您必须在查询中仅提供驱动程序名称。

这是使用APOC的基本示例。这也是开始使用Neo4j并用旧数据库替换它的第一步,这样您就不会丢失数据。在迁移数据之后,您就可以对旧数据库中存在的数据使用Neo4j了。