NO IMAGE

目前neo4j文件只限於官方文件,本文將neo4j官方主要的文件整理了一下,供需要的人蔘考,內容也會不斷更新!


開始

  • 特點
    1. ACID事務
    2. 高可用
    3. 可伸縮到億級結點、關係
    4. 高速遍歷
  • 部署模式
     Single InstanceMultiple Instances
    EmbeddedEmbeddedGraphDatabaseHighlyAvailableGraphDatabase
    StandaloneNeo4j Servernot yet available
  • Maven配置
$HOME/.m2/setting.xml增加如下配置:
 
專案的pom.xml中增加如下配置:
  • 安裝
    • 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

效能

效能關注

  • 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都是執行緒安全的,因此不需要額外的同步;序列,效能是否可以?

相關文件