在之前的二十篇文章,幾乎都圍繞著 Neo4j 視覺化的操作,旨在體驗圖形資料庫的特性與魅力,但在正式的上線環境,當然不會安裝 Neo4j Desktop
,那是開發研究用途,所以接下來會介紹 Neo4j Server 版。
在這一篇文章Neo4j 授權與快速安裝上手其實已經有列出 Neo4j Server 的安裝,詳細的各平台安裝教學,可以再參考官網 https://neo4j.com/docs/operations-manual/current/installation/
這篇文章會介紹幾個重要的 Server 端設定。
Linux 有預設的同時開啟檔案數限制是 1024,但 Neo4j 最低要求是 40000。可以先查看目前的開啟檔案數限制:
ulimit -n
增加開啟檔案數限制到 65536
ulimit -n 65536
將設定值永久更新,編輯 /etc/security/limits.conf,並重新啟動 Neo4j
neo4j soft nofile 65536
neo4j hard nofile 65536
接著需要修改 /conf/neo4j.conf,是 Neo4j 的核心設定檔案。
如果是 Neo4j Desktop,檔案位置如下圖,進入資料庫的管理頁面後,選擇 Setting 可直接編輯 Neo4j.conf,或是選擇 [Open Folder->Configuration]
Page cache 用來暫存操作資料,如果能全部或大部分的資料放在記憶體中操作,避免頻繁直接存取磁碟,將加強存取的效率。
在設定記憶體之前,可以先查看目前的資料庫大小,以及對記憶體設定的建議
$neo4j-home> bin/neo4j-admin memrec
...
...
...
# Based on the above, the following memory settings are recommended:
dbms.memory.heap.initial_size=5g
dbms.memory.heap.max_size=5g
dbms.memory.pagecache.size=7g
...
...
...
# Total size of lucene indexes in all databases: 1050m
# Total size of data and native indexes in all databases: 5100m
可以發現 neo4j-admin memrec
除了取得資料以及索引的大小之外,還會給非常完整的建議,甚至還直接幫我們算出來理想的記憶體設定值,如果懶得自己算,不妨直接用他的建議也可 :)
以上述執行結果為例,可以的話讓 pagecache 大於全部的資料量大小,並且可以自行抓一個未來資料庫成長的大小,所以設定 pagecache 6G, 7G 都是合理的。
JVM Heap 的記憶體也是另一個影響效能的設定,足夠大的 Heap 有利於平行作業,並且 initial_size 和 max_size 的值要相等,JVM 因此不需要改變 Heap 大小,否則將可能導致垃圾回收(GC)出現不完整的狀況。
詳細的記憶體設定頁面請參考
https://neo4j.com/docs/operations-manual/current/performance/memory-configuration/#memory-configuration
Neo4j Server 安裝後,預設只能本地端存取服務,若要開放區域網路,甚至對外提供服務,需要額外更改 Neo4j.conf。
共有三種連線方式 Bolt、Http、Https,有各自不同的 port,設定如下
# Bolt connector
dbms.connector.bolt.type=BOLT
dbms.connector.bolt.enabled=true
dbms.connector.bolt.tls_level=OPTIONAL
dbms.connector.bolt.listen_address=0.0.0.0:7687
# HTTP Connector
dbms.connector.http.type=HTTP
dbms.connector.http.enabled=true
dbms.connector.http.listen_address=0.0.0.0:7474
# HTTPS Connector
dbms.connector.https.type=HTTP
dbms.connector.https.enabled=true
dbms.connector.https.encryption=TLS
dbms.connector.https.listen_address=0.0.0.0:7473
Bolt 的 tls_level=OPTIONAL 是允許加密和未加密的連線;tls_level=REQUIRED 則是只允許加密連線;tls_level=DISABLED 只允許未加密連線。
另外還有個設定如下,如果有設定 proxy server,假設是由外網 9000 port 對應到 7474,那麼可以設定如下
dbms.connector.http.advertised_address=<proxy-addr>:9000
更多的設定請參考
https://neo4j.com/docs/operations-manual/current/configuration/connectors/