neo4j图数据笔记

第一章:介绍

Neo4j是什么

Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。

Neo4j的特点

  • SQL就像简单的查询语言Neo4j CQL
  • 它遵循属性图数据模型
  • 它通过使用Apache Lucence支持索引
  • 它支持UNIQUE约束
  • 它它包含一个用于执行CQL命令的UI:Neo4j数据浏览器
  • 它支持完整的ACID(原子性,一致性,隔离性和持久性)规则
  • 它采用原生图形库与本地GPE(图形处理引擎)
  • 它支持查询的数据导出到JSON和XLS格式
  • 它提供了REST API,可以被任何编程语言(如Java,Spring,Scala等)访问
  • 它提供了可以通过任何UI MVC框架(如Node JS)访问的Java脚本
  • 它支持两种Java API:Cypher API和Native Java API来开发Java应用程序

Neo4j的优点

  • 它很容易表示连接的数据
  • 检索/遍历/导航更多的连接数据是非常容易和快速的
  • 它非常容易地表示半结构化数据
  • Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习
  • 它使用简单而强大的数据模型
  • 它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引

第二章:安装

curl -O http://dist.neo4j.org/neo4j-community-3.4.5-unix.tar.gz
tar -axvf neo4j-community-3.4.5-unix.tar.gz

第三章:数据导入

./neo4j-admin import 

--nodes="/data2/home/guocheng/neo4j_data_test/neo4j_node_group/neo4j_node_group_header,
         /data2/home/guocheng/neo4j_data_test/neo4j_node_group/part-.*" 

--nodes="/data2/home/guocheng/neo4j_data_test/neo4j_node_person/neo4j_node_person_header,
         /data2/home/guocheng/neo4j_data_test/neo4j_node_person/part-.*" 

--nodes="/data2/home/guocheng/neo4j_data_test/neo4j_node_phone/neo4j_node_phone_header,
         /data2/home/guocheng/neo4j_data_test/neo4j_node_phone/part-.*" 


--relationships="/data2/home/guocheng/neo4j_data_test/neo4j_relationship_binding/neo4j_relationship_binding_header,
                 /data2/home/guocheng/neo4j_data_test/neo4j_relationship_binding/part-.*"  

--relationships="/data2/home/guocheng/neo4j_data_test/neo4j_relationship_black/neo4j_relationship_black_header,
                 /data2/home/guocheng/neo4j_data_test/neo4j_relationship_black/part-.*" 

--relationships="/data2/home/guocheng/neo4j_data_test/neo4j_relationship_contact/neo4j_relationship_contact_header,
                 /data2/home/guocheng/neo4j_data_test/neo4j_relationship_contact/part-.*" 

--relationships="/data2/home/guocheng/neo4j_data_test/neo4j_relationship_friend_and_member/neo4j_relationship_member_in_header,
                 /data2/home/guocheng/neo4j_data_test/neo4j_relationship_friend_and_member/part-.*"  

--relationships="/data2/home/guocheng/neo4j_data_test/neo4j_relationship_need_accept/neo4j_relationship_need_accept_header,
                 /data2/home/guocheng/neo4j_data_test/neo4j_relationship_need_accept/part-.*" 
                               


--delimiter='\t'  

--database="graph.db"  

--ignore-duplicate-nodes=true

--ignore-missing-nodes=true

导入字段详解:

--database=graph01.db代表我要建立的数据库的名字为graph.db,这里需要注意,graph.db必需为全新的,如果该库已经存在的情况下,会无法导入。

--nodes代表要导入的文件为节点文件,当有多个导入文件的时候,使用,来进行隔开,当如果头文件是单独文件的时候,必需将其放在内容文件的前面,否则会无法导入【可以导入.gz的压缩文件】。

--relationships代表要导入的文件为关系文件,当有多个关系文件导入的时候,使用,来进行隔开,当如果头文件是单独文件的时候,必需将其放在内容文件的前面,否则会无法导入。

--multiline-fields=true代表如果某属性中的数据内容有多行时,可以成功导入。

--delimiter表示以\t作为分隔符

--ignore-duplicate-nodes=true表示忽略重复的nodes

--ignore-missing-nodes=true表示链接关系时,nodes不存在忽略

 

需要注意的时导入数据前需要将neo4j停止

cd  neo4j-community-3.4.5/bin

./neo4j stop

导入完成后会生成一个import.report的导入详情的日志文件,关于某些出错,和miss node的详情可以在这个日志中看到。
使用./neo4j start 启动服务

第四章:neo4j配置

# 修改第9行,去掉#,修改数据库名,这个导入时候指定的什么db名,这里就可以改成什么db名称
dbms.active_database=graph.db

# 修改第22行,在前面加个#,load csv时允许从任意路径读取文件
#dbms.directories.import=import

# 修改第26行,删除#后,连接数据库不需要密码
#dbms.security.auth_enabled=false

# 修改35行和36行,设置JVM初始堆内存和JVM最大堆内存,这是在我自己电脑上测试用,生产环境自己慢慢调
# 建议生产环境给的JVM最大堆内存越大越好,但是要小于机器的物理内存
dbms.memory.heap.initial_size=1024
dbms.memory.heap.max_size=2048m

# 修改46行,可以认为这个是缓存,如果机器配置高,这个越大越好
dbms.memory.pagecache.size=10g

# 修改54行,去掉改行的#,可以远程通过ip访问neo4j数据库
dbms.connectors.default_listen_address=0.0.0.0

# 默认 bolt端口是7687,http端口是7474,https关口是7473,不修改下面3项也可以
# 修改71行,去掉#,设置http端口为7474,端口可以自定义,只要不和其他端口冲突就行
#dbms.connector.bolt.listen_address=:7687

# 修改75行,去掉#,设置http端口为7474,端口可以自定义,只要不和其他端口冲突就行
dbms.connector.http.listen_address=:7474

# 修改79行,去掉#,设置http端口为7473,端口可以自定义,只要不和其他端口冲突就行
dbms.connector.https.listen_address=:7473

# 修改227行,去掉#,允许从远程url来load csv
dbms.security.allow_csv_import_from_file_urls=true

# 修改233行,允许使用neo4j-shell,类似于mysql 命令行之类的
dbms.shell.enabled=true

# 修改235行,去掉#,设置连接neo4j-shell的端口,一般都是localhost或者127.0.0.1,这样安全,其他地址的话,一般使用https就行
dbms.shell.host=127.0.0.1

# 修改237行,去掉#,设置neo4j-shell端口,端口可以自定义,只要不和其他端口冲突就行
dbms.shell.port=1337

# 修改241行,设置neo4j可读可写
dbms.read_only=false


#在文件最后手动添加以下信息

# CTT - Asia/Shanghai
dbms.db.timezone=SYSTEM
# dbms.logs.timezone has been replaced with dbms.db.timezone.
#dbms.logs.timezone=SYSTEM
#db.temporal.timezone=Asia/Shanghai

# disable udc
dbms.udc.enabled=false

# apoc
#dbms.security.procedures.whitelist=apoc.load.*
dbms.security.procedures.unrestricted=apoc.*
apoc.import.file.enabled=true
apoc.export.file.enabled=true
apoc.trigger.enabled=true
apoc.ttl.enabled=false

配置详情

For more details and a complete list of settings, please see https://neo4j.com/docs/operations-manual/current/reference/configuration-settings/

# 如果想自定义neo4j数据库数据的存储路径,要同时修改dbms.active_database 和 dbms.directories.data 两项配置,
# 修改配置后,数据会存放在${dbms.directories.data}/databases/${dbms.active_database} 目录下
# 安装的数据库的名称,默认使用${NEO4J_HOME}/data/databases/graph.db目录
# The name of the database to mount  
#dbms.active_database=graph.db

#安装Neo4j数据库的各个配置路径,默认使用$NEO4J_HOME下的路径
#Paths of directories in the installation. 
# 数据路径
#dbms.directories.data=data  
# 插件路径
#dbms.directories.plugins=plugins  
#dbms.directories.certificates=certificates  证书路径
#dbms.directories.logs=logs 日志路径
#dbms.directories.lib=lib jar包路径
#dbms.directories.run=run 运行路径

#默认情况下想load csv文件,只能把csv文件放到${NEO4J_HOME}/import目录下,把下面的#删除后,可以在load csv时使用绝对路径,这样可能不安全
#This setting constrains all `LOAD CSV` import files to be under the `import` directory. Remove or comment it out to allow files to be loaded from anywhere in the filesystem; this introduces possible security problems. See the `LOAD CSV` section of the manual for details.  
#此设置将所有“LOAD CSV”导入文件限制在`import`目录下。删除注释允许从文件系统的任何地方加载文件;这引入了可能的安全问题。
dbms.directories.import=import

#把下面这行的#删掉后,连接neo4j数据库时就不用输密码了
#Whether requests to Neo4j are authenticated. 是否对Neo4j的请求进行了身份验证。
#To disable authentication, uncomment this line 要禁用身份验证,请取消注释此行。
#dbms.security.auth_enabled=false

#Enable this to be able to upgrade a store from an older version. 是否兼容以前版本的数据
dbms.allow_format_migration=true

#Java Heap Size: by default the Java heap size is dynamically calculated based on available system resources. Java堆大小:默认情况下,Java堆大小是动态地根据可用的系统资源计算。
#Uncomment these lines to set specific initial and maximum heap size. 取消注释这些行以设置特定的初始值和最大值
#dbms.memory.heap.initial_size=512m
#dbms.memory.heap.max_size=512m

#The amount of memory to use for mapping the store files, in bytes (or kilobytes with the 'k' suffix, megabytes with 'm' and gigabytes with 'g'). 用于映射存储文件的内存量(以字节为单位)千字节带有'k'后缀,兆字节带有'm',千兆字节带有'g')。
#If Neo4j is running on a dedicated server, then it is generally recommended to leave about 2-4 gigabytes for the operating system, give the JVM enough heap to hold all your transaction state and query context, and then leave the rest for the page cache. 如果Neo4j在专用服务器上运行,那么通常建议为操作系统保留大约2-4千兆字节,为JVM提供足够的堆来保存所有的事务状态和查询上下文,然后保留其余的页面缓存 。
#The default page cache memory assumes the machine is dedicated to running Neo4j, and is heuristically set to 50% of RAM minus the max Java heap size.  默认页面缓存存储器假定机器专用于运行Neo4j,并且试探性地设置为RAM的50%减去最大Java堆大小。
#dbms.memory.pagecache.size=10g


### Network connector configuration

#With default configuration Neo4j only accepts local connections. Neo4j默认只接受本地连接(localhost)
#To accept non-local connections, uncomment this line:  要接受非本地连接,请取消注释此行
dbms.connectors.default_listen_address=0.0.0.0 (这是删除#后的配置,可以通过ip访问)

#You can also choose a specific network interface, and configure a non-default port for each connector, by setting their individual listen_address. 还可以选择特定的网络接口,并配置非默认值端口,设置它们各自的listen_address

#The address at which this server can be reached by its clients. This may be the server's IP address or DNS name, or it may be the address of a reverse proxy which sits in front of the server. This setting may be overridden for individual connectors below. 客户端可以访问此服务器的地址。这可以是服务器的IP地址或DNS名称,或者可以是位于服务器前面的反向代理的地址。此设置可能会覆盖以下各个连接器。
#dbms.connectors.default_advertised_address=localhost

#You can also choose a specific advertised hostname or IP address, and configure an advertised port for each connector, by setting their individual advertised_address. 您还可以选择特定广播主机名或IP地址,
为每个连接器配置通告的端口,通过设置它们独特的advertised_address。

#Bolt connector 使用Bolt协议
dbms.connector.bolt.enabled=true
dbms.connector.bolt.tls_level=OPTIONAL
dbms.connector.bolt.listen_address=:7687

#HTTP Connector. There must be exactly one HTTP connector. 使用http协议
dbms.connector.http.enabled=true
dbms.connector.http.listen_address=:7474

#HTTPS Connector. There can be zero or one HTTPS connectors. 使用https协议
dbms.connector.https.enabled=true
dbms.connector.https.listen_address=:7473

#Number of Neo4j worker threads. Neo4j线程数
#dbms.threads.worker_count=


#Logging configuration  日志配置

#To enable HTTP logging, uncomment this line  要启用HTTP日志记录,请取消注释此行
dbms.logs.http.enabled=true

#Number of HTTP logs to keep. 要保留的HTTP日志数
#dbms.logs.http.rotation.keep_number=5

#Size of each HTTP log that is kept. 每个HTTP日志文件的大小
dbms.logs.http.rotation.size=20m

#To enable GC Logging, uncomment this line 要启用GC日志记录,请取消注释此行
#dbms.logs.gc.enabled=true

#GC Logging Options see http://docs.oracle.com/cd/E19957-01/819-0084-10/pt_tuningjava.html#wp57013 for more information.  GC日志记录选项 有关详细信息,请参见http://docs.oracle.com/cd/E19957-01/819-0084-10/pt_tuningjava.html#wp57013
#dbms.logs.gc.options=-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintPromotionFailure -XX:+PrintTenuringDistribution

#Number of GC logs to keep. 要保留的GC日志数
#dbms.logs.gc.rotation.keep_number=5

#Size of each GC log that is kept. 保留的每个GC日志文件的大小
#dbms.logs.gc.rotation.size=20m

#Size threshold for rotation of the debug log. If set to zero then no rotation will occur. Accepts a binary suffix "k", "m" or "g".  调试日志旋转的大小阈值。如果设置为零,则不会发生滚动(达到指定大小后切割日志文件)。接受二进制后缀“k”,“m”或“g”。
#dbms.logs.debug.rotation.size=20m

#Maximum number of history files for the internal log. 最多保存几个日志文件
#dbms.logs.debug.rotation.keep_number=7


### Miscellaneous configuration  其他配置


#Enable this to specify a parser other than the default one. 启用此选项可指定除默认解析器之外的解析器
#cypher.default_language_version=3.0

#Determines if Cypher will allow using file URLs when loading data using `LOAD CSV`. Setting this value to `false` will cause Neo4j to fail `LOAD CSV` clauses that load data from the file system.    确定当使用加载数据时,Cypher是否允许使用文件URL `LOAD CSV`。将此值设置为`false`将导致Neo4j不能通过互联网上的URL导入数据,`LOAD CSV` 会从文件系统加载数据。
dbms.security.allow_csv_import_from_file_urls=true

#Retention policy for transaction logs needed to perform recovery and backups.  执行恢复和备份所需的事务日志的保留策略
#dbms.tx_log.rotation.retention_policy=7 days

#Enable a remote shell server which Neo4j Shell clients can log in to.  启用Neo4j Shell客户端可以登录的远程shell服务器
dbms.shell.enabled=true
#The network interface IP the shell will listen on (use 0.0.0.0 for all interfaces).
dbms.shell.host=127.0.0.1
#The port the shell will listen on, default is 1337.
dbms.shell.port=1337

#Only allow read operations from this Neo4j instance. This mode still requires write access to the directory for lock purposes.  只允许从Neo4j实例读取操作。此模式仍然需要对目录的写访问以用于锁定目的。
#dbms.read_only=false

#Comma separated list of JAX-RS packages containing JAX-RS resources, one package name for each mountpoint. The listed package names will be loaded under the mountpoints specified. Uncomment this line to mount the org.neo4j.examples.server.unmanaged.HelloWorldResource.java from neo4j-server-examples under /examples/unmanaged, resulting in a final URL of http://localhost:7474/examples/unmanaged/helloworld/{nodeId}      包含JAX-RS资源的JAX-RS软件包的逗号分隔列表,每个安装点一个软件包名称。所列出的软件包名称将在指定的安装点下加载。取消注释此行以装载org.neo4j.examples.server.unmanaged.HelloWorldResource.java neo4j-server-examples下/ examples / unmanaged,最终的URL为http//localhost7474/examples/unmanaged/helloworld/{nodeId}
#dbms.unmanaged_extension_classes=org.neo4j.examples.server.unmanaged=/examples/unmanaged


#JVM Parameters  JVM参数

#G1GC generally strikes a good balance between throughput and tail latency, without too much tuning. G1GC通常在吞吐量和尾部延迟之间达到很好的平衡,而没有太多的调整。
dbms.jvm.additional=-XX:+UseG1GC

#Have common exceptions keep producing stack traces, so they can be debugged regardless of how often logs are rotated. 有共同的异常保持生成堆栈跟踪,所以他们可以被调试,无论日志被旋转的频率
dbms.jvm.additional=-XX:-OmitStackTraceInFastThrow

#Make sure that `initmemory` is not only allocated, but committed to the process, before starting the database. This reduces memory fragmentation, increasing the effectiveness of transparent huge pages. It also reduces the possibility of seeing performance drop due to heap-growing GC events, where a decrease in available page cache leads to an increase in mean IO response time. Try reducing the heap memory, if this flag degrades performance.    确保在启动数据库之前,“initmemory”不仅被分配,而且被提交到进程。这减少了内存碎片,增加了透明大页面的有效性。它还减少了由于堆增长的GC事件而导致性能下降的可能性,其中可用页面缓存的减少导致平均IO响应时间的增加。如果此标志降低性能,请减少堆内存。    
dbms.jvm.additional=-XX:+AlwaysPreTouch

#Trust that non-static final fields are really final. This allows more optimizations and improves overall performance. NOTE: Disable this if you use embedded mode, or have extensions or dependencies that may use reflection or serialization to change the value of final fields!    信任非静态final字段真的是final。这允许更多的优化和提高整体性能。注意:如果使用嵌入模式,或者有可能使用反射或序列化更改最终字段的值的扩展或依赖关系,请禁用此选项!
dbms.jvm.additional=-XX:+UnlockExperimentalVMOptions
dbms.jvm.additional=-XX:+TrustFinalNonStaticFields

#Disable explicit garbage collection, which is occasionally invoked by the JDK itself.  禁用显式垃圾回收,这是偶尔由JDK本身调用。
dbms.jvm.additional=-XX:+DisableExplicitGC

#Remote JMX monitoring, uncomment and adjust the following lines as needed. Absolute paths to jmx.access and jmx.password files are required.  远程JMX监视,取消注释并根据需要调整以下行。需要jmx.access和jmx.password文件的绝对路径。
#Also make sure to update the jmx.access and jmx.password files with appropriate permission roles and passwords, the shipped configuration contains only a read only role called 'monitor' with password 'Neo4j'. 还要确保使用适当的权限角色和密码更新jmx.access和jmx.password文件,所配置的配置只包含名为“monitor”的只读角色,密码为“Neo4j”。
#For more details, see: http://download.oracle.com/javase/8/docs/technotes/guides/management/agent.html On Unix based systems the jmx.password file needs to be owned by the user that will run the server, and have permissions set to 0600. Unix系统,有关详情,请参阅:http://download.oracle.com/javase/8/docs/technotes/guides/management/agent.html,jmx.password文件需要由运行服务器的用户拥有,并且权限设置为0600。
#For details on setting these file permissions on Windows see: http://docs.oracle.com/javase/8/docs/technotes/guides/management/security-windows.html   Windows系统  有关在设置这些文件权限的详细信息,请参阅:http://docs.oracle.com/javase/8/docs/technotes/guides/management/security-windows.html
#dbms.jvm.additional=-Dcom.sun.management.jmxremote.port=3637
#dbms.jvm.additional=-Dcom.sun.management.jmxremote.authenticate=true
#dbms.jvm.additional=-Dcom.sun.management.jmxremote.ssl=false
#dbms.jvm.additional=-Dcom.sun.management.jmxremote.password.file=/absolute/path/to/conf/jmx.password
#dbms.jvm.additional=-Dcom.sun.management.jmxremote.access.file=/absolute/path/to/conf/jmx.access

#Some systems cannot discover host name automatically, and need this line configured:  某些系统无法自动发现主机名,需要配置以下行:
#dbms.jvm.additional=-Djava.rmi.server.hostname=$THE_NEO4J_SERVER_HOSTNAME

#Expand Diffie Hellman (DH) key size from default 1024 to 2048 for DH-RSA cipher suites used in server TLS handshakes. 对于服务器TLS握手中使用的DH-RSA密码套件,将Diffie Hellman(DH)密钥大小从默认1024展开到2048。
#This is to protect the server from any potential passive eavesdropping. 这是为了保护服务器免受任何潜在的被动窃听。
dbms.jvm.additional=-Djdk.tls.ephemeralDHKeySize=2048


### Wrapper Windows NT/2000/XP Service Properties  包装器Windows NT / 2000 / XP服务属性包装器Windows NT / 2000 / XP服务属性

#WARNING - Do not modify any of these properties when an application using this configuration file has been installed as a service.  WARNING - 当使用此配置文件的应用程序已作为服务安装时,不要修改任何这些属性。
#Please uninstall the service before modifying this section.  The service can then be reinstalled. 请在修改此部分之前卸载服务。 然后可以重新安装该服务。

#Name of the service 服务的名称
dbms.windows_service_name=neo4j


### Other Neo4j system properties  其他Neo4j系统属性
dbms.jvm.additional=-Dunsupported.dbms.udc.source=zip

第五章:查看数据

访问http://x.x.x.x:7474/,登陆neo4j,使用默认用户名密码登陆后修改密码,默认都是neo4j

可以看到我们导入的node,relationship以及Property Keys。

第六章:索引

1. 创建索引

给 Label 为 Person 的节点的 name 属性上创建索引,CQL语句如下所示:

CREATE INDEX ON :Person(name)

重复执行上述CQL语句,再次创建索引,不会报错,但是没有再创建索引。

2. 删除索引

删除刚才创建的索引,CQL语句如下所示:

DROP INDEX ON :Person(name)

删除成功后,再次删除索引会报错:Neo.DatabaseError.Schema.IndexDropFailed: Unable to drop index on :Person(name): No such INDEX ON :Person(name)。

3. 使用索引

索引创建完成后,在查询的时候会自动使用索引,列出一些CQL语句,这些语句在执行的时候会自己去调用索引。

MATCH (person:Person { name: 'Keanu Reeves' })
RETURN person
MATCH (person:Person) WHERE person.name
> 'A' RETURN person
MATCH (person:Person) WHERE person.name IN [
'Keanu Reeves', 'Aaron Sorkin'] RETURN person
MATCH (person:Person) WHERE person.name STARTS WITH
'A' RETURN person
MATCH (p:Person) WHERE exists(p.name) RETURN p

4. 查询创建的索引

:schema

5.唯一索引

创建唯一索引
create constraint on (p:Phone) assert s.name is unique
删除唯一索引 drop constraint on (p:Phone) assert s.name
is unique

 

第七章:查询

:schema 查看索引是否建立以及是否建立完成
:sysinfo 查看neo4j的系统信息

 

详细的查询语句和创建语句教程:https://www.w3cschool.cn/neo4j/neo4j_cql_introduction.html

posted @ 2020-04-24 10:07  G先生  阅读(135)  评论(0编辑  收藏  举报

:guocheng