專利名稱:一種支持iec61850對(duì)象查詢的sql接口實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于電網(wǎng)數(shù)字化管理領(lǐng)域,提供了支持IEC61850對(duì)象查詢的聲明性SQL查詢接口,實(shí)現(xiàn)了電網(wǎng)內(nèi)層次化對(duì)象和關(guān)系型數(shù)據(jù)的快速檢索和管理。
背景技術(shù):
電網(wǎng)中實(shí)時(shí)數(shù)據(jù)的管理是實(shí)現(xiàn)電網(wǎng)智能化的關(guān)鍵技術(shù),電網(wǎng)中的實(shí)時(shí)數(shù)據(jù)包括了傳統(tǒng)的關(guān)系型數(shù)據(jù)和電網(wǎng)管理特有的IEC61850對(duì)象類型的數(shù)據(jù),對(duì)這些數(shù)據(jù)的管理是指建立一個(gè)滿足實(shí)時(shí)性需求的數(shù)據(jù)管理平臺(tái),向用戶提供數(shù)據(jù)檢索和數(shù)據(jù)管理功能,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。傳統(tǒng)的電網(wǎng)數(shù)據(jù)管理中間件基于關(guān)系型和IEC61850對(duì)象型的嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)管理系統(tǒng),采用跨平臺(tái)C/C++編程,應(yīng)用程序通過(guò)調(diào)用底層C/C++函數(shù)接口進(jìn)行存儲(chǔ)管理操作。開(kāi)發(fā)人員需要掌握底層數(shù)據(jù)存儲(chǔ)的實(shí)現(xiàn),了解底層數(shù)據(jù)存儲(chǔ)的細(xì)節(jié),編寫(xiě)的應(yīng)有程序不具備通用性,平臺(tái)移植困難。傳統(tǒng)的電網(wǎng)數(shù)據(jù)管理中間件對(duì)于IEC61850對(duì)象型數(shù)據(jù)的查詢沒(méi)有提供平臺(tái)級(jí)的支持,缺少對(duì)IEC61850對(duì)象進(jìn)行查詢和管理的通用方法。IEC61850標(biāo)準(zhǔn)允許對(duì)象多層嵌套,查詢IEC61850對(duì)象時(shí)需要開(kāi)發(fā)人員指定具體的存儲(chǔ)、尋徑和遍歷方法。傳統(tǒng)的電網(wǎng)數(shù)據(jù)管理中間件缺少統(tǒng)一的查詢優(yōu)化機(jī)制,由于采用線性存儲(chǔ)方法以及線性查找策略,系統(tǒng)的平均查詢時(shí)間復(fù)雜度為Ο(η) (η為表中記錄個(gè)數(shù))。在數(shù)據(jù)量極大的時(shí)候會(huì)危及到系統(tǒng)的實(shí)時(shí)特性,因此需要開(kāi)發(fā)人員對(duì)每一種數(shù)據(jù)查詢進(jìn)行單獨(dú)的優(yōu)化。
發(fā)明內(nèi)容
本發(fā)明的目的是針對(duì)傳統(tǒng)的電網(wǎng)數(shù)據(jù)管理中間件系統(tǒng)的不足,對(duì)傳統(tǒng)的電網(wǎng)數(shù)據(jù)管理中間件系統(tǒng)進(jìn)行理論上的規(guī)范和功能上的擴(kuò)展,包括規(guī)范了 IEC61850對(duì)象的數(shù)據(jù)模型;利用共享內(nèi)存實(shí)現(xiàn)了主存數(shù)據(jù)的管理,使用關(guān)系型數(shù)據(jù)字典管理主存數(shù)據(jù)庫(kù)的元數(shù)據(jù); 在傳統(tǒng)SQL語(yǔ)言的基礎(chǔ)上根據(jù)規(guī)范后的IEC61850對(duì)象的數(shù)據(jù)模型擴(kuò)展出對(duì)象查詢的SQL 算子,通過(guò)聲明性語(yǔ)言檢索層次化對(duì)象;采用改良的內(nèi)存B+樹(shù)索引實(shí)現(xiàn)了統(tǒng)一的查詢優(yōu)化,并實(shí)現(xiàn)了索引對(duì)于通用數(shù)據(jù)類型的支持,提出索引內(nèi)存管理機(jī)制用于快速序列化索引, 降低系統(tǒng)的平均查詢開(kāi)銷至0 (logn),提高了 CPU緩存命中率。1.為電網(wǎng)實(shí)時(shí)數(shù)據(jù)管理設(shè)計(jì)了一種支持IEC61850對(duì)象查詢的數(shù)據(jù)服務(wù)系統(tǒng),該系統(tǒng)涉及關(guān)系型和IEC61850對(duì)象型數(shù)據(jù)的檢索和管理、主存管理、針對(duì)層次化對(duì)象數(shù)據(jù)檢索、對(duì)SQL算子的擴(kuò)充以及為提高檢索效率而采取的索引機(jī)制。2.規(guī)范了 IEC61850對(duì)象的層次化樹(shù)狀數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)方式,根據(jù)其結(jié)構(gòu)和存儲(chǔ)方式定義了 IEC61850對(duì)象的檢索和操作方法。3.實(shí)現(xiàn)了關(guān)系型數(shù)據(jù)的元數(shù)據(jù)管理,包括數(shù)據(jù)字典的的創(chuàng)建、加載和銷毀等功能。4.實(shí)現(xiàn)了主存管理功能,對(duì)于處于不同進(jìn)程空間內(nèi)的主存利用映射機(jī)制來(lái)管理共享內(nèi)存。
5.擴(kuò)充了標(biāo)準(zhǔn)SQL算子,使其支持IEC61850對(duì)象的表示和對(duì)象操作方法的表示。6.實(shí)現(xiàn)了支持通用數(shù)據(jù)類型的主存數(shù)據(jù)索引,考慮了 CPU緩存級(jí)的檢索優(yōu)化,針對(duì)系統(tǒng)的主存模型發(fā)明了用于快速序列化索引的數(shù)據(jù)結(jié)構(gòu)。為了實(shí)現(xiàn)以上目的,本發(fā)明采取以下技術(shù)方案,
一種支持IEC61850對(duì)象查詢的SQL接口實(shí)現(xiàn)方法,其特征是,電網(wǎng)系統(tǒng)中包括以下功能模塊,
1、數(shù)據(jù)存儲(chǔ)模塊根據(jù)電網(wǎng)系統(tǒng)中的IEC61850對(duì)象建立數(shù)據(jù)模型,包括數(shù)據(jù)類型的層次化操作方法和關(guān)系型數(shù)據(jù)的元數(shù)據(jù)管理;采用數(shù)據(jù)表的形式存儲(chǔ)元數(shù)據(jù)、配置文件、普通數(shù)據(jù)和IEC61850對(duì)象;利用數(shù)據(jù)字典實(shí)現(xiàn)所述元數(shù)據(jù)管理,包括向上層調(diào)用程序提供的接口和數(shù)據(jù)字典的加載、卸載及管理功能。系統(tǒng)采用數(shù)據(jù)表的形式存儲(chǔ)元數(shù)據(jù)、配置文件、普通數(shù)據(jù)和IEC61850對(duì)象,索引將存儲(chǔ)在特定的索引結(jié)構(gòu)中。所有數(shù)據(jù)都存放于系統(tǒng)空間中。2、查詢模塊為一種支持IEC61850對(duì)象查詢的數(shù)據(jù)服務(wù)接口,針對(duì)IEC61850對(duì)象對(duì)于現(xiàn)有SQL算子進(jìn)行擴(kuò)充,根據(jù)所述數(shù)據(jù)模型建立適用于對(duì)象的層次化操作算子;所述現(xiàn)有SQL算子進(jìn)行擴(kuò)充采用的分析方法包括使用LEX的詞法分析方法和使用YACC的語(yǔ)法分析方法。根據(jù)現(xiàn)有的SQL標(biāo)準(zhǔn)算子和針對(duì)IEC61850對(duì)象操作的擴(kuò)展算子,使用LEX工具構(gòu)造詞法分析器,使用YACC工具構(gòu)造語(yǔ)法分析器。使用結(jié)果集對(duì)象封裝系統(tǒng)返回的查詢結(jié)果,結(jié)果集對(duì)象提供游標(biāo)機(jī)制,便于調(diào)用者檢索查詢結(jié)果。3、主存管理模塊為支持對(duì)象存儲(chǔ)的主存管理模式,采用共享內(nèi)存的方式實(shí)現(xiàn),包括共享內(nèi)存的分配、釋放和映射以及共享內(nèi)存的使用和管理;
系統(tǒng)采用共享內(nèi)存的方式對(duì)主存進(jìn)行管理,主存管理在邏輯上將整個(gè)系統(tǒng)劃分為系統(tǒng)空間和程序空間。系統(tǒng)空間是一個(gè)物理上的連續(xù)區(qū)域,其邏輯結(jié)構(gòu)由系統(tǒng)內(nèi)的數(shù)據(jù)結(jié)構(gòu)所確定,程序如需調(diào)用系統(tǒng)空間的數(shù)據(jù),需要事先進(jìn)行注冊(cè)和鏈接。4、索引模塊為支持通用數(shù)據(jù)類型的主存索引機(jī)制,包括索引的空間管理、一致性維護(hù)和提供給所述查詢模塊的接口。所述索引模塊支持索引數(shù)據(jù)類型和索引數(shù)據(jù)的分離機(jī)制,利用一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)刻畫(huà)數(shù)據(jù)類型和節(jié)點(diǎn)類型,支持動(dòng)態(tài)數(shù)據(jù)類型的索引構(gòu)建。所述索弓I模塊利用索引節(jié)點(diǎn)所采用的鏈接機(jī)制。所述索引模塊采用B+樹(shù)作為基本數(shù)據(jù)結(jié)構(gòu),支持索引的快速序列化和空間回收
釋放管理??紤]到CPU緩存同主存之間的速度差,本發(fā)明中的索引將采用B+樹(shù)作為基本數(shù)據(jù)結(jié)構(gòu),并對(duì)其進(jìn)行功能上的改進(jìn),包括分離數(shù)據(jù)類型和數(shù)據(jù);實(shí)現(xiàn)索引的數(shù)據(jù)類型無(wú)關(guān)性從而支持IEC61850對(duì)象數(shù)據(jù)快速檢索;構(gòu)建節(jié)點(diǎn)內(nèi)部數(shù)據(jù)結(jié)構(gòu)對(duì)索引內(nèi)存進(jìn)行管理,支持索引的快速序列化(即將樹(shù)狀結(jié)構(gòu)保存至硬盤)和空間回收釋放管理。本發(fā)明所達(dá)到的有益效果
本發(fā)明與現(xiàn)有技術(shù)相比具有下面的優(yōu)點(diǎn) 1.提供聲明性語(yǔ)言接口訪問(wèn)數(shù)據(jù)
現(xiàn)有技術(shù)提供C/C++接口,要求開(kāi)發(fā)人員掌握底層數(shù)據(jù)存儲(chǔ)的實(shí)現(xiàn),如此編寫(xiě)的應(yīng)有程序不具備通用性,平臺(tái)移植困難,且對(duì)于IEC61850對(duì)象的編程需要手工解析、尋徑。本發(fā)明通過(guò)擴(kuò)展傳統(tǒng)SQL算子提供聲明性語(yǔ)言接口訪問(wèn)關(guān)系型數(shù)據(jù)以及IEC61850對(duì)象類型數(shù)據(jù)。聲明性接口的優(yōu)點(diǎn)在于查詢接口統(tǒng)一,可以方便地跨平臺(tái);查詢過(guò)程對(duì)用戶透明,允許用戶工作在高層數(shù)據(jù)結(jié)構(gòu)上;查詢返回結(jié)果支持過(guò)程化語(yǔ)言調(diào)用。2.提供多進(jìn)程空間數(shù)據(jù)服務(wù)
在現(xiàn)有技術(shù)中數(shù)據(jù)管理模塊跟應(yīng)用程序是綁定的,增加新的應(yīng)用時(shí)需要將應(yīng)用程序同數(shù)據(jù)管理模塊重新聯(lián)編。本發(fā)明通過(guò)共享內(nèi)存的方式將系統(tǒng)進(jìn)程空間和應(yīng)用進(jìn)程空間分離,系統(tǒng)空間負(fù)責(zé)提供數(shù)據(jù)服務(wù),不同的應(yīng)用程序可以使用數(shù)據(jù)管理系統(tǒng)所提供的服務(wù)。3.提供索引機(jī)制加速數(shù)據(jù)檢索
傳統(tǒng)的數(shù)據(jù)管理系統(tǒng)沒(méi)有統(tǒng)一的優(yōu)化策略,本發(fā)明通過(guò)索引提供統(tǒng)一的數(shù)據(jù)優(yōu)化策略,傳統(tǒng)的索引技術(shù)不支持動(dòng)態(tài)類型,需要?jiǎng)討B(tài)內(nèi)存分配支持。本發(fā)明通過(guò)一個(gè)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)數(shù)據(jù)和數(shù)據(jù)類型的分離,從而實(shí)現(xiàn)索引對(duì)于任意類型的支持;通過(guò)偏移量實(shí)現(xiàn)物理上連續(xù)的內(nèi)存的結(jié)構(gòu)化,并模擬出邏輯上的指針進(jìn)行索弓丨操作。
圖1為系統(tǒng)體系結(jié)構(gòu)圖,示意系統(tǒng)在內(nèi)存中的組織結(jié)構(gòu);
圖2為索引插入流程圖,示意在索引中插入一個(gè)元素的邏輯過(guò)程; 圖3為索引刪除流程圖,示意在索引中刪除一個(gè)元素的邏輯過(guò)程。
具體實(shí)施例方式下面根據(jù)說(shuō)明書(shū)附圖對(duì)本發(fā)明的技術(shù)方案進(jìn)一步詳細(xì)闡述,包括系統(tǒng)體系結(jié)構(gòu)、 數(shù)據(jù)字典的管理、共享存儲(chǔ)機(jī)制、SQL算子的實(shí)現(xiàn)、IEC61850對(duì)象的查詢處理和索引實(shí)現(xiàn)機(jī)制。1.系統(tǒng)體系結(jié)構(gòu)
系統(tǒng)的體系結(jié)構(gòu)如圖1所示,其核心部分是數(shù)據(jù)字典和索引模塊的共享存儲(chǔ)機(jī)制。數(shù)據(jù)字典用于描述元數(shù)據(jù)信息,索引采用獨(dú)立的數(shù)據(jù)結(jié)構(gòu)進(jìn)行描述和管理(詳見(jiàn)索引部分的說(shuō)明)。系統(tǒng)進(jìn)程和應(yīng)用程序進(jìn)程處于不同的進(jìn)程空間,為了使得各個(gè)應(yīng)用程序能夠使用系統(tǒng)提供的數(shù)據(jù)服務(wù),本發(fā)明采用共享存儲(chǔ)空間的方式對(duì)主存空間進(jìn)行了管理。2.數(shù)據(jù)字典
數(shù)據(jù)字典主要用來(lái)管理系統(tǒng)的元數(shù)據(jù),本發(fā)明中的元數(shù)據(jù)信息包括系統(tǒng)中每張表的屬性,表中每一個(gè)屬性列的信息和索引信息。數(shù)據(jù)字典模塊對(duì)外提供了操作接口,可以方便地對(duì)數(shù)據(jù)字典進(jìn)行管理,外部函數(shù)只需要通過(guò)包含diet, h文件就可以調(diào)用數(shù)據(jù)字典提供的操作。元數(shù)據(jù)是描述整個(gè)系統(tǒng)基本信息的數(shù)據(jù),數(shù)據(jù)字典模塊作為描述元數(shù)據(jù)的功能模塊, 包含整個(gè)系統(tǒng)的全部信息,是本系統(tǒng)中的主管理模塊,其功能包括計(jì)算系統(tǒng)所需要的共享內(nèi)存、負(fù)責(zé)申請(qǐng)和釋放共享內(nèi)存、初始化索引配置信息和索引。(1)數(shù)據(jù)字典的結(jié)構(gòu)
數(shù)據(jù)字典包括關(guān)系字典,屬性字典和索引字典。其中關(guān)系字典用于描述表的信息,包括表的ID、表名、表中域的個(gè)數(shù)、所容納最多表的個(gè)數(shù)、更新時(shí)間、版本號(hào)和數(shù)據(jù)字典中域名表的偏移量等;屬性字典用于描述表的每一個(gè)屬性的信息,包括所在表的ID、域名表的ID、域名表的域名、域名表域的類型、域名表域的長(zhǎng)度、域名表在內(nèi)存中的偏移量和本域索引的偏移量。索引字典將在索引部分說(shuō)明。(2)數(shù)據(jù)字典的管理
數(shù)據(jù)字典的管理模塊包含了多個(gè)對(duì)數(shù)據(jù)字典進(jìn)行操作的函數(shù)。使用這些函數(shù),可以獲得表的ID、表名、表中域的個(gè)數(shù)、所容納最多表的個(gè)數(shù)、更新時(shí)間、版本號(hào)、數(shù)據(jù)字典中域名表的偏移量等表級(jí)基本信息;還能獲得本域所在表的ID、域名表的ID、域名表的域名、域名表域的類型、域名表域的長(zhǎng)度、域名表在內(nèi)存中的偏移量、本域索引的偏移量等屬性級(jí)信息。在系統(tǒng)初始化時(shí),數(shù)據(jù)字典管理模塊負(fù)責(zé)把關(guān)系字典、屬性字典、索引字典和索引本身加載并映射到共享內(nèi)存空間中。3.共享存儲(chǔ)機(jī)制
應(yīng)用程序擁有獨(dú)立的進(jìn)程空間,彼此不能互相訪問(wèn)。為了不同的應(yīng)用程序能夠共享數(shù)據(jù)字典和索引數(shù)據(jù),本發(fā)明采取了共享內(nèi)存的策略為每個(gè)索引分配一塊共享內(nèi)存,數(shù)據(jù)字典分配一塊共享內(nèi)存,如果應(yīng)用程序需要使用數(shù)據(jù)字典和索引模塊所提供的功能,只需要把該共享內(nèi)存映射到當(dāng)前應(yīng)用的進(jìn)程空間中去。本發(fā)明同時(shí)提供了在Windows和LINUX下的共享內(nèi)存機(jī)制實(shí)現(xiàn)。(1) Linux下共享內(nèi)存的實(shí)現(xiàn)
Linux下通過(guò)mmap系統(tǒng)調(diào)用實(shí)現(xiàn)共享內(nèi)存進(jìn)程首先分配一塊共享內(nèi)存,然后通過(guò) mmap系統(tǒng)調(diào)用將共享內(nèi)存映射到自己的地址空間,即可對(duì)共享內(nèi)存視作當(dāng)前進(jìn)程空間中的內(nèi)存進(jìn)行操作。共享內(nèi)存的并發(fā)維護(hù)由操作系統(tǒng)自動(dòng)實(shí)現(xiàn),當(dāng)完成通信之后,所有進(jìn)程都將脫離共享內(nèi)存,并且由其中一個(gè)進(jìn)程釋放該共享內(nèi)存塊。(2) Windows下共享內(nèi)存的實(shí)現(xiàn)
在Win32平臺(tái)中,采用內(nèi)存映射文件的方式來(lái)實(shí)現(xiàn)共享內(nèi)存Windows中的內(nèi)存映射文件機(jī)制允許在WIN32進(jìn)程中保留一段內(nèi)存區(qū)域,可以把文件映射到這段虛擬內(nèi)存中。因此我們把需要映射到應(yīng)用進(jìn)程空間內(nèi)的數(shù)據(jù)字典和索引作成目標(biāo)文件注入到應(yīng)用進(jìn)程空間中去。4.支持IEC61850對(duì)象的SQL算子擴(kuò)充 (1) IEC61850對(duì)象的數(shù)據(jù)模型
IEC61850對(duì)象采用樹(shù)狀數(shù)據(jù)結(jié)構(gòu),除根節(jié)點(diǎn)外,每個(gè)節(jié)點(diǎn)有且只有一個(gè)父親節(jié)點(diǎn),但可以擁有多個(gè)子節(jié)點(diǎn),其樹(shù)狀數(shù)據(jù)結(jié)構(gòu)信息通過(guò)表內(nèi)標(biāo)識(shí)實(shí)現(xiàn)。鑒于其存儲(chǔ)方式的局限, IEC61850的基本操作包括獲取父節(jié)點(diǎn)、獲取孩子節(jié)點(diǎn)個(gè)數(shù)、獲取第一個(gè)孩子節(jié)點(diǎn)和獲取下一個(gè)孩子節(jié)點(diǎn)。通過(guò)這些基本操作,本發(fā)明重構(gòu)出針對(duì)IEC61850對(duì)象的檢索操作,規(guī)定了 “向上”和“向下”兩種操作方向,規(guī)定了 from和to兩個(gè)起止關(guān)鍵字,這將在擴(kuò)展的SQL算子中得到體現(xiàn)。(2)實(shí)現(xiàn)SQL算子的詞法分析模塊
本發(fā)明采用LEX工具進(jìn)行詞法分析,通過(guò)正則表達(dá)式識(shí)別Token,識(shí)別的內(nèi)容包括輸入串中的標(biāo)識(shí)符、整型數(shù)字、浮點(diǎn)型數(shù)字、字符串和時(shí)間日期。詞法分析器負(fù)責(zé)向語(yǔ)法分析器返回識(shí)別出的每個(gè)TOKEN并給出token的“值”信息。本發(fā)明中的關(guān)鍵字信息包括select、 from、where> update、set、and、delete、object up、down、insert、into、values、create、 index、on和drop。其中object、up、down三個(gè)關(guān)鍵字是標(biāo)準(zhǔn)SQL所不具備的,在本發(fā)明中用于擴(kuò)展支持IEC61850對(duì)象的SQL表示。
(3)實(shí)現(xiàn)SQL算子的語(yǔ)法分析模塊
本發(fā)明采用Bison作為語(yǔ)法分析的工具,語(yǔ)法信息通過(guò)BCNF (巴克斯范式)進(jìn)行描述。 針對(duì)數(shù)據(jù)檢索和管理需求,本發(fā)明中實(shí)現(xiàn)了標(biāo)準(zhǔn)SQL語(yǔ)言的一個(gè)子集,并對(duì)其進(jìn)行了支持 IEC61850對(duì)象的算子級(jí)擴(kuò)展。采用BCNF對(duì)該語(yǔ)言集進(jìn)行了描述,Bison工具會(huì)自動(dòng)對(duì)BCNF 進(jìn)行解析并形成一顆語(yǔ)法樹(shù),樹(shù)的每一個(gè)節(jié)點(diǎn)對(duì)應(yīng)著一個(gè)操作,當(dāng)規(guī)約至根節(jié)點(diǎn)時(shí),語(yǔ)法樹(shù)便建立完成。(4)針對(duì)IEC61850對(duì)象的SQL算子擴(kuò)充
對(duì)象查詢主要擴(kuò)充了對(duì)象在SQL語(yǔ)言中表示形式和對(duì)象操作的方向,對(duì)象的路徑在 SQL語(yǔ)言中通過(guò)“.”給出,其類型通過(guò)“”給出,其操作方向有“自上而下”和“自下而上” 兩種。其中“down”關(guān)鍵字表示是自上而下查詢,“up”關(guān)鍵字表示自下而上的查詢,“from” 關(guān)鍵字表示對(duì)象路徑的起始,“to”關(guān)鍵字表示對(duì)象路徑的終止。如果某個(gè)對(duì)象所屬的類型唯一則不用指定該類型,否則需要指定該類型。(5) SQL 語(yǔ)句
本發(fā)明中的SQL語(yǔ)句包括,查詢語(yǔ)句、更新語(yǔ)句、插入語(yǔ)句、刪除語(yǔ)句、創(chuàng)建索引語(yǔ)句, 刪除索引語(yǔ)句和對(duì)象查詢語(yǔ)句。查詢語(yǔ)句SELECTFIELD_LIST FROM TABLE_NAME WHERE PREDICATE,該語(yǔ)句用于檢索由TABLE_NAME指定的表中符合WHERE PREDICATE指定的條件的由FIELD_LIST指定的列。更新語(yǔ)句UPDATETBALE_NAME SET EXPRESSI0N_LIST WHERE PREDICATE該語(yǔ)句用于用EXPRESSI0N_LIST去更新由TABLE_NAME指定的表中符合WHERE PREDICATE條件的元組。插入語(yǔ)句INSERTINTO TABLE_NAME (FIELD_LIST) VALUES (VALUE_LIST)該語(yǔ)句用于向TABLE_NAME指定的表中插入值為VALUE_LIST所描述的具體屬性的元組。刪除語(yǔ)句DELETEFROM TABLE_NAME WHERE_PREDICATE 該語(yǔ)句用于刪除由 TABLE_ NAME指定的表中符合WHERE_PREDICATE指定的條件的元組。創(chuàng)建索引語(yǔ)句CREATEINDEX ON TABLE_NAME (FIELD_NAME)該語(yǔ)句用于在由 TABLE_NAME和FIELD_NAME共同確定的列上創(chuàng)建索引。刪除索引語(yǔ)句DR0PINDEX ON TABLE_NAME (FIELD_NAME)該語(yǔ)句用于在由 TABLE_NAME和FIELD_NAME共同確定的列上刪除索引。自上而下的對(duì)象查詢語(yǔ)句Select object down from A:a. B:b. C:c該語(yǔ)句用于自上而下地尋找C類型的對(duì)象C。自下而上的對(duì)象查詢語(yǔ)句Select object up from A: a to D:d該語(yǔ)句用于自下而上地從A類型的對(duì)象a尋找其祖輩節(jié)點(diǎn)直到D類型的對(duì)象d結(jié)束。(6) SQL語(yǔ)言的返回結(jié)果
本發(fā)明使用結(jié)果集描述和存儲(chǔ)SQL語(yǔ)言的查詢返回結(jié)果,結(jié)果集提供的接口包括返回記錄數(shù)、返回當(dāng)前記錄的oid、返回當(dāng)前結(jié)果集的tid、讀取指定列的值和遍歷結(jié)果集。5.通用數(shù)據(jù)類型主存索引
索引提供了效率極高的訪問(wèn)路徑,是實(shí)時(shí)數(shù)據(jù)處理的關(guān)鍵部分。本發(fā)明考慮到實(shí)時(shí)監(jiān)控查詢頻繁修改相對(duì)較少的特性,采用B+樹(shù)作為具體實(shí)現(xiàn)索引功能的數(shù)據(jù)結(jié)構(gòu),并對(duì)其進(jìn)行了改進(jìn)。為了支持對(duì)象類型的索引,本發(fā)明對(duì)數(shù)據(jù)類型和數(shù)據(jù)進(jìn)行了分離,為了支持快速序列化,本發(fā)明通過(guò)內(nèi)建的數(shù)據(jù)結(jié)構(gòu)描述索引結(jié)構(gòu)信息。為了支持空間可重用,本發(fā)明通過(guò)鏈表實(shí)施對(duì)節(jié)點(diǎn)空間的管理。(1)對(duì)通用數(shù)據(jù)類型的支持
本發(fā)明通過(guò)TypeClass類來(lái)描述索引中的數(shù)據(jù)類型,以此剝離數(shù)據(jù)類型和數(shù)據(jù)。數(shù)據(jù)類型對(duì)上層操作透明,上層操作完全以字節(jié)為單位而不管二進(jìn)制數(shù)據(jù)的具體語(yǔ)義。對(duì)于數(shù)據(jù)的具體語(yǔ)義,則由TypeClass類型進(jìn)行解析,其通用類型包括整形、浮點(diǎn)型、字符串型、對(duì)象類型和用戶自定義類型,TypeClass負(fù)責(zé)維護(hù)復(fù)雜數(shù)據(jù)類型的結(jié)構(gòu)和比較函數(shù)。 TypeClass數(shù)據(jù)結(jié)構(gòu)提供的主要方法有獲取和設(shè)置當(dāng)前數(shù)據(jù)在內(nèi)存中的位置、獲取和設(shè)置當(dāng)前數(shù)據(jù)的值以及對(duì)數(shù)據(jù)進(jìn)行比較。(2)快速序列化索引
索引采用的數(shù)據(jù)結(jié)構(gòu)是樹(shù),由于每次加載重新建樹(shù)的代價(jià)較高,本發(fā)明實(shí)現(xiàn)了一種迅速高效的序列化機(jī)制,該序列化機(jī)制是內(nèi)嵌于數(shù)據(jù)結(jié)構(gòu)的,采用數(shù)組結(jié)構(gòu)和相對(duì)位移來(lái)實(shí)現(xiàn)樹(shù)結(jié)構(gòu)。從物理上看一棵樹(shù)就是一個(gè)大數(shù)組,本身就是序列化好的結(jié)構(gòu),存取時(shí)只需要簡(jiǎn)單的將一整塊內(nèi)存的數(shù)據(jù)存入磁盤或者將磁盤數(shù)據(jù)讀入一塊內(nèi)存區(qū)域;在邏輯上則通過(guò)一組函數(shù)模擬出節(jié)點(diǎn)指針,用以虛擬邏輯上的樹(shù)。本發(fā)明通過(guò)額外的結(jié)構(gòu)信息類來(lái)維護(hù)數(shù)據(jù)結(jié)構(gòu),用以支持多進(jìn)程間的地址映射,在每一個(gè)進(jìn)程空間中都能夠準(zhǔn)確地讀取數(shù)據(jù)。本發(fā)明中的節(jié)點(diǎn)通過(guò)NodeClass數(shù)據(jù)結(jié)構(gòu)進(jìn)行描述,包括節(jié)點(diǎn)本指針、父指針、孩子節(jié)點(diǎn)指針和指向同一層鄰居節(jié)點(diǎn)的指針。在物理上這些指針都是偏移量,在邏輯上通過(guò)一個(gè)指針轉(zhuǎn)換函數(shù)將絕對(duì)地址轉(zhuǎn)換為指針,通過(guò)NodeClass提供的方法,可以獲得當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn),子節(jié)點(diǎn)和鄰居節(jié)點(diǎn)。(3)索引查詢及插入刪除過(guò)程
本發(fā)明的索引采用B+樹(shù)結(jié)構(gòu)實(shí)現(xiàn),對(duì)傳統(tǒng)B+樹(shù)作了一些改進(jìn)以適應(yīng)系統(tǒng)需求,在本發(fā)明的B+樹(shù)中,節(jié)點(diǎn)為一組單調(diào)遞增元素,元素由兩部分構(gòu)成,分別是關(guān)鍵字和子指針,葉子節(jié)點(diǎn)沒(méi)有子指針,取而代之的是關(guān)鍵字的oid,也就是最終需要返回的查詢結(jié)果。除了根之外,每個(gè)節(jié)點(diǎn)都包含最少L個(gè)元素最多U個(gè)元素,在本系統(tǒng)中U=2L-1。對(duì)于所有內(nèi)部節(jié)點(diǎn), 子指針的數(shù)目等于其元素個(gè)數(shù),父親節(jié)點(diǎn)中對(duì)應(yīng)該節(jié)點(diǎn)的關(guān)鍵字為該節(jié)點(diǎn)的最大值。所有的葉子都在相同的高度上,每次查詢都需要查詢至葉子節(jié)點(diǎn)才會(huì)停止。對(duì)于相同數(shù)據(jù),當(dāng)作不同的元素來(lái)處理,查詢時(shí)需要在葉子節(jié)點(diǎn)中遍歷相同元素。葉子節(jié)點(diǎn)通過(guò)雙向鏈表鏈接起來(lái),整個(gè)鏈表邏輯上就是一個(gè)單調(diào)遞增的有序隊(duì)列。頭指針為空的則為葉子節(jié)點(diǎn)鏈表的起始節(jié)點(diǎn),尾指針為空的則為葉子節(jié)點(diǎn)鏈表的終止節(jié)點(diǎn)。查詢以最典型的類似二叉排序樹(shù)的方法進(jìn)行,從根開(kāi)始,找到一個(gè)范圍值的關(guān)鍵字,然后在其子節(jié)點(diǎn)中繼續(xù)查找,如此迭代, 直到找到符合條件的第一個(gè)葉子節(jié)點(diǎn),通過(guò)葉子鏈表的遍歷最終返回查詢結(jié)果。B+樹(shù)的維護(hù)過(guò)程如圖2和圖3所示,在插入和刪除元素時(shí)根據(jù)閾值對(duì)B+樹(shù)的節(jié)點(diǎn)進(jìn)行維護(hù),以確保除了根節(jié)點(diǎn)以外,每個(gè)節(jié)點(diǎn)的個(gè)數(shù)不多于上限U,不少于下限L。所采取的維護(hù)策略則是當(dāng)由于增加數(shù)據(jù)而造成節(jié)點(diǎn)個(gè)數(shù)超過(guò)上限U的時(shí)候,則對(duì)節(jié)點(diǎn)進(jìn)行分裂,當(dāng)由于刪減數(shù)據(jù)而造成節(jié)點(diǎn)個(gè)數(shù)少于下限L的時(shí)候,或者移動(dòng)鄰節(jié)點(diǎn)的數(shù)據(jù)填補(bǔ)當(dāng)前節(jié)點(diǎn)的缺額,使得當(dāng)前節(jié)點(diǎn)的個(gè)數(shù)高于下限L,或者跟鄰節(jié)點(diǎn)進(jìn)行合并,但要選擇那些合并之后節(jié)點(diǎn)個(gè)數(shù)不能超出上限U的節(jié)點(diǎn)進(jìn)行合并。
圖2所示索引的插入過(guò)程,系統(tǒng)先根據(jù)關(guān)鍵字信息尋找到第一個(gè)符合要求的葉子節(jié)點(diǎn),否則返回。如果當(dāng)前葉子節(jié)點(diǎn)中存在空位多于一個(gè)則進(jìn)入插入過(guò)程,否則新建一個(gè)節(jié)點(diǎn)。插入過(guò)程首先找到插入位置,如果當(dāng)前插入的值大于該節(jié)點(diǎn)的最大值,則需要遞歸地調(diào)整父親節(jié)點(diǎn)的最大值,此時(shí)如果沒(méi)有新建節(jié)點(diǎn),則插入過(guò)程終止,整個(gè)插入完成。如果有新建節(jié)點(diǎn),需要分裂當(dāng)前節(jié)點(diǎn),分裂過(guò)程把當(dāng)前節(jié)點(diǎn)分裂至新建節(jié)點(diǎn),然后從新建節(jié)點(diǎn)中提取其最大值作為新元素,插入其父節(jié)點(diǎn)中,迭代這個(gè)過(guò)程直到根節(jié)點(diǎn)。如果根節(jié)點(diǎn)需要分裂, 則新建一個(gè)節(jié)點(diǎn)當(dāng)做根節(jié)點(diǎn)。圖3所示索引的刪除過(guò)程,系統(tǒng)首先根據(jù)關(guān)鍵字信息尋找到第一個(gè)符合要求的葉子節(jié)點(diǎn),然后再葉子節(jié)點(diǎn)中定位到元素i,如果沒(méi)有這個(gè)元素,則刪除失敗,否則進(jìn)入刪除流程。如果該元素是樹(shù)根中的唯一元素,則刪除根節(jié)點(diǎn),刪除過(guò)程終止,否則進(jìn)入一般刪除過(guò)程,一般刪除過(guò)程首先確定到待刪元素,然后先刪掉找到的元素。如果刪除的是節(jié)點(diǎn)最后一個(gè)元素,需要調(diào)整父節(jié)點(diǎn)元素,如果刪除之后的元素?cái)?shù)目大于設(shè)定的最小閾值,則刪除過(guò)程結(jié)束,否則,需要啟動(dòng)合并過(guò)程,合并過(guò)程首先找到待合并節(jié)點(diǎn)combine。如果待合并節(jié)點(diǎn) combine內(nèi)元素?cái)?shù)目大于閾值,則從中移動(dòng)一個(gè)元素到被刪節(jié)點(diǎn),保持平衡,刪除結(jié)束,否則需要合并兩個(gè)節(jié)點(diǎn),合并節(jié)點(diǎn)后從其父節(jié)點(diǎn)中刪除被合并節(jié)點(diǎn),此時(shí)啟動(dòng)迭代過(guò)程刪除父節(jié)點(diǎn)中的一個(gè)元素,直至根節(jié)點(diǎn)。(4)索引節(jié)點(diǎn)空間回收
索引在刪除、合并的過(guò)程中會(huì)出現(xiàn)空閑節(jié)點(diǎn),本發(fā)明利用一個(gè)空閑節(jié)點(diǎn)鏈表存儲(chǔ)這些空閑節(jié)點(diǎn),以備節(jié)點(diǎn)分裂之用。系統(tǒng)提供分配、釋放空閑節(jié)點(diǎn)的方法=GetNewNode用于獲取一個(gè)空閑節(jié)點(diǎn),如果當(dāng)前的空閑節(jié)點(diǎn)鏈表上存在空閑節(jié)點(diǎn),則該方法取出第一個(gè)空閑節(jié)點(diǎn)返回,并調(diào)整空閑節(jié)點(diǎn)鏈表的首指;如果空閑節(jié)點(diǎn)鏈表為空,則從當(dāng)前索引的后部返回一個(gè)空節(jié)點(diǎn)。如果后續(xù)空間不夠則返回NULL。FreeNode方法用于釋放一個(gè)指定節(jié)點(diǎn)node,將該節(jié)點(diǎn)中的信息清空,再將其加入空閑節(jié)點(diǎn)鏈表中供隨時(shí)調(diào)用。以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若干改進(jìn)和變形,這些改進(jìn)和變形也應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種支持IEC61850對(duì)象查詢的SQL接口實(shí)現(xiàn)方法,其特征是,電網(wǎng)系統(tǒng)中包括以下功能模塊,數(shù)據(jù)存儲(chǔ)模塊根據(jù)電網(wǎng)系統(tǒng)中的IEC61850對(duì)象建立數(shù)據(jù)模型,包括數(shù)據(jù)類型的層次化操作方法和關(guān)系型數(shù)據(jù)的元數(shù)據(jù)管理;采用數(shù)據(jù)表的形式存儲(chǔ)元數(shù)據(jù)、配置文件、普通數(shù)據(jù)和IEC61850對(duì)象;查詢模塊為一種支持IEC61850對(duì)象查詢的數(shù)據(jù)服務(wù)接口,針對(duì)IEC61850對(duì)象對(duì)于現(xiàn)有SQL算子進(jìn)行擴(kuò)充,根據(jù)所述數(shù)據(jù)模型建立適用于對(duì)象的層次化操作算子;主存管理模塊為支持對(duì)象存儲(chǔ)的主存管理模式,采用共享內(nèi)存的方式實(shí)現(xiàn),包括共享內(nèi)存的分配、釋放和映射以及共享內(nèi)存的使用和管理;索引模塊為支持通用數(shù)據(jù)類型的主存索引機(jī)制,包括索引的空間管理、一致性維護(hù)和提供給所述查詢模塊的接口。
2.根據(jù)權(quán)利要求1所述的一種支持IEC61850對(duì)象查詢的SQL接口實(shí)現(xiàn)方法,其特征是,利用數(shù)據(jù)字典實(shí)現(xiàn)所述元數(shù)據(jù)管理,包括向上層調(diào)用程序提供的接口和數(shù)據(jù)字典的加載、卸載及管理功能。
3.根據(jù)權(quán)利要求1所述的一種支持IEC61850對(duì)象查詢的SQL接口實(shí)現(xiàn)方法,其特征是,所述現(xiàn)有SQL算子進(jìn)行擴(kuò)充采用的分析方法包括使用LEX的詞法分析方法和使用YACC 的語(yǔ)法分析方法。
4.根據(jù)權(quán)利要求1所述的一種支持IEC61850對(duì)象查詢的SQL接口實(shí)現(xiàn)方法,其特征是,所述索引模塊支持索引數(shù)據(jù)類型和索引數(shù)據(jù)的分離機(jī)制,利用一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)刻畫(huà)數(shù)據(jù)類型和節(jié)點(diǎn)類型,支持動(dòng)態(tài)數(shù)據(jù)類型的索引構(gòu)建。
5.根據(jù)權(quán)利要求1所述的一種支持IEC61850對(duì)象查詢的SQL接口實(shí)現(xiàn)方法,其特征是,所述索引模塊利用索引節(jié)點(diǎn)所采用的鏈接機(jī)制。
6.根據(jù)權(quán)利要求1所述的一種支持IEC61850對(duì)象查詢的SQL接口實(shí)現(xiàn)方法,其特征是,所述索引模塊采用B+樹(shù)作為基本數(shù)據(jù)結(jié)構(gòu),支持索引的快速序列化和空間回收釋放管理。
7.根據(jù)權(quán)利要求1所述的一種支持IEC61850對(duì)象查詢的SQL接口實(shí)現(xiàn)方法,其特征是,使用結(jié)果集對(duì)象封裝系統(tǒng)返回的查詢結(jié)果,結(jié)果集對(duì)象提供游標(biāo)機(jī)制,為調(diào)用者檢索查詢結(jié)果。
全文摘要
本發(fā)明公開(kāi)了一種支持IEC61850對(duì)象查詢的SQL接口實(shí)現(xiàn)方法,電網(wǎng)系統(tǒng)中包括以下功能模塊,數(shù)據(jù)存儲(chǔ)模塊根據(jù)電網(wǎng)系統(tǒng)中的IEC61850對(duì)象建立數(shù)據(jù)模型;查詢模塊針對(duì)IEC61850對(duì)象對(duì)于現(xiàn)有SQL算子進(jìn)行擴(kuò)充,根據(jù)所述數(shù)據(jù)模型建立適用于對(duì)象的層次化操作算子;主存管理模塊為支持對(duì)象存儲(chǔ)的主存管理模式,采用共享內(nèi)存的方式實(shí)現(xiàn),包括共享內(nèi)存的分配、釋放和映射以及共享內(nèi)存的使用和管理;索引模塊包括索引的空間管理、一致性維護(hù)和提供給所述查詢模塊的接口。本發(fā)明提供了支持IEC61850對(duì)象查詢的聲明性SQL查詢接口,實(shí)現(xiàn)了電網(wǎng)內(nèi)層次化對(duì)象和關(guān)系型數(shù)據(jù)的快速檢索和管理。
文檔編號(hào)G06F17/30GK102163232SQ20111009623
公開(kāi)日2011年8月24日 申請(qǐng)日期2011年4月18日 優(yōu)先權(quán)日2011年4月18日
發(fā)明者張海濱, 張進(jìn)偉, 朱廣蔚, 潘洪湘, 秦小麟, 鄭桂能 申請(qǐng)人:南京航空航天大學(xué), 國(guó)電南瑞科技股份有限公司