圖數(shù)據(jù)庫(kù)neo4j學(xué)習(xí)的幾點(diǎn)建議

1、入門(mén)建議

  • 注重應(yīng)用場(chǎng)景,圖數(shù)據(jù)庫(kù)擅長(zhǎng)處理深度關(guān)聯(lián)的數(shù)據(jù)分析。
  • 呆在有一定圖數(shù)據(jù)庫(kù)方面經(jīng)驗(yàn)的團(tuán)隊(duì)
  • 不要錯(cuò)過(guò)neo4j培訓(xùn)或者技術(shù)大會(huì)
  • 不要死磕,多和同事或者社區(qū)的同志交流
  • 采用關(guān)系數(shù)據(jù)庫(kù)的邏輯和思維來(lái)學(xué)習(xí)

2、模型設(shè)計(jì)的建議

  • 屬性是建模成節(jié)點(diǎn)還是作為屬性是需要考慮的,主要看屬性的應(yīng)用場(chǎng)景是否多,比如頻繁作為過(guò)濾條件。
  • 由于neo4j支持字節(jié)和字節(jié)數(shù)組存儲(chǔ),一個(gè)屬性可以存放達(dá)到數(shù)G的內(nèi)容,但是一個(gè)屬性文件太大,在neo4j底層存儲(chǔ)時(shí)由于某屬性太大往往會(huì)打亂整個(gè)文件的存儲(chǔ),導(dǎo)致讀寫(xiě)性能急劇降低。
  • 考慮數(shù)據(jù)的內(nèi)在分類(lèi)性質(zhì):比如將一個(gè)人的國(guó)家作為人的屬性,其實(shí)最終還是沒(méi)有利用好neo4j的標(biāo)簽機(jī)制。
  • 盡量不要用物理id
    由于根據(jù)物理id刪除物理節(jié)點(diǎn)后,在下次生成新的節(jié)點(diǎn)時(shí),會(huì)分配原來(lái)釋放的id空位,會(huì)導(dǎo)致一些意向不到的問(wèn)題(舊id引用一些過(guò)期數(shù)據(jù))

3、關(guān)于建立索引

(1)盡量使用shema index,
(2)索引是讀性能和寫(xiě)性能的結(jié)合,盡量不要對(duì)無(wú)效字段進(jìn)行索引,避免增加寫(xiě)成本。

4、關(guān)于數(shù)據(jù)去重

merge是可以做到數(shù)據(jù)的去重,但是在多個(gè)并發(fā)請(qǐng)求時(shí),并不能保證唯一性,還是用關(guān)鍵詞UNIQUE最好。

5、關(guān)于數(shù)據(jù)導(dǎo)入

  • PERIODIC COMMIT 理論值為1000-10000行
  • 盡量節(jié)點(diǎn)和關(guān)系分開(kāi)導(dǎo)入,避免cypher出現(xiàn)饑餓加載模式,導(dǎo)致數(shù)據(jù)加載過(guò)多導(dǎo)致內(nèi)存溢出
  • 數(shù)據(jù)導(dǎo)入先導(dǎo)入部分?jǐn)?shù)據(jù),測(cè)試cypher的可用性及導(dǎo)入的速度。
  • Merge會(huì)掃描所有的屬性
    Merge需要先檢查是否有重復(fù)節(jié)點(diǎn)(掃描所有屬性),然后再創(chuàng)建新節(jié)點(diǎn),因此添加數(shù)據(jù)的速度比CREATE慢,適合初次導(dǎo)入使用
    (6)僅使用一次Merge語(yǔ)句,比如創(chuàng)建人的節(jié)點(diǎn),不要給每個(gè)屬性分別Merge,然后就是Merge Key主鍵)
MERGE (company:Company {companyNumber:line1.CompanyNumber,
                        companyName:line1.CompanyName,
                        uri:line1.URI
                          })
改為
MERGE (company:Company {companyNumber: line1.CompanyNumber})
SET company.companyName = line1.CompanyName,
    company.uri = line1.URI;
  • 使用Constraint 和 index,來(lái)提高搜索速度
  • 使用Distinct來(lái)過(guò)濾數(shù)據(jù),避免后續(xù)可能的笛卡爾積
  • 設(shè)置Periodic commit來(lái)批量提交,可以盡可能多提交數(shù)據(jù),但是不要超過(guò)內(nèi)
  • 導(dǎo)入命令腳本化:通過(guò)neo4j-shell完成導(dǎo)入操作
  • Apoc Load CSV 命令只適合導(dǎo)入中等規(guī)模數(shù)據(jù)(千萬(wàn)級(jí)別)
  • MERGE一般用于創(chuàng)建節(jié)點(diǎn),對(duì)于關(guān)系要用CREATE

6、關(guān)于數(shù)據(jù)查詢(xún)

  • 對(duì)于場(chǎng)景使用到節(jié)點(diǎn)集合N,需要N和N之間進(jìn)行笛卡爾積,如果(n1,n2)和(n2,n1)是重復(fù)數(shù)據(jù),可通過(guò)id在where語(yǔ)句進(jìn)行過(guò)濾(如id(n1)>id(n2))

https://neo4j.com/blog/dark-side-neo4j-worst-practices/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容