iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
0
AI & Data

看圖說故事,讓 Neo4j 重新詮釋你的資料庫系列 第 21

Neo4j Server 記憶體與連線設定

  • 分享至 

  • xImage
  •  

在之前的二十篇文章,幾乎都圍繞著 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

增加 Neo4j 記憶體限制

接著需要修改 /conf/neo4j.conf,是 Neo4j 的核心設定檔案。
如果是 Neo4j Desktop,檔案位置如下圖,進入資料庫的管理頁面後,選擇 Setting 可直接編輯 Neo4j.conf,或是選擇 [Open Folder->Configuration]

Neo4j configuration file

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_sizemax_size 的值要相等,JVM 因此不需要改變 Heap 大小,否則將可能導致垃圾回收(GC)出現不完整的狀況。

詳細的記憶體設定頁面請參考
https://neo4j.com/docs/operations-manual/current/performance/memory-configuration/#memory-configuration

Neo4j 遠端存取

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/


上一篇
Neo4j Data Science 資料分析與 Bloom 視覺化
下一篇
以 Docker 執行 Neo4j 資料庫
系列文
看圖說故事,讓 Neo4j 重新詮釋你的資料庫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言