一種基于用戶(hù)直觀方式操作二進(jìn)制數(shù)據(jù)的方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于數(shù)據(jù)修改領(lǐng)域,尤其涉及一種基于用戶(hù)直觀方式操作二進(jìn)制數(shù)據(jù)的方法及系統(tǒng)。
【背景技術(shù)】
[0002]傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)是目前Web應(yīng)用中存取數(shù)據(jù)的主要形式。然而,隨著Web2.0、大數(shù)據(jù)、云應(yīng)用等技術(shù)的發(fā)展,傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)在I/O、可擴(kuò)展性上遇到了瓶頸,在大數(shù)據(jù)存取和訪(fǎng)問(wèn)時(shí)效率急劇下降,在高可擴(kuò)展性和高可用性方面也遇到難題。為了解決此問(wèn)題,許多方案相繼提出,比如分布式數(shù)據(jù)庫(kù)、主從數(shù)據(jù)庫(kù)、無(wú)模式數(shù)據(jù)庫(kù)等。無(wú)模式數(shù)據(jù)庫(kù),是一種模式自由的數(shù)據(jù)庫(kù),其模式主要為關(guān)系、樹(shù)、圖、文檔等多種方式。實(shí)際上,很難完全拋棄現(xiàn)有的關(guān)系數(shù)據(jù)庫(kù)而直接使用無(wú)模式數(shù)據(jù)庫(kù)。以關(guān)系數(shù)據(jù)庫(kù)為主,無(wú)模式數(shù)據(jù)庫(kù)為輔,成了工業(yè)界和產(chǎn)業(yè)界普遍接受的方案。
[0003]現(xiàn)有的技術(shù)中,存在兩類(lèi)關(guān)系數(shù)據(jù)庫(kù)與無(wú)模式數(shù)據(jù)庫(kù)進(jìn)行結(jié)合的方法:(1)以用戶(hù)插件的方法,將無(wú)模式數(shù)據(jù)庫(kù)集成到關(guān)系數(shù)據(jù)庫(kù)中,使得關(guān)系數(shù)據(jù)庫(kù)同時(shí)支持關(guān)系操作和無(wú)模式操作。該方法缺點(diǎn)是大量的打開(kāi)/關(guān)閉表的操作十分耗時(shí),降低了數(shù)據(jù)庫(kù)性能;
(2)混合使用關(guān)系數(shù)據(jù)庫(kù),以關(guān)系數(shù)據(jù)庫(kù)為主,無(wú)模式數(shù)據(jù)庫(kù)為輔,使用關(guān)系數(shù)據(jù)庫(kù)進(jìn)行大數(shù)據(jù)更新操作,采用某種機(jī)制將關(guān)系數(shù)據(jù)庫(kù)模式和數(shù)據(jù)同步到無(wú)模式數(shù)據(jù)庫(kù)。對(duì)于大數(shù)據(jù)的查詢(xún)直接使用無(wú)模式數(shù)據(jù)庫(kù),而更新仍采用關(guān)系數(shù)據(jù)庫(kù)。該方法優(yōu)點(diǎn)是既解決了關(guān)系數(shù)據(jù)庫(kù)中大數(shù)據(jù)的查詢(xún)瓶頸問(wèn)題,又解決了無(wú)模式數(shù)據(jù)庫(kù)更新瓶頸問(wèn)題。該方法的難點(diǎn)是如何將關(guān)系數(shù)據(jù)庫(kù)模式和數(shù)據(jù)轉(zhuǎn)換到無(wú)模式數(shù)據(jù)庫(kù)?,F(xiàn)有技術(shù)的解決方案及實(shí)現(xiàn)主要有兩種方法:(1)通過(guò)關(guān)系數(shù)據(jù)庫(kù)觸發(fā)器,將數(shù)據(jù)的變化記錄到臨時(shí)查詢(xún)表。該查詢(xún)表通常由ID、表名、行號(hào)、時(shí)間戳和操作等模式構(gòu)成。然后將臨時(shí)查詢(xún)表的數(shù)據(jù)同步到目標(biāo)無(wú)模式數(shù)據(jù)庫(kù);(2)對(duì)方法(I)改進(jìn),取消臨時(shí)查詢(xún)表,通過(guò)增加關(guān)系數(shù)據(jù)庫(kù)自定義HTTP函數(shù),直接將關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)變化增量通過(guò)HTTP協(xié)議發(fā)送給目標(biāo)無(wú)模式數(shù)據(jù)庫(kù),實(shí)現(xiàn)數(shù)據(jù)和模式的同止/J/ O
[0004]綜上,現(xiàn)有關(guān)系數(shù)據(jù)庫(kù)到無(wú)模式數(shù)據(jù)庫(kù)的轉(zhuǎn)換方法主要有以下問(wèn)題:(1)不管是觸發(fā)器還是用戶(hù)自定義函數(shù),其嚴(yán)重影響關(guān)系數(shù)據(jù)庫(kù)性能;(2)數(shù)據(jù)傳輸過(guò)程無(wú)法保證數(shù)據(jù)操作的有序性,容易造成數(shù)據(jù)的不一致;(3)同步方式會(huì)阻塞數(shù)據(jù)庫(kù)進(jìn)程,降低關(guān)系數(shù)據(jù)庫(kù)的模式和數(shù)據(jù)更新性能。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的在于提供一種基于用戶(hù)直觀方式操作二進(jìn)制數(shù)據(jù)的方法,旨在解決上述的技術(shù)問(wèn)題。
[0006]本發(fā)明是這樣實(shí)現(xiàn)的,一種基于用戶(hù)直觀方式操作二進(jìn)制數(shù)據(jù)的方法,所述方法包括以下步驟:
A、設(shè)置對(duì)輸入的數(shù)據(jù)信息定義數(shù)據(jù)描述的格式; B、將預(yù)先設(shè)置好的數(shù)據(jù)信息輸入進(jìn)行數(shù)據(jù)存儲(chǔ);
C、在輸入的數(shù)據(jù)信息中查找User,如查找到,則執(zhí)行步驟D,如查找不到,則提示錯(cuò)誤并結(jié)束本次操作;
D、判斷User的值是否是數(shù)據(jù)定義中定義的字符串類(lèi)型,如是,則執(zhí)行步驟E,如否,則提示錯(cuò)誤并結(jié)束本次操作;
E、計(jì)算數(shù)據(jù)的長(zhǎng)度并判斷數(shù)據(jù)長(zhǎng)度是否大于預(yù)設(shè)值,如否,則執(zhí)行步驟F,如是,則提示錯(cuò)誤并結(jié)束本次操作;
F、在二進(jìn)制數(shù)據(jù)流中存儲(chǔ)整形數(shù)字和字符串;
G、在輸入的數(shù)據(jù)信息中查找Age,如查找到,則執(zhí)行步驟H,如查找不到,則提示錯(cuò)誤并結(jié)束本次操作;
H、判斷Age的值是否是數(shù)據(jù)定義中定義的整形,如是,則執(zhí)行步驟I,如否,則提示錯(cuò)誤并結(jié)束本次操作;
1、在二進(jìn)制數(shù)據(jù)流中存儲(chǔ)整形數(shù)字;
J、在存儲(chǔ)后根據(jù)數(shù)據(jù)定義讀取預(yù)設(shè)字節(jié)為第一列的字符串表示實(shí)際長(zhǎng)度并判斷剩余字節(jié)長(zhǎng)度是否不足讀取的字節(jié)長(zhǎng)度,如是,則提示錯(cuò)誤并結(jié)束本次操作,如否,則執(zhí)行步驟K;
K、讀取設(shè)定字節(jié)的實(shí)際長(zhǎng)度并判斷剩余長(zhǎng)度是否不足設(shè)定字節(jié),如是,則提示出錯(cuò)并結(jié)束本次操作,如否,則讀取結(jié)果為預(yù)設(shè)名并執(zhí)行步驟L ;
L、根據(jù)數(shù)據(jù)定義讀取預(yù)置字節(jié)為第二列的整形并判斷其長(zhǎng)度是否不足預(yù)置字節(jié),如是,則提示錯(cuò)誤并結(jié)束本次操作,如否,則讀取結(jié)果為預(yù)設(shè)值并執(zhí)行步驟M ;
M、根據(jù)數(shù)據(jù)定義對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行直觀的修改。
[0007]本發(fā)明的進(jìn)一步技術(shù)方案是:所述數(shù)據(jù)描述格式對(duì)數(shù)據(jù)的列名、類(lèi)型、最大長(zhǎng)度進(jìn)行定義。
[0008]本發(fā)明的進(jìn)一步技術(shù)方案是:通過(guò)對(duì)數(shù)據(jù)定義來(lái)實(shí)現(xiàn)對(duì)二進(jìn)制數(shù)據(jù)直觀操作修改。
[0009]本發(fā)明的進(jìn)一步技術(shù)方案是:所述預(yù)設(shè)值為24。
[0010]本發(fā)明的進(jìn)一步技術(shù)方案是:在數(shù)據(jù)定義中支持的類(lèi)型包括int8、intl6、int32、int64、float、double、string、binary> struct 及 un1n。
[0011]本發(fā)明的另一目的在于提供一種基于用戶(hù)直觀方式操作二進(jìn)制數(shù)據(jù)的系統(tǒng),該系統(tǒng)包括:
數(shù)據(jù)定義模塊,用于設(shè)置對(duì)輸入的數(shù)據(jù)信息定義數(shù)據(jù)描述的格式;
數(shù)據(jù)存儲(chǔ)模塊,用于將預(yù)先設(shè)置好的數(shù)據(jù)信息輸入進(jìn)行數(shù)據(jù)存儲(chǔ);
第一查詢(xún)模塊,用于在輸入的數(shù)據(jù)信息中查找User,如查找到,則執(zhí)行字符串類(lèi)型判斷模塊,如查找不到,則提示錯(cuò)誤并結(jié)束本次操作;
字符串類(lèi)型判斷模塊,用于判斷User的值是否是數(shù)據(jù)定義中定義的字符串類(lèi)型,如是,則執(zhí)行長(zhǎng)度判斷模塊,如否,則提示錯(cuò)誤并結(jié)束本次操作;
長(zhǎng)度判斷模塊,用于計(jì)算數(shù)據(jù)的長(zhǎng)度并判斷數(shù)據(jù)長(zhǎng)度是否大于預(yù)設(shè)值,如否,則執(zhí)行數(shù)據(jù)流存儲(chǔ)模塊,如是,則提示錯(cuò)誤并結(jié)束本次操作;
數(shù)據(jù)流存儲(chǔ)模塊,用于在二進(jìn)制數(shù)據(jù)流中存儲(chǔ)整形數(shù)字和字符串; 第二查找模塊,用于在輸入的數(shù)據(jù)信息中查找Age,如查找到,則執(zhí)行整形判斷模塊,如查找不到,則提示錯(cuò)誤并結(jié)束本次操作;
整形判斷模塊,用于判斷Age的值是否是數(shù)據(jù)定義中定義的整形,如是,則執(zhí)行整形存儲(chǔ)模塊,如否,則提示錯(cuò)誤并結(jié)束本次操作;
整形存儲(chǔ)模塊,用于在二進(jìn)制數(shù)據(jù)流中存儲(chǔ)整形數(shù)字;
字節(jié)長(zhǎng)度判斷模塊,用于在存儲(chǔ)后根據(jù)數(shù)據(jù)定義讀取預(yù)設(shè)字節(jié)為第一列的字符串表示實(shí)際長(zhǎng)度并判斷剩余字節(jié)長(zhǎng)度是否不足讀取的字節(jié)長(zhǎng)度,如是,則提示錯(cuò)誤并結(jié)束本次操作,如否,則執(zhí)行剩余長(zhǎng)度判斷模塊;
剩余長(zhǎng)度判斷模塊,用于讀取設(shè)定字節(jié)的實(shí)際長(zhǎng)度并判斷剩余長(zhǎng)度是否不足設(shè)定字節(jié),如是,則提示錯(cuò)誤并結(jié)束本次操作,如否,則讀取結(jié)果為預(yù)設(shè)名并執(zhí)行整形長(zhǎng)度判斷模塊;
整形長(zhǎng)度判斷模塊,用于根據(jù)數(shù)據(jù)定義讀取預(yù)置字節(jié)為第二列的整形并判斷其長(zhǎng)度是否不足預(yù)置字節(jié),如是,則提示錯(cuò)誤并結(jié)束本次操作,如否,則讀取結(jié)果為預(yù)設(shè)值并執(zhí)行修改模塊;
修改模塊,用于根據(jù)數(shù)據(jù)定義對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行直觀的修改。
[0012]本發(fā)明的進(jìn)一步技術(shù)方案是:所述數(shù)據(jù)描述格式對(duì)數(shù)據(jù)的列名、類(lèi)型、最大長(zhǎng)度進(jìn)行定義。
[0013]本發(fā)明的進(jìn)一步技術(shù)方案是:通過(guò)對(duì)數(shù)據(jù)定義來(lái)實(shí)現(xiàn)對(duì)二進(jìn)制數(shù)據(jù)直觀操作修改。
[0014]本發(fā)明的進(jìn)一步技術(shù)方案是:所述預(yù)設(shè)值為24。
[0015]本發(fā)明的進(jìn)一步技術(shù)方案是:在數(shù)據(jù)定義中支持的類(lèi)型包括int8、intl6、int32、int64、float、double、string、binary> struct 及 un1n。
[0016]本發(fā)明的有益效果是:在不改變數(shù)據(jù)格式的前提下,對(duì)輸入數(shù)據(jù)進(jìn)行最大限度壓縮,同時(shí)保留了循環(huán)嵌套等多種有益特性,其效率比同類(lèi)型的產(chǎn)品(ProtocolBuffer)提高20倍以上,可以作為C/C++、C#、Act1nScript、Java、Python等多種實(shí)現(xiàn),易用性相當(dāng)高。
【附圖說(shuō)明】
[0017]圖1是本發(fā)明實(shí)施例提供的基于用戶(hù)直觀方式操作二進(jìn)制數(shù)據(jù)的方法的流程圖; 圖2是本發(fā)明實(shí)施例提供的基于用戶(hù)直觀方式操作二進(jìn)制數(shù)據(jù)的方法的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0018]圖1示出了本發(fā)明提供的基于用戶(hù)直觀方式操作二進(jìn)制數(shù)據(jù)的方法的流程圖,其詳述如下:
步驟SI,設(shè)置對(duì)輸入的數(shù)據(jù)信息定義數(shù)據(jù)描述的格式;1、用戶(hù)定義數(shù)據(jù)描述格式(類(lèi)似 XSD (XML Schema 語(yǔ)言也稱(chēng)作 XML Schema 定義(XML Schema Definit1n, XSD)), M如用戶(hù)定義,第一列數(shù)據(jù)為〈entry name=” User” type=” string” size=” 24” > 表示,列名為User,數(shù)據(jù)類(lèi)型為字符串,最大長(zhǎng)度為24 ;3、第二列數(shù)據(jù)為〈entry name=”Age”type=” int” >表示,列名為Age,數(shù)據(jù)類(lèi)型為整形數(shù)字。
[0019]步驟S2,將預(yù)先設(shè)置好的數(shù)據(jù)信息輸入進(jìn)行數(shù)據(jù)存儲(chǔ);用戶(hù)輸入希望存儲(chǔ)的數(shù)據(jù),例如 User=JohnR, Age=24 等。
[0020]步驟S3,在輸入的數(shù)據(jù)信息中查找User,如查找到,則執(zhí)行步驟S4,如查找不到,則提示錯(cuò)誤并結(jié)束本次操作。
[0021]步驟S4,判斷User的值是否是數(shù)據(jù)定義中定義的字符串類(lèi)型,如是,則執(zhí)行步驟S5,如否,則提示錯(cuò)誤并結(jié)束本次操作。
[0022]步驟S5,計(jì)算數(shù)據(jù)的長(zhǎng)度并判斷數(shù)據(jù)長(zhǎng)度是否大于預(yù)設(shè)值,如否,則執(zhí)行步驟S6,如是,則提示錯(cuò)誤并結(jié)束本次操作;其中7、計(jì)算數(shù)據(jù)的長(zhǎng)度Ien (JohnR) =5,預(yù)設(shè)值的長(zhǎng)度為24。
[0023]步驟S6,在二進(jìn)制數(shù)據(jù)流中存儲(chǔ)整形數(shù)字和字符串;在二進(jìn)制數(shù)據(jù)流中存儲(chǔ)整形數(shù)字4 (長(zhǎng)度4字節(jié)),緊跟著存儲(chǔ)字符串JohnR (長(zhǎng)度5字節(jié)),總長(zhǎng)度為4+5=9。
[0024]步驟S7,在輸入的數(shù)據(jù)信息中查找Age,如查找到,則執(zhí)行步驟S8,如查找不到,則提示錯(cuò)誤并結(jié)束本次操作。
[0025]步驟S8,判斷Age的值是否是數(shù)據(jù)定義中定義的整形,如是,則執(zhí)行步驟S9,如否,則提示錯(cuò)誤并結(jié)束本次操作。
[0026]步驟S9,在二進(jìn)制數(shù)據(jù)