張百平
(廣州醫(yī)科大學(xué)附屬第三醫(yī)院 廣州 510000)
從一個(gè)典型的醫(yī)療關(guān)系表結(jié)構(gòu)中抽象出一個(gè)豐富的圖結(jié)構(gòu),圖數(shù)據(jù)庫方法可廣泛利用這種圖形表示。圖數(shù)據(jù)庫能夠直接處理各種查詢,否則就需要在規(guī)范化關(guān)系表中執(zhí)行深度連接操作。這些查詢涉及醫(yī)療實(shí)體之間的關(guān)系,可以用于協(xié)同過濾以及為醫(yī)療保健提供個(gè)性化開發(fā)服務(wù)。圖數(shù)據(jù)庫可以處理這類查詢,并提供直觀的查詢表示和對(duì)數(shù)據(jù)的訪問。作為非規(guī)范化表的一種形式,圖數(shù)據(jù)庫可以避免生成和復(fù)制大量的表,為醫(yī)療系統(tǒng)提供一個(gè)低成本的數(shù)據(jù)管理框架。
關(guān)系數(shù)據(jù)庫(如Oracle和MySQL)在獲取重復(fù)的表格數(shù)據(jù)方面表現(xiàn)出色。盡管名稱中有“關(guān)系”一詞,但關(guān)系數(shù)據(jù)庫在存儲(chǔ)或表達(dá)存儲(chǔ)的數(shù)據(jù)元素之間關(guān)系方面卻效率很低。與關(guān)系數(shù)據(jù)庫不同,圖數(shù)據(jù)庫完全圍繞數(shù)據(jù)關(guān)系構(gòu)建。圖數(shù)據(jù)庫不將關(guān)系視為模式結(jié)構(gòu),而將其視為數(shù)據(jù)。
對(duì)關(guān)系數(shù)據(jù)庫與圖數(shù)據(jù)庫(Neo4j)在數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)模型特征和查詢功能等方面進(jìn)行比較[1],見表1,發(fā)現(xiàn)當(dāng)數(shù)據(jù)之間的關(guān)聯(lián)度較高時(shí),使用圖數(shù)據(jù)庫具有明顯的優(yōu)勢。從數(shù)據(jù)模型、存儲(chǔ)方式、特性和查詢語言等方面分析多種NoSQL(不僅是SQL)數(shù)據(jù)庫與關(guān)系數(shù)據(jù)庫相比的優(yōu)缺點(diǎn)[2],提出一個(gè)基于社交網(wǎng)絡(luò)的微基準(zhǔn),通過測試5個(gè)不同的數(shù)據(jù)庫(Dex、Neo4j、RDF-3X、Virtuoso和PostgreSQL)來比較不同數(shù)據(jù)管理模式[3]。
表1 圖數(shù)據(jù)庫與關(guān)系數(shù)據(jù)庫對(duì)比
在圖數(shù)據(jù)庫中查找相關(guān)節(jié)點(diǎn)比在關(guān)系數(shù)據(jù)庫模型中查找相關(guān)數(shù)據(jù)行更加有效。圖數(shù)據(jù)模型的靈活性允許添加新的節(jié)點(diǎn)和關(guān)系,而原始數(shù)據(jù)保持不變。以圖格式存儲(chǔ)數(shù)據(jù)允許用戶從不同角度查看相同數(shù)據(jù)和連接。數(shù)據(jù)和關(guān)系網(wǎng)絡(luò)有助于找到最佳路徑、模式匹配或提供建議。將數(shù)據(jù)從關(guān)系數(shù)據(jù)庫移至圖數(shù)據(jù)庫可以利用所有圖數(shù)據(jù)庫提供的優(yōu)勢。
通常,門診電子病歷(Electronic Medical Record,EMR)數(shù)據(jù)由患者、疾病、醫(yī)生、檢驗(yàn)檢查和藥品組成。這些數(shù)據(jù)之間存在著許多聯(lián)系。如果使用圖數(shù)據(jù)庫,可以更好地利用這些連接從海量醫(yī)療數(shù)據(jù)中做出更好的推斷。要處理不斷增長的連接數(shù)據(jù),可以選擇Neo4j,這是一種針對(duì)關(guān)系管理而優(yōu)化的非關(guān)系圖數(shù)據(jù)庫,以進(jìn)行進(jìn)一步的分析和決策。
將數(shù)據(jù)從關(guān)系數(shù)據(jù)庫映射到圖數(shù)據(jù)庫基本上是將關(guān)系表示從一個(gè)數(shù)據(jù)庫轉(zhuǎn)換到另一個(gè)數(shù)據(jù)庫,從表結(jié)構(gòu)轉(zhuǎn)換到圖結(jié)構(gòu)。關(guān)系數(shù)據(jù)庫表中的數(shù)據(jù)實(shí)體是行(包含列),圖數(shù)據(jù)庫中的數(shù)據(jù)實(shí)體是節(jié)點(diǎn)(包含屬性)。更具體地說,可以使用關(guān)系數(shù)據(jù)庫模型的外鍵來構(gòu)建邊,從而將松散耦合的數(shù)據(jù)記錄轉(zhuǎn)換為高度有界的節(jié)點(diǎn)組。
Neo4j是一個(gè)屬性圖數(shù)據(jù)庫,使用圖的原生結(jié)構(gòu),即鄰接表進(jìn)行存儲(chǔ),便于快速處理關(guān)系[4]。Neo4j使用的是Cypher查詢語言,Cypher可以提供豐富、高效的表達(dá)式來描述關(guān)系查詢[5]。與其他圖查詢語言相比,Cypher語言具有良好的發(fā)展前景[6]。為了簡化圖分析的工作,筆者調(diào)查了幾個(gè)圖數(shù)據(jù)庫?;跀?shù)據(jù)庫對(duì)軟件可追溯性的適用性審查[7],最終選擇Neo4j作為研究對(duì)象。Cypher對(duì)具有不同特征的數(shù)據(jù)進(jìn)行操作,這些操作是在圖的節(jié)點(diǎn)和邊上執(zhí)行的,而不是在表、元組以及與主鍵或外鍵的關(guān)系上執(zhí)行。
Neo4j圖數(shù)據(jù)庫建模是將任意域描述為節(jié)點(diǎn)和關(guān)系的連通圖的過程。與傳統(tǒng)關(guān)系型數(shù)據(jù)庫不同,Neo4j是一個(gè)無模式數(shù)據(jù)庫,這意味著在添加數(shù)據(jù)之前不需要定義表和關(guān)系。一個(gè)節(jié)點(diǎn)可以有任何屬性,任何節(jié)點(diǎn)都可以與其他節(jié)點(diǎn)相關(guān)聯(lián)。Neo4j數(shù)據(jù)庫的數(shù)據(jù)模型在所包含的數(shù)據(jù)中是隱式的,Neo4j數(shù)據(jù)建模是描述性的。Neo4j的主要優(yōu)點(diǎn)是對(duì)圖數(shù)據(jù)庫建模和查詢的直觀方式。使用Neo4j對(duì)門診EMR關(guān)系型數(shù)據(jù)庫進(jìn)行圖數(shù)據(jù)庫建模,患者、疾病、藥物及其之間關(guān)系將用Neo4j技術(shù)構(gòu)建并存儲(chǔ)在Neo4j中。
第1步是識(shí)別數(shù)據(jù)實(shí)體類型,見圖1,有4種類型的數(shù)據(jù)實(shí)體:患者信息、藥品字典、國際疾病分類 (International Classification of Diseases, ICD)第10版、診療字典(LIS&RIS),每個(gè)表表示正在操作的不同類型的信息。
圖1 EMR數(shù)據(jù)庫關(guān)系數(shù)據(jù)模式的表結(jié)構(gòu)邏輯關(guān)系
接下來需要找到這些實(shí)體之間的語義關(guān)系。這一步不太明顯,因?yàn)殛P(guān)系數(shù)據(jù)庫并不是將關(guān)系作為一級(jí)公民來處理?;颊邌未尉驮\所產(chǎn)生的所有記錄,包括檢查處方、西藥處方、中藥處方、診療處方等都通過CASEHISID_CHR這個(gè)就診流水號(hào)直接或者間接串聯(lián)起來。當(dāng)正確標(biāo)識(shí)數(shù)據(jù)實(shí)體和關(guān)系時(shí),可以為每個(gè)數(shù)據(jù)實(shí)體創(chuàng)建節(jié)點(diǎn),為每個(gè)關(guān)系創(chuàng)建邊。在圖中找到并構(gòu)建正確的邊是一項(xiàng)關(guān)鍵活動(dòng)。這些步驟影響數(shù)據(jù)結(jié)構(gòu)有效響應(yīng)最終用戶問題的能力。包括將邏輯關(guān)系(外鍵)和隱式關(guān)系(公共屬性)轉(zhuǎn)換為物理存儲(chǔ)在圖數(shù)據(jù)結(jié)構(gòu)中的顯式邊。使用Neo4j (帶標(biāo)簽的)屬性圖模型,其基本結(jié)構(gòu)包括實(shí)體(節(jié)點(diǎn))、屬性(屬性)、標(biāo)簽(類型),具有方向、開始節(jié)點(diǎn)和結(jié)束節(jié)點(diǎn)的關(guān)系(邊)。最終識(shí)別到的關(guān)系類型,見表2。
表2 EMR關(guān)系數(shù)據(jù)轉(zhuǎn)換為圖數(shù)據(jù)邊(關(guān)系)
在Intel(R)Xeon(R)6240 CPU@2.60 GHz(16處理器)、RAM 32 GB、Windows Server 2012 R2虛擬機(jī)服務(wù)器上,使用neo4j-community-4.3.6構(gòu)建診療圖譜。圖數(shù)據(jù)庫除了可以執(zhí)行強(qiáng)大的連接操作之外,Neo4j還允許用戶創(chuàng)建索引。索引可以在節(jié)點(diǎn)或邊的屬性上創(chuàng)建,一個(gè)索引單元可以指向多個(gè)圖模式單元,從而提高搜索效率。還可以在圖上創(chuàng)建新的關(guān)系,見表3。
表3 新建關(guān)系、數(shù)量、代碼及耗時(shí)
通過繪制表示數(shù)據(jù)中常見模式的圖形片段,可以將模型可視化,見圖2。
圖2 Neo4j診療圖譜節(jié)點(diǎn)及關(guān)系數(shù)據(jù)模式總覽
經(jīng)過以上環(huán)節(jié)的構(gòu)建,獲得患者診療圖譜節(jié)點(diǎn)和關(guān)系基本情況,見表4、表5?;颊咴\療圖譜包含270 871個(gè)節(jié)點(diǎn)(4類標(biāo)簽)和6 091 656個(gè)關(guān)系(10種關(guān)系類型)。
表4 診療圖譜節(jié)點(diǎn)總覽(個(gè))
表5 診療圖譜關(guān)系類型及數(shù)量(個(gè))
關(guān)系MedicalRecord記錄著患者就診時(shí)的詳細(xì)信息,包括既往史、現(xiàn)病史、體溫、發(fā)病時(shí)間、身份等基本情況。關(guān)系TCMP及WMP詳細(xì)記錄藥物處方的用法用量。NumofDiagnosis、NumberofTCM、NumberofWM、NumberofDT分別表示患者在一段時(shí)間內(nèi)所患某疾病次數(shù)、服用某中藥次數(shù)、服用某西藥次數(shù)及所做某檢驗(yàn)檢查項(xiàng)目次數(shù)。
Neo4j檢索結(jié)果的速度比關(guān)系數(shù)據(jù)庫快,比MySQL靈活。Neo4j在結(jié)構(gòu)類型查詢方面的表現(xiàn)優(yōu)于MySQL,在使用整數(shù)數(shù)據(jù)時(shí)比MySQL慢。Neo4j圖數(shù)據(jù)庫主要有5個(gè)構(gòu)建塊:節(jié)點(diǎn)、屬性、關(guān)系、標(biāo)簽和數(shù)據(jù)瀏覽器。圖數(shù)據(jù)庫擅長遍歷類型的查詢,從而促進(jìn)對(duì)關(guān)聯(lián)概念鏈的探索。這種“連接發(fā)現(xiàn)”可以識(shí)別新的關(guān)系。Neo4j不需要連接或索引就可以很容易地檢索它的相鄰節(jié)點(diǎn)或關(guān)系細(xì)節(jié)。下面以單個(gè)患者為例,在Neo4j圖數(shù)據(jù)庫中以圖的形式展示患者ID為“0000001816”在某段時(shí)間的診療記錄,可視化其在某段時(shí)間所患疾病,見圖3。所做檢查及所用藥物情況類似。
圖3 患者“0000001816”某段時(shí)間所患疾病情況
查詢某些適應(yīng)癥藥物的結(jié)果分析并可視化EMR中的規(guī)律與模式,見圖4。
圖4 某段時(shí)期內(nèi)用于治療“雙相情感障礙”的藥物
歸納出對(duì)應(yīng)于某一疾病或者某些疾病組合,醫(yī)生們通常習(xí)慣于開哪些藥。
基于醫(yī)學(xué)數(shù)據(jù)的特點(diǎn),使用屬性圖數(shù)據(jù)庫Neo4j對(duì)EMR進(jìn)行建模,實(shí)踐表明,該模型比關(guān)系數(shù)據(jù)庫模型具有更好的語義表達(dá)能力,能夠更清晰地表達(dá)數(shù)據(jù)內(nèi)部的語義關(guān)系,滿足實(shí)際查詢需求,并具有關(guān)系數(shù)據(jù)庫模型無法實(shí)現(xiàn)的路徑發(fā)現(xiàn)功能。
大型醫(yī)療數(shù)據(jù)存儲(chǔ)庫是知識(shí)發(fā)現(xiàn)的來源。對(duì)這類存儲(chǔ)庫的有效分析通常需要對(duì)數(shù)據(jù)中的依賴關(guān)系有全面理解。知識(shí)圖譜與任務(wù)無關(guān),創(chuàng)建相同的知識(shí)圖譜,可以用于許多不同的任務(wù),甚至是機(jī)器學(xué)習(xí)之外的任務(wù)。知識(shí)圖譜作為異構(gòu)知識(shí)學(xué)習(xí)的默認(rèn)數(shù)據(jù)模型,使用圖數(shù)據(jù)庫表示和查詢疾病網(wǎng)絡(luò)。
本文使用Neo4j對(duì)醫(yī)療數(shù)據(jù)進(jìn)行建模,簡潔直觀地表達(dá)數(shù)據(jù)之間關(guān)系。使用圖數(shù)據(jù)庫有利于醫(yī)療數(shù)據(jù)分析和可視化,未來將添加機(jī)器學(xué)習(xí)機(jī)制,創(chuàng)建基于圖數(shù)據(jù)庫的醫(yī)學(xué)推薦引擎。