neo4j使用指南

目前neo4j文档只限于官方文档,本文将neo4j官方主要的文档整理了一下,供需要的人参考,内容也会不断更新!


开始

  • 特点
    1. ACID事务
    2. 高可用
    3. 可伸缩到亿级结点、关系
    4. 高速遍历
  • 部署模式
     Single InstanceMultiple Instances
    EmbeddedEmbeddedGraphDatabaseHighlyAvailableGraphDatabase
    StandaloneNeo4j Servernot yet available
  • Maven配置
$HOME/.m2/setting.xml增加如下配置:

  
  
[xhtml] view plain copy
  1. <profiles><profile><repositories><repository><id>neo4j-public-repository</id><name>Publically available Maven 2 repository for Neo4j</name><url>http://m2.neo4j.org</url><snapshots><enabled>true</enabled></snapshots></repository></repositories></profile></profiles>  
 
项目的pom.xml中增加如下配置:

  
  
[xhtml] view plain copy
  1. <dependencies><dependency><groupId>org.neo4j</groupId><artifactId>neo4j</artifactId><version>{neo4j.version}</version></dependency></dependencies>  
  • 安装
    • windows
      1. 从http://neo4j.org/下载
      2. 解压安装文件
      3. 配置环境变量:%NEO4J_HOME%和%PATH%
      4. 安装系统服务:%NEO4J_HOME%/bin/InstallNeo4j.bat
      5. 启动:%NEO4J_HOME%/bin/Neo4j.bat
    • Linux基本同windows
  • 关键词
    • node:结点
    • relationship:关系
    • property:属性
    • indexer:索引器
    • traverser:遍历器
  • Get Started

neo4j建模

REST API

使用curl进行测试:curl -H http_header -X [GET,POST,PUT,DELETE] -d post_data your_url
-H http的header
-X http的类型
-d post的数据
Accept:application/json -- 可以接受的回复编码格式
Content-type:application/json -- 内容类型格式
例如:
curl -H Accept:application/json -H Content-type:application/json -X GET http://localhost:7474/db/data/
curl -H Accept:application/json -H Content-Type:application/json -X post -d '{"key1":"value1"}' http://localhost:7474/db/data/node

更多REST API信息

索引

  • 分类
    1. 内部的自然索引:因为其本身就相当于tree结构(一般数据库也用tree做索引,如B树),被traverser使用作遍历
    2. 使用集成索引:如Lucene
  • 可以对结点、关系进行索引
  • 为了更新一个索引,必须先移除,再添加
  • 某一索引按key缓存,可设置缓存大小:setCacheCapacity
  • 旧索引机制
    • IndexService
    • 不要实例化多个LuceneIndexService,因为内部其指向同一个index数据源
    • LuceneFulltextIndexService 和LuceneIndexService两者指向不同的index数据源
    • IndexService文档
  • 新索引机制

事务

  • 事务Overview
  • 嵌套事务:只有一个高层事务,所有嵌套事务均在高层事务内
  • 事务必须在try finally块中,事务必须显示success()
  • 死锁
  • 不要让事务太小(耗I/O),也不要太大(耗内存)
  • 批量插入
    • 特点:
      1. 用于数据初始化,批量写入
      2. 非事务
      3. 非线程安全
      4. 性能稍好
      5. 可能corrupt数据集
      6. 非批量插入时,内存被分配在堆外;在批量插入时,内存被分配在堆内;因此,需要保证足够的堆大小
  • Spring事务配置:具体见IMDB Example Transaction
  
  
[xhtml] view plain copy
  1. <tx:annotation-driven /><bean id="transactionManager"class="org.springframework.transaction.jta.JtaTransactionManager"><property name="transactionManager" ref="neo4jTransactionManagerService" /><property name="userTransaction" ref="neo4jUserTransactionService" /></bean><bean id="neo4jTransactionManagerService" class="org.neo4j.kernel.impl.transaction.SpringTransactionManager" /><bean id="neo4jUserTransactionService" class="org.neo4j.kernel.impl.transaction.UserTransactionImpl"><constructor-arg index="0" ref="graphDbService" /></bean>  
  
  
[java] view plain copy
  1. @Transactional  
  2. public void newActors( final List<ActorData> actorList ){// code that operates on the graph}  

性能

性能关注
  • CPU:32位、64位
  • Memory:至少1G,推荐4~8G
  • Disk:至少SCSI、EIDE,推荐SSD、SATA
  • FileSystem :支持fsync,fdatasync,至少ext3,推荐ext4、zfs
  • Software:Java 1.6+,OS:Windows,Linux等
性能调整(OS保留内存+File Mapping内存+JVM内存)
  1. 两个方面:caches和jvm
    1. caches
      • File buffer cache(File Mapping)
        • 低层次缓存,操作系统内存映射,尽可能使用操作系统特性
        • 事务提交时,logic log被立即fdatasync to disk,但是数据文件不是被立即存flush到磁盘上,直到logic log进行了rotate,增长logic log大小可以减少flush到磁盘的次数(可以在conf/neo4j-wrapper.conf中的wrapper.logfile.maxsize参数配置)
        • 防止不必要的page flush,配置OS当dirty page达到一定大小时才flush到磁盘(Linux OS参数配置)
        • 延迟写,直到逻辑日志轮转(sync、fsync、fdatasync)
        • 逻辑日志可用于崩溃恢复
        • 定长记录
          • nodestore 9bytes
          • relationshipstore 33bytes
          • propertystore 25bytes(primitive属性)
          • stringstore 133bytes(指针存在propertystore中,具体数据存在此处,120bytes有效)
          • arraystore 133bytes(指针存在propertystore中,具体数据存在此处,120bytes有效)
        • 可以配置缓存在JVM内存中,也可以不在JVM内存中
        • 相关配置参数
          1. use_memory_mapped_buffers:true使用操作系统内存mapping,false使用堆内存作映射
          2. neostore.nodestore.db.mapped_memory:结点file memory mapping
          3. neostore.relationshipstore.db.mapped_memory:关系file memory mapping
          4. neostore.propertystore.db.mapped_memory:属性file memory mapping
          5. neostore.propertystore.db.strings.mapped_memory:字符串属性file memory mapping
          6. neostore.propertystore.db.arrays.mapped_memory:数组属性file memory mapping
          7. string_block_size:property中类型string块大小,默认为120bytes(块大小在创建后不能改变,如果一个字符串大小大于块大小,字符串会分布在多个块中,有性能影响)
          8. array_block_size:property中类型array块大小,默认为120bytes(块大小在创建后不能改变,同上)
          9. dump_configuration:是否启动时dump配置
        • batch_inserter模式时,只需考虑node和relationship,因为在此模式下一般property在写入后不会读取,node和relationship因为会在其中保存属性等会被读取
      • Object cache
        • 高层次缓存
        • 以优化形式存储,利于快速遍历
        • 缓存在JVM堆中
        • 延迟加载策略
        • LRU策略
        • 相关配置参数:cache_type:值为soft(default)(SoftReference)、weak(WeakReference)、none(始终保持在jvm中,容易OOM)
    2. jvm
      • 参数:-d32或-d64(32位或64位),-server,内存相关参数(内存大小、分代比例、线程堆栈大小-Xss(所有线程共享?))、垃圾收集器(推荐使用CMS收集器),OOM时自动产生内存dump
      • 大量使用NIO包,很多堆外内存分配
      • 要防止page in or out(观察swap交换情况,不要给OS保留太小内存)
      • 要考虑jvm的pause time(暂停时间) / throughput(吞吐量)
      • NUMA structure:version 1.6.0 update 18实现,-XX:+UseNUMA
      • 在堆中每个对象大小
        1. Node:688bytes
        2. Relationship:392bytes
        3. Property:232bytes
        4. Primitive:24bytes
        5. String:(64 + 2 * len(string))bytes
        6. Relationships:???
    3. 写性能:事务大小(事务小,I/O多;事务大,内存多);避免dirty page flushed to disk unexpectedly(不需要flush时flush)
    4. 更多配置,见Configuration Settings
    5. 更多性能,见Performance Guide

    配置

    • neo4j-wrapper.conf:logfile相关配置,jvm相关参数配置
    • conf/neo4j-server.properties:neo4j参数配置文件
      1. org.neo4j.server.database.location:db位置,相对于NEO4J_HOME
      2. org.neo4j.server.webserver.port:端口号,默认7474
      3. org.neo4j.server.webadmin.rrdb.location:运行数据metrics信息文件,默认data/graph.db/../rrd
      4. org.neo4j.server.webadmin.data.url:REST API endpoint url,默认/db/data/
      5. org.neo4j.server.webadmin.management.uri:管理界面url,默认/db/manage/
      6. org.neo4j.server.db.tuning.properties:指定性能参数配置文件,默认conf/neo4j.properties
    • conf/neo4j.properties:neo4j低层参数配置文件
    • conf/log4j.properties:log4j配置文件
    • conf/coord-wrapper.conf:ha结点启动相关配置
    • conf/coord.cfg:ha结点的zookeeper相关配置

    neo4j高可用部署

    • neo4j-ha架构图
    • 功能
      1. fault-tolerant
      2. horizontally scaling
      3. slave可写,同时同步到master,异步同步到其他他slave;对于master的写,会异步同步到slave
    • 使用Apache Zookeeper保持各节点间的状态信息
    • HA配置参数
      1. ha. machine_id:server id
      2. ha. server:master的host和port
      3. ha. zoo_keeper_servers:zookeeper连接,以逗号分隔
      4. ha. pull_interval:slave从master拉数据的间隔
    • 更多信息,见neo4j_ha_cluster
    • 例子:examples

    neo4j shell

    • 配置文件加入:enable_remote_shell = true(默认端口为1337)或enable_remote_shell = port = 1331(指定端口)
    • neo4j-shell -host -port
    • man可以查找命令,具体命令参数用man

    neo4j备份

    • 参数:keep_logical_logs:true

    neo4j监控

    neo4j安全

    Trouble Shooting

    1. neo4j中的所有api都是线程安全的,因此不需要额外的同步;串行,性能是否可以?

    相关文档

     

    neo4j api neo4j学习资料 neo4j教程 │ neo4j官方API(官方各种API的文档整理).7z │ neo4j数据迁移--初探(一).htm │ neo4j笔记.docx │ neo4j错误码状态码.html │ └─01.neo4j学习博客汇总 │ index.html └─neo4j_cypher │ Cypher(神奇的WITH).html │ cypher_index.html │ Cypher查询语言--Neo4j 综合(四) - divenswu - 博客园.html │ Cypher查询语言--Neo4j中的SQL - 爱上包子 - 博客园.html │ DETACH DELETE n 删除node n ,并删除所有与n相关的关系.html │ Neo4j - NOT IN query.html │ Neo4j CQL - (11)- REMOVE删除 DELETE.html │ Neo4j Cypher 复杂查询详解在之With - 何源浩的博客 - CSDN博客.html │ neo4j 中使用sparql查询.html │ Neo4j 中文社区,致力于 Neo4j 的技术研究。.html │ Neo4j 使用cypher语言进行查询 - MHL - 博客园.html │ Neo4j 第一篇:在Windows环境中安装Neo4j - 悦光阴 - 博客园.html │ Neo4j 第三篇:Cypher查询入门 - 悦光阴 - 博客园.html │ Neo4j 第二篇:图形数据库 - 悦光阴 - 博客园.html │ Neo4j 第五篇:批量更新数据 - 悦光阴 - 博客园.html │ Neo4j 第四篇:使用C更新和查询Neo4j - 悦光阴 - 博客园.html │ Neo4J(Cypher语句)初识.html │ Neo4J(Cypher语句)学习 - 赵晓雷的专栏 - CSDN博客.html │ Neo4j_事务&深度遍历.html │ neo4j中的分组查询.html │ Neo4j之Cypher学习总结.html │ NEO4J亿级数据导入导出以及数据更新 - 耶和华靠近伤心的人,拯救灵性痛悔的人 - CS.html │ Neo4j入门点滴(一):Cypher.html │ Neo4j入门点滴(三):用Cypher完善图.html │ Neo4j入门点滴(二):模式与模式匹配.html │ Neo4j入门点滴(五):Windows Shell for Cypher.html │ Neo4j入门点滴(四):Cypher查询优化.html │ Neo4J几种数据导入方式的效率对比 - 何源浩的博客 - CSDN博客.html │ Neo4j模糊查询及分页查询 - c1052981766的专栏 - CSDN博客.html │ neo4j笔记 - Neo4j 中文社区.html │ Neo4j语句 - zhuweiba_321的博客 - CSDN博客.html │ Neo4j语句 - 阿里云.html │ 【程裕强的专栏】大数据学习笔记(1.01^365=37.78,0.99^365=0.025.html │ 五岳之巅-Neo4j入门点滴-博文目录.html │ 关于Neo4j和Cypher批量更新和批量插入优化的5个建议 - 逆水行舟 - CSDN博.html │ 图数据库-Neo4j介绍与Cypher入门.html │ 图数据库之Cypher语言 - 活的洒脱怪我咯的专栏 - CSDN博客.html │ 图数据库之neo4j-jdbc的使用 - 活的洒脱怪我咯的专栏 - CSDN博客.html │ 数据分页处理系列之三:Neo4j图数据分页处理.html │ 暖暖动听.html │ 飘涯 - 简书.html
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值