?

国产精品高潮呻吟久久AV无码,在线观看亚洲糸列,888奇米亚洲影视四色,中文字幕动漫精品第1页,国产大屁股视频免费区,半夜他强行挺进了我的体内,免费看国产曰批40分钟,国产女人片最新视频,要做AV在线播放,欧美韩日精品一区二区三区

在選擇數(shù)據(jù)庫的路上,我們遇到過哪些坑?(二)

【數(shù)據(jù)猿導(dǎo)讀】 你會怎么選擇數(shù)據(jù)庫,是關(guān)系數(shù)據(jù)庫、XML 數(shù)據(jù)庫、資源描述框架(RDF),還是圖形數(shù)據(jù)庫? 本文的第1部分 深入而生動地探討了各種選擇。在第2部分,將深入介紹使用 Neo4j 的注意點

在選擇數(shù)據(jù)庫的路上,我們遇到過哪些坑?(二)

過渡到 Neo4j 之后的經(jīng)驗和教訓(xùn)

下面介紹一些有關(guān)運行 Neo4j 的實用技巧:

1. 如果你是 Java 商城,請嵌入式地運行 Neo4j

Neo4j 是本地 Java 平臺,我們又是 Java 商城,用 Neo4j 相當(dāng)合適。嵌入 Neo4j 讓我們不用再進(jìn)行 REST 調(diào)用,這對于安全來說確實很重要。有關(guān)進(jìn)行 REST 調(diào)用的進(jìn)一步危害,請觀看這段有關(guān) REST 安全漏洞的 JavaOne 討論。

嵌入式地運行 Neo4j 還為我們大幅降低了復(fù)雜性。我們可以直接在進(jìn)程中調(diào)用 Neo4j API,從而快速了解Cypher 語言,以便運行 Cypher 和 Java API 這兩者的結(jié)合體。同時我們再也不需要托管和非托管的擴(kuò)展了。

2. 摸清自己的優(yōu)勢

摸清自己的優(yōu)勢和所選擇的工具的優(yōu)勢,這一點極為重要。用工具來做不適當(dāng)?shù)氖?,效果會大打折扣?/p>

本地圖形數(shù)據(jù)庫在關(guān)系方面的表現(xiàn)確實很好;在圖形中找到切入點,然后按照需要深入地研究各種關(guān)系,這在 Neo4j 中快得驚人。但如果想要在單個節(jié)點之外進(jìn)行復(fù)雜的多值屬性全文檢索,效果就大打折扣了 —— 但我們選擇圖形數(shù)據(jù)庫并不是為了做這個。

3. 了解查詢時會發(fā)生哪些事情

了解查詢時會發(fā)生哪些事情,這一點也極為重要,這能夠優(yōu)化 Cypher 語言。

請看下面這個非常簡單的查詢。我想要找到 Franklin Country 所有擁有狩獵執(zhí)照的男性,并且執(zhí)照上的地址需要和此人的家庭住址相匹配,以便我們確認(rèn)這是同一個人。

我有一個人員節(jié)點,一個執(zhí)照節(jié)點,還有一個位置節(jié)點,每個節(jié)點上都有各種不同屬性:

數(shù)據(jù)庫要做的第一件事就是找到切入點(可能有多個切入點),然后圖形從切入點展開搜索。尋找切入點通常是個讓人頭痛的問題。為此要使用帶有靜態(tài)索引集的基于規(guī)則的規(guī)劃程序,這一軟件已于近期升級為基于費用。這雖然還不夠完美,但無疑已經(jīng)朝著正確的方向前進(jìn)了一大步。

索引

索引基本上會復(fù)制數(shù)據(jù)庫中的信息片段,這樣有利于它迅速找到節(jié)點。在本例中,只使用信息片段來確定切入點。雖然不是必須要使用索引,但它確實能派上用場。如果要在特定的節(jié)點屬性上進(jìn)行檢索,在節(jié)點上設(shè)置一個索引會是個好辦法,即使這會占用磁盤空間。

索引分為兩種:schema 和 legacy。Schema 索引是最新版,使用內(nèi)部自定義的 Neo4j 內(nèi)置索引,目前是默認(rèn)設(shè)置。

一旦利用 Cypher 或 Java API 創(chuàng)建 schema 索引后,這些索引就會自動由數(shù)據(jù)庫維護(hù)。例如,如果你想在每個帶有“人員”標(biāo)簽和“性別”屬性的節(jié)點上創(chuàng)建索引,當(dāng)你創(chuàng)建新節(jié)點、更改節(jié)點值或刪除節(jié)點時,數(shù)據(jù)庫將自動對其進(jìn)行更新。這時你也可以設(shè)置限定條件,比如必須存在屬性或?qū)傩员仨毷俏ㄒ坏摹?/p>

Legacy 索引是 Lucene 索引,是較早的版本但尚未棄用。可以通過配置文件、Neo4j 屬性文件、Java API 或 Cypher 來設(shè)置 legacy 索引。Legacy 索引使用的是 Lucene 而非 Neo4j 專有索引機(jī)制。我們在用 Neo4j 時幾乎沒有什么漏洞,而每次遇到的漏洞基本都和 legacy 索引有關(guān)。即使是這樣,有時候這些索引也是必要的。

Apache Luke 是一款非常不錯的開源工具,用戶可以用它直接查看和搜索 Lucene 索引。這也幫助我們修復(fù)了 legacy 索引中的異常行為。

自動索引與手動索引

Legacy 索引有兩種用法:自動索引和手動索引。我建議使用自動索引,因為它更容易維護(hù)?;旧现灰O(shè)置一次(可以在配置文件中設(shè)置也可以通過 API 設(shè)置),然后設(shè)為在特定類型的節(jié)點上為特定類型的屬性編寫索引。自動索引還能夠在必要時輕松重建索引。

但是用戶無法指定是哪種類型的索引。在 Lucene 中,schema 存在不同索引類型,例如字符串、區(qū)分大小寫,以及數(shù)值,這些都是物理上獨立的索引。

如果你在查詢 Lucene 時想要使用這些索引,必須要做的第一件事就是告訴 Lucene 要使用哪個索引。但如果進(jìn)行自動索引,Neo4j 可以根據(jù)你要編寫索引的第一個對象來選擇使用哪個索引。例如,如果你設(shè)置的第一個索引是藍(lán)色,Neo4j 就會明白藍(lán)色是字符串,然后會永久性地將藍(lán)色放在字符串索引中。

如果你能很好地控制收到的數(shù)據(jù),這一索引方式效果會很不錯。但我們的系統(tǒng)沒有這樣。我們從許多不同的來源接收數(shù)據(jù),所以收到的“blue”(藍(lán)色)屬性可能會指年齡。但如果這一屬性是最先收到的,Neo4j 就會把年齡作為基于字符串的屬性而不是數(shù)值屬性來編寫索引,如此一來,之后就沒法按照我希望的方式展開進(jìn)一步比對和排列了。在這種情況下,只能手動創(chuàng)建索引。

使用自動索引的另一個好處是,如果目錄無故損壞,很容易就能修復(fù)目錄??梢詴和U麄€數(shù)據(jù)庫,進(jìn)入 Lucene 索引目錄,刪除此目錄,重啟數(shù)據(jù)庫,然后 Neo4j 會為所有節(jié)點重新編寫索引。但如果已經(jīng)進(jìn)行了手動索引,你只能返回,然后為所有節(jié)點重新編寫索引。

范圍查詢

下面一系列幻燈片顯示了范圍查詢:

我想查詢“profile”(個人信息),所以我把 PROFILE 放在查詢內(nèi)容的前面。我想找到收入為特定數(shù)值(50500)的所有人群并且只返回最前面的兩個結(jié)果。

這段代碼表明,我已經(jīng)有了某人的收入索引,規(guī)劃程序的限值是 2。 NodeIndexSeek 用這一索引來查找數(shù)值,從一個擁有 22 萬人的樣本數(shù)據(jù)庫中進(jìn)行了大約 2800 次數(shù)據(jù)庫訪問。

在接下來的范圍查詢中,我準(zhǔn)備查找收入低于 50500 的人:

在這次的查詢中,我們執(zhí)行了 NodeByLabelScan ,由于沒有使用索引,我們進(jìn)行了多達(dá) 43 萬次數(shù)據(jù)庫訪問。在 Neo4j 第 2.3 版之前,schema 索引不支持范圍,所以你必須得用 legacy 索引,然后直接查詢 Lucene 索引,才能發(fā)揮作用。

第 2.3 版修復(fù)了這一問題;現(xiàn)在有了 NodeIndexSeekByRange ,可在 schema 標(biāo)簽上提供范圍索引:

4. 不要使用內(nèi)部節(jié)點 ID

使用當(dāng)前節(jié)點 ID 是個很大的誘惑,但這種做法非常不可取,這是因為在某些時刻,這種做法會導(dǎo)致數(shù)據(jù)庫內(nèi)容被刪除。請閱讀這篇介紹,了解更多相關(guān)內(nèi)容。

Neo4j 使用增量日志。如果你刪除了某個節(jié)點,最后系統(tǒng)會翻轉(zhuǎn)節(jié)點 ID,這樣你就可以重復(fù)使用這些數(shù)字。我們結(jié)合使用了節(jié)點標(biāo)簽和隨機(jī)選擇的 UUID,這樣如果你的 API 始終暴露在外,就可以提供額外的安全保障。

5. 數(shù)據(jù)建模很重要

數(shù)據(jù)模型的重要程度至少和查詢相當(dāng)。下面的說明很有用:可以通過多重關(guān)系類型或關(guān)系上的屬性來為部分關(guān)系建模。兩種方法似乎同樣合理,但它們的性能表現(xiàn)可能大相徑庭。一定要了解一下 GraphAware 對這一內(nèi)容的介紹。其區(qū)別在于,一方定義不同類型的 person 和 place 之間的關(guān)系……

……而另一方則表示有三種不同的屬性類型:

性能表現(xiàn)提升了八倍。上述 GraphAware 的文章深入詳細(xì)地解釋了這一概念。

6. 優(yōu)化性能

EXPLAIN 和 PROFILE 絕對是你的良師益友。別擔(dān)心 Java API,而查詢規(guī)劃程序還很年輕,在許多情況下都比 Cypher 要快。如果你要設(shè)定基準(zhǔn),一定要以溫備份數(shù)據(jù)庫設(shè)定基準(zhǔn)。這樣就能加載 Neo4j 的數(shù)據(jù)庫緩存。

7. 一定要交流!

Neo4j 擁有強(qiáng)大的支持社區(qū),包括谷歌論壇、Slack 協(xié)作頻道、Stack Overflow 網(wǎng)站和非常出色的支持團(tuán)隊。

8. 在工具欄里添加下面的代碼

借助下面的樣板代碼,可以檢查數(shù)據(jù)庫中的每個節(jié)點并修復(fù)所有問題。這一示例有時會抓取關(guān)系,但你也可以對節(jié)點或其他限定條件進(jìn)行同樣的操作。

不管怎樣,它都能事務(wù)性地依次通過數(shù)據(jù)庫中的所有節(jié)點。在本例中,每個事務(wù)是 90000 次操作,如果有需要,還可以批量更改整個數(shù)據(jù)庫:

延伸閱讀

在選擇數(shù)據(jù)庫的路上,我們遇到過哪些坑?(一)


來源:OneAPM 官方博客

聲明:數(shù)據(jù)猿尊重媒體行業(yè)規(guī)范,相關(guān)內(nèi)容都會注明來源與作者;轉(zhuǎn)載我們原創(chuàng)內(nèi)容時,也請務(wù)必注明“來源:數(shù)據(jù)猿”與作者名稱,否則將會受到數(shù)據(jù)猿追責(zé)。

刷新相關(guān)文章

在VUCA時代, 數(shù)據(jù)分析起家的藍(lán)燈數(shù)據(jù)如何利用云原生微應(yīng)用將“顛覆式革新”進(jìn)行到底?
在VUCA時代, 數(shù)據(jù)分析起家的藍(lán)燈數(shù)據(jù)如何利用云原生微應(yīng)用將...
#榜樣的力量#疾控AI分析平臺WDCIP——以科技力量貢獻(xiàn)“大數(shù)據(jù)”智慧丨數(shù)據(jù)猿新冠戰(zhàn)“疫”公益策劃
#榜樣的力量#疾控AI分析平臺WDCIP——以科技力量貢獻(xiàn)“大數(shù)...
張涵誠:大數(shù)據(jù)招商平臺可推動地方供給側(cè)改革
張涵誠:大數(shù)據(jù)招商平臺可推動地方供給側(cè)改革

我要評論

返回頂部