• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Native XML 數(shù)據(jù)庫在電子病歷存儲中的應用分析

      2017-11-16 02:04:57田昊宇
      軟件 2017年10期
      關鍵詞:病歷文檔客戶端

      田昊宇,馬 義

      (1. 沈陽市20中學,沈陽 110003;2. 沈陽市回民中學,沈陽 110016)

      Native XML 數(shù)據(jù)庫在電子病歷存儲中的應用分析

      田昊宇1,馬 義2

      (1. 沈陽市20中學,沈陽 110003;2. 沈陽市回民中學,沈陽 110016)

      針對使用傳統(tǒng)關系型數(shù)據(jù)庫進行電子病歷存儲所存在的數(shù)據(jù)建模復雜、擴展性差、查詢性能低等問題,提出了使用Native XML數(shù)據(jù)庫來存儲XML格式的電子病歷,并以DB2 Pure XML數(shù)據(jù)庫為例,在實驗環(huán)境下模擬構造XML電子病歷數(shù)據(jù),分別就數(shù)據(jù)建模、查詢語言、客戶端開發(fā)和性能四個方面進行驗證與分析。驗證結果顯示使用DB2進行XML數(shù)據(jù)建模結構簡單、擴展性好,優(yōu)于使用傳統(tǒng)對象關系模型建模;使用基于XQuery和XPath的查詢語言以及客戶端開發(fā)成本不高;在性能方面,基于10.6 k的病歷文件、100000數(shù)據(jù)量及有索引的情況下,查詢性能可以達到0.046秒。表明Native XML數(shù)據(jù)庫適合于構建電子病歷的存儲。

      電子病歷;XML;XQuery;XPath;DB2;Native XML數(shù)據(jù)庫

      0 引言

      電子病歷(EMR,Electronic Medical Record)也叫計算機化的病案系統(tǒng)或稱基于計算機的病人記錄。它是用電子設備(計算機、健康卡等)保存、管理、傳輸和重現(xiàn)的數(shù)字化的病人的醫(yī)療記錄,取代手寫紙張病歷。它的內容包括紙張病歷的所有信息[1-3]。

      電子病歷具有數(shù)據(jù)量大、數(shù)據(jù)類型多樣、多層次結構、數(shù)據(jù)結構因人而異等特點。這種結構的靈活性和對不同類型數(shù)據(jù)要求的多樣性,對基于傳統(tǒng)關系模型的數(shù)據(jù)庫管理系統(tǒng)軟件提出很大挑戰(zhàn)。

      而XML(extensible markup language)作為一種可擴展的結構化標記語言,在描述電子病歷內容方面具有以下優(yōu)勢:(1)XML采用了層次化面向對象的結構描述方法,非常適合于描述病歷這樣復雜的內容,在表達能力上優(yōu)于關系數(shù)據(jù)庫。(2)XML是一種元語言,可以定義描述對象的結構。這適合于病歷中不同內容結構的變化,適合于保持病歷的歷史。(3)XML將內容與樣式關聯(lián)在一起,這不僅可以保留病歷內容,也可保留病歷外觀。(4)XML作為電子商務時代的“標準語言”,擁有大量的開發(fā)和應用工具,有利于對病歷內容的處理[5]。

      目前各類商業(yè)數(shù)據(jù)庫以及開源數(shù)據(jù)庫陸續(xù)推出了支持 XML存儲的功能特性,按照存儲方式的不同,可以分為三類:1)以CLOB為存儲單元的XML數(shù)據(jù)庫;2)以對象關系表為存儲單元的XML數(shù)據(jù)庫;3)以XML原始文檔為存儲單元的XML數(shù)據(jù)庫(Native XML數(shù)據(jù)庫)[4]。而其中Native XML數(shù)據(jù)庫以一種比較自然的方式來處理 XML數(shù)據(jù),能夠從各方面很好的支持XML數(shù)據(jù)的存儲和查詢,在多數(shù)場景下更具優(yōu)勢。為了驗證對電子病歷支持的有效性,本文首先介紹了Native XML數(shù)據(jù)庫的特點,并選用比較有代表性的DB2 Pure XML數(shù)據(jù)庫來構建電子病歷實驗數(shù)據(jù)集,然后分別從數(shù)據(jù)建模、查詢語言、客戶端開發(fā)、性能四個方面進行驗證分析,從而來證明Native XML數(shù)據(jù)庫支持電子病歷系統(tǒng)的有效性。

      1 Native XML數(shù)據(jù)庫的特點

      Native XML數(shù)據(jù)庫是以原始的XML格式存儲XML文檔,由于保證了XML數(shù)據(jù)的層次結構,可以根據(jù)XPath路徑直接定位到XML的節(jié)點,無須解析成DOM,所以查詢的效率比較高。同時這種方式也消除了對 Schema的格式依賴,在相同的數(shù)據(jù)列可以保存不同類型的XML文檔,靈活性比較高。Native XML數(shù)據(jù)庫也具有一般數(shù)據(jù)庫的特征,如:支持事務、并發(fā)控制、查詢語言、安全機制、應用程序接口等[9-13]。

      1.1 查詢語言

      XPath[7-8]和XQuery[6]是W3C推薦的針對XML文檔的查詢語言。目前大部分Native XML數(shù)據(jù)庫產(chǎn)品都支持XPath,另外還有一些Native XML數(shù)據(jù)庫提供專有的查詢語言。XPath基于XML文檔樹形模型,給出從某個節(jié)點起的查詢路徑來搜索文檔。目前,XPath作為數(shù)據(jù)庫查詢語言還有不少缺陷,如不能執(zhí)行分組、排序、連接等操作。而 XQuery更像一種編程語言,支持循環(huán)等邏輯,支持分組、排序、連接等操作。相對于傳統(tǒng)數(shù)據(jù)庫的標準SQL語言,XQuery是一種針對XML數(shù)據(jù)查詢的功能強大、易于編程的語言。

      1.2 更新和刪除

      Native XML數(shù)據(jù)庫對XML文檔的更新和刪除方式有許多,如:簡單的替換或刪除現(xiàn)有 XML文檔,修改當前的 DOM樹,以及用于指定如何修改XML文檔片斷的語言。

      1.3 事務、鎖定和并發(fā)

      大多數(shù)的 Native XML數(shù)據(jù)庫都支持事務,然而鎖定操作通常是對整個 XML文檔進行,而非對文檔片斷,所以對多用戶并發(fā)性的支持相對較低。

      1.4 應用程序接口

      幾乎所有的 Native XML數(shù)據(jù)庫都提供編程接口,包括連接到數(shù)據(jù)庫、瀏覽與搜索元數(shù)據(jù)、執(zhí)行查詢和返回結果等方法。返回結果可能是 XML字符串、DOM tree或文檔的 SAX Parser(或 XML Reader)。當返回結果是多個文檔時,數(shù)據(jù)庫還會提供列舉(iterating)這些結果的方法。

      1.5 Round-Tripping

      Native XML數(shù)據(jù)庫的一個重要特性是為XML文檔提供round-T,即用戶將XML文檔存人數(shù)據(jù)庫后,可以再取回“同樣的”文檔。這對于以文檔為中心的應用來說非常重要,因為 CDATA部分、實體應用、注釋和處理指令是這些文檔不可缺少的組成部分。

      2 數(shù)據(jù)建模

      使用DB2 Pure XML為電子病歷數(shù)據(jù)建模比較簡單,只需要建立如下數(shù)據(jù)庫表,該表記錄了來某醫(yī)院就診的病人詳細歷史信息記錄,共2個字段,其中Patient_detail字段表示患者的電子病歷信息,字段類型為XML,表結構如下。

      表1 患者就診信息表Tab.1 The Table of patient medical information

      Patient_detail字段是以XML格式表示的患者電子病歷信息,樣例如下(由于 XML文件較大,此處只截取關鍵片段):

      ……

      +

      +

      +

      XML樣例各節(jié)點含義說明如下:

      表2 樣例XML格式說明Tab.2 Sample XML format specification

      從以上建模方式來看,將患者的就診記錄組織成XML層次結構保存到數(shù)據(jù)庫的XML字段中,只需要建立一張數(shù)據(jù)庫表。

      而如果采用對象關系表來建模,通??梢圆捎每v向設計或橫向設計。縱向的設計,即對于不同的檢查項目內容保存到相同的字段中,如果明細內容差異較大,需要不斷擴展表的字段來容納就診信息,造成對表結構的不斷調整以及語義不清和數(shù)據(jù)冗余;如果采用橫向設計,即對于每種檢查項目明細用一張表來表示,同樣需要對就診項目明細的擴展預留字段,而且對于查詢將造成多表關聯(lián),對性能產(chǎn)生影響。

      因此關系型建模比較適合數(shù)據(jù)內容比較固定,層次結構不高的情況,而 XML的建模比較適合數(shù)據(jù)內容比較靈活,層次結構較高的情況。

      3 查詢語言

      DB2 Pure XML使用XQuery來檢索XML中的數(shù)據(jù)信息,使用XPath來定位數(shù)據(jù)節(jié)點,以下定義了幾種常用操作場景來體現(xiàn)XQuery的特點。

      場景1:根據(jù)ID號查詢某位患者的病例信息。

      XQUERY db2-fn:xmlcolumn('ADMINISTRATO R.PATIENT.PATIENT_DETAIL')/patient[@id='00002 94067']

      場景2:查詢某位患者的就診項目編碼

      XQUERY db2-fn:xmlcolumn('ADMINISTRAT

      場景 3:查詢某位患者在某個時間段就診過的病例信息

      XQUERY db2-fn:xmlcolumn('ADMINISTRATO R.PATIENT.PATIENT_DETAIL')/patient[@id='00002 94067']/inpatient/date_of_admission[.OR.PATIENT.P ATIENT_DETAIL']/patient[@id='0000294067']/inpati ent/test_result/test/code/text() > xs:dateTime ("2011-03-10T15:04:57+08:00") and . < xs:dateTime("2017-03-30T15:04:57+08:00")] /../..;

      場景4:查詢得過某種疾病的所有患者列表(例如:乙肝表面抗原為陽性的病人)

      XQUERY db2-fn:xmlcolumn('ADMINISTRATO R.PATIENT.PATIENT_DETAIL')/patient/inpatient/test_result/test/test_items/test_item[name="乙肝病毒表面抗原" and value="陽性"]/../../../../../name/text()

      場景 5:查詢進行過某項檢查的患者信息(例如兩對半項目)

      XQUERY db2-fn:xmlcolumn('ADMINISTRATO R.PATIENT.PATIENT_DETAIL')/patient/inpatient/test_result/test[name='兩對半']/../../../name/text()

      場景 6:統(tǒng)計檢查出某種疾病的患者數(shù)量(例如乙肝病毒表面抗原為陽性的患者數(shù)量)

      XQUERY count(db2-fn:xmlcolumn('ADMINIST RATOR.PATIENT.PATIENT_DETAIL')/patient/inpati ent/test_result/test/test_items/test_item[name="乙肝病毒表面抗原"and value="陽性"])

      XQuery汲取了其它多種查詢語言的優(yōu)點,適用于各種類型的 XML數(shù)據(jù)源的查詢,不僅查詢功能強大,而且簡潔靈活且易于實現(xiàn)。從以上使用XQuery查詢語言的各類場景可以看出,XQuery完全可以完成查詢指定患者的信息、獲得某種疾病的患者信息、各類統(tǒng)計信息的查詢等各類模式匹配、過濾選擇和結果構造等操作,基本可以滿足電子病歷各類操作的基本需求。數(shù)據(jù)庫業(yè)界的三大主流廠商Oracle、IBM、Microsoft都已經(jīng)在各自的產(chǎn)品中提供了對XQuery規(guī)范的支持。

      4 客戶端開發(fā)

      客戶端開發(fā)主要驗證了使用DB2 Pure XML對客戶端開發(fā)所帶來的影響與改變,軟件開發(fā)工具使用Eclipse 4.4,JDBC版本使用JDBC4.1,JDBC驅動程序使用 Com.ibm.db2.jcc.DB2Driver。以下代碼片段實現(xiàn)了查詢所有乙肝病毒表面抗原為陽性的所有病人信息,以列表形式返回,java驗證代碼片段如下:

      Connection con = null;try{

      Class.forName("com.ibm.db2.jcc.DB2Drive r").newInstance();

      con = DriverManager.getConnection ("jdbc:db2:// IP:port/ins","user","pwd");

      String query="select x.* from

      administrator.patient, xmltable('$i/patient' passing patient_detail as "i" columns id varchar(40) path'@id', name varchar(40) path 'name') as x where xmlexists('$i/patient/inpatient/test_result/test/test_ite ms /test_item[name="乙肝病毒表面抗原" and value="陽性"]' passing patient_detail as "i") ";

      PreparedStatement

      stmt=con.prepareStatement(query);

      ResultSet rs=stmt.executeQuery();

      while(rs.next())

      System.out.println(rs.getString(1) + " " +rs.getString(2));

      }catch (SQLException e) {

      ……

      }

      }

      程序執(zhí)行結果如下:

      0000393374 楊飛

      0000392367 陳麗如

      0000397648 楊文軍

      0000491349 李飛龍

      0000283340 趙麗香

      ……

      從以上示例代碼可以看出,使用 JDBC4.1對XML進行查詢開發(fā)與對關系型數(shù)據(jù)表操作差別不大,對于XML的處理在JDBC中可以將查詢的XML文檔以字符串的形式返回,然后在客戶端可以使用dom4j等軟件包進行字符串與dom的轉換,也可以使用xmltable函數(shù)直接以關系表的形式返回,查詢效果與關系表的查詢效果一致。

      5 性能

      在性能驗證方面,主要針對DB2 Pure XML插入數(shù)據(jù)和查詢數(shù)據(jù)兩方面做性能測試。

      插入數(shù)據(jù):為真實驗證數(shù)據(jù)庫的插入性能,我們直接采用編寫存儲過程,隨機構造了10萬條XML數(shù)據(jù),循環(huán)插入。文件大小分別為3 K和11.6 K,目的是為了驗證 XML文件的大小對插入數(shù)據(jù)的性能影響。測試時分別針對是否解析、是否有索引等情況進行。

      查詢數(shù)據(jù):查詢條件設置為 XML不同層級的節(jié)點,分別為2、3、4、6層級,先在沒有索引的情況下進行測試,然后在有索引的情況進行測試,以此來驗證索引對XML查詢性能的影響。

      基礎環(huán)境:服務器采用2*Intel(R) Xeon(R) CPU 5130 @2.00GHz,8 GB MEM;操作系統(tǒng)采用Microsoft Windows Server 2008 Enterprise Edition

      驗證結果如表3所示。

      對于插入操作,可以看出是否在插入的同時建立索引對性能影響較大,這是因為DB2使用的B樹索引在插入過程中不斷調整樹形結構,對性能產(chǎn)生很大影響;而是否解析則對插入的性能影響不大,說明DB2的解析效率較高。

      表3 100000條數(shù)據(jù)插入驗證結果Tab.3 Insert validation results of 100,000 data

      表4 100000條數(shù)據(jù)查詢驗證結果Tab.4 Query validation results of 100,000 Data

      對于查詢操作,可以看出有無索引的差別很大,說明建立索引對性能的提升起到很大作用;而節(jié)點的層次深度對查詢時間的影響不大,體現(xiàn)了DB2層次型存儲的優(yōu)勢。

      6 結束語

      通過以上基于DB2 Pure XML數(shù)據(jù)庫進行的一系列驗證可以看出,在數(shù)據(jù)建模方面,支持 Native XML的數(shù)據(jù)庫結構簡單、擴展性好,比基于傳統(tǒng)對象關系表有明顯的優(yōu)勢;查詢語言方面需要了解XQuery和XPath的的相關語法后,可以實現(xiàn)與傳統(tǒng)SQL一樣的查詢效果,學習成本不高;在客戶端開發(fā)方面也比較簡單,可以迅速上手;而在性能方面也擁有較好的表現(xiàn)。因此,在構建電子病歷存儲方面,使用Native XML數(shù)據(jù)庫具有較好的應用前景。目前應用比較廣泛的Native XML數(shù)據(jù)庫除了DB2 Pure XML外,還有Oracle DB XML、Berkeley XML DB、Tamino、eXist、Xindice等都可以作為選型參考,由于各個數(shù)據(jù)庫系統(tǒng)在具體表現(xiàn)上會存在差異,在實際應用前需要做進一步驗證。

      [1] 吳旻峰. 基于XML的電子病歷系統(tǒng)及其院際信息共享技術研究[J]. 軟件, 2013, 34(01): 106-107.

      [2] 孟尹. 中醫(yī)電子病歷的設計與實現(xiàn)[D]. 山東: 山東中醫(yī)藥大學, 2013.

      [3] 董國華, 朱習軍. 中醫(yī)肺病科電子病歷系統(tǒng)設計與實現(xiàn)[J].軟件, 2014, 35(3): 17-19.

      [4] 譚照峰. XML原生數(shù)據(jù)庫索引研究與實現(xiàn)[D]. 吉林大學,2010.

      [5] 謝娜, 戚曉明, 朱洪浩, 郭有強. 半結構化多文本數(shù)據(jù)挖掘的研究[J]. 齊齊哈爾大學學報自然科學版, 2015, 31(02):75-78.

      [6] 李小青, 廖湖聲, 張曉博. XQuery實現(xiàn)技術研究綜述[J].計算機科學, 2012, 39(03): 9-13.

      [7] 阮娟. 基于XPath的新聞信息抽取系統(tǒng)設計與實現(xiàn)[J]. 智能計算機與應用, 2015, 5(02): 58-61.

      [8] 干峰, 李超峰, 胡珊. XML數(shù)據(jù)庫技術及其在醫(yī)院信息系統(tǒng)中的應用[J]. 醫(yī)學信息, 2009, 22(04): 463-465.

      [9] 王鑫. 原生XML數(shù)據(jù)庫存儲與索引關鍵技術研究[D]. 南開大學, 2009.

      [10] 王慶福. 網(wǎng)站建設中數(shù)據(jù)庫技術與WEB技術的應用對比研究[J]. 軟件, 2013, 34(2): 86-87.

      [11] 胡芳, 沈紹武. 醫(yī)療數(shù)據(jù)集成平臺的研究與設計[J]. 世界科學技術-中醫(yī)藥現(xiàn)代化, 2015, 17(04): 916-921.

      [12] 張婷婷. 原生XML數(shù)據(jù)庫存儲模型的研究[D]. 山西大學,2012.

      [13] 姚樹春. Oracle數(shù)據(jù)庫應用中安全問題研究[J]. 軟件, 2014,35(1): 94-95.

      The Application Analysis of Native XML Database in Electronic Medical Record Storage

      TIAN Hao-yu1, MA Yi2
      (1. Shenyang 20 middle school, Shenyang 110003,China; 2. The Huis' middle school of Shenyang, Shenyang 110016, China)

      Based on the problem of traditional relational database for electronic medical records, such as data modeling of complicated, poor scalability, low query performance, put forward the use of Native XML database to store the XML format of electronic medical records, and with DB2 Pure XML database, for example, in the experimental environment simulation data of XML structure, data model, query language and client development and performance of four aspects for validation and analysis. The results show that using DB2 for XML data modeling structure is simple and extensible, which is better than modeling with traditional object relational model. Using query languages based on XQuery and XPath and client development costs are not high; In terms of performance,the query performance can reach 0.046 seconds based on 10.6 k of medical records, 100,000 data and indexes. It is shown that the use of Native XML database is applicable to the storage of electronic medical records.

      : Electronic medical record; XML; XQuery; XPath; DB2; Native XML database

      TP392

      A

      10.3969/j.issn.1003-6970.2017.10.041

      本文著錄格式:田昊宇,馬義. Native XML數(shù)據(jù)庫在電子病歷存儲中的應用分析[J]. 軟件,2017,38(10):202-206

      田昊宇(2000-),男,學生;馬義,男,高級教師,研究方向:數(shù)據(jù)庫系統(tǒng)、網(wǎng)絡安全。

      猜你喜歡
      病歷文檔客戶端
      強迫癥病歷簿
      趣味(語文)(2021年9期)2022-01-18 05:52:42
      有人一聲不吭向你扔了個文檔
      “大數(shù)的認識”的診斷病歷
      縣級臺在突發(fā)事件報道中如何應用手機客戶端
      傳媒評論(2018年4期)2018-06-27 08:20:24
      孵化垂直頻道:新聞客戶端新策略
      傳媒評論(2018年4期)2018-06-27 08:20:16
      基于Vanconnect的智能家居瘦客戶端的設計與實現(xiàn)
      電子測試(2018年10期)2018-06-26 05:53:34
      基于RI碼計算的Word復制文檔鑒別
      為何要公開全部病歷?
      Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
      村醫(yī)未寫病歷,誰之過?
      洪湖市| 普兰县| 凤城市| 长兴县| 道孚县| 盘锦市| 丰原市| 博白县| 双城市| 左云县| 元朗区| 饶平县| 涿州市| 德安县| 晋州市| 赞皇县| 启东市| 永仁县| 繁峙县| 洪湖市| 达日县| 荆门市| 孝昌县| 新密市| 钟山县| 额尔古纳市| 林西县| 桦南县| 云南省| 莲花县| 蚌埠市| 康保县| 都兰县| 长寿区| 南通市| 嫩江县| 贵州省| 图木舒克市| 德江县| 马边| 南投市|