国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種數(shù)據(jù)庫表的操作方法和操作系統(tǒng)與流程

      文檔序號:11250973閱讀:1038來源:國知局
      一種數(shù)據(jù)庫表的操作方法和操作系統(tǒng)與流程

      本發(fā)明涉及數(shù)據(jù)庫表的操作技術(shù),更具體地,涉及數(shù)據(jù)庫表的操作方法和操作系統(tǒng)。



      背景技術(shù):

      當(dāng)前已有將區(qū)塊鏈與數(shù)據(jù)庫進(jìn)行結(jié)合的系統(tǒng),通過該系統(tǒng),用戶可以像操作普通數(shù)據(jù)庫一樣向區(qū)塊鏈發(fā)送相應(yīng)的交易,交易會被記錄在區(qū)塊鏈網(wǎng)絡(luò)中,同時會在底層數(shù)據(jù)庫中反應(yīng)出來。該系統(tǒng)實現(xiàn)了數(shù)據(jù)庫操作記錄與實現(xiàn)的分離,極大地提高了傳統(tǒng)數(shù)據(jù)庫的安全性及靈活性。

      有某些情況下,如果多人同時對同一張數(shù)據(jù)庫表進(jìn)行操作,就會引起沖突,比如表中一條數(shù)據(jù)為:小紅的工資2000,a用戶想基于2000去給其漲工資10%,在這個交易過程中,b用戶發(fā)了一條新的交易將小紅的工資提高10%,這時a用戶發(fā)出來的交易在執(zhí)行的時候?qū)?200再去漲10%去漲工資,會得到不正確的結(jié)果。

      因此,當(dāng)前的基于數(shù)據(jù)庫的區(qū)塊鏈系統(tǒng)存在數(shù)據(jù)操作沖突的問題。



      技術(shù)實現(xiàn)要素:

      針對背景技術(shù)中的問題,本發(fā)明提出一種基于數(shù)據(jù)庫的區(qū)塊鏈系統(tǒng)中的操作方法和系統(tǒng),保證用戶當(dāng)前所發(fā)的交易是基于自己所見到的數(shù)據(jù)庫表的狀態(tài)來進(jìn)行操作,如果中間有其它交易插入,則交易失敗。

      本發(fā)明的數(shù)據(jù)庫表的操作方法包括:

      s1,創(chuàng)建表對象:為每一個數(shù)據(jù)庫表生成一個對象,所述對象記錄了所述數(shù)據(jù)庫表的屬性;

      s2,創(chuàng)建基礎(chǔ)哈希值:將每一個數(shù)據(jù)庫表的第一個操作的表操作語句進(jìn)行哈希運算得到一個哈希值,作為基礎(chǔ)哈希值,記錄在該數(shù)據(jù)庫表的對象內(nèi);

      s3,哈希值校驗:收到針對一數(shù)據(jù)庫表的后續(xù)操作后,將針對該后續(xù)操作的表操作語句與該數(shù)據(jù)庫表的基礎(chǔ)哈希值進(jìn)行連接,再進(jìn)行哈希運算得到新的哈希值;

      s4,哈希值校驗:比較所述后續(xù)操作里記錄的基礎(chǔ)哈希值與當(dāng)前在s3中計算的基礎(chǔ)哈希值是否相同,如果不同則判定交易失敗;

      s5,如果相同,則校驗成功,則將新計算的基礎(chǔ)哈希值記錄在該數(shù)據(jù)庫表的對象內(nèi)。

      本發(fā)明還提出一種數(shù)據(jù)庫表的操作系統(tǒng),包括區(qū)塊鏈系統(tǒng)和交易節(jié)點,所述區(qū)塊鏈系統(tǒng)被配置為執(zhí)行如下步驟:

      s1,創(chuàng)建表對象:為每一個數(shù)據(jù)庫表生成一個對象,所述對象記錄了所述數(shù)據(jù)庫表的屬性;

      s2,創(chuàng)建基礎(chǔ)哈希值:將每一個數(shù)據(jù)庫表的第一個操作的表操作語句進(jìn)行哈希運算得到一個哈希值,作為基礎(chǔ)哈希值,記錄在該數(shù)據(jù)庫表的對象內(nèi);

      s3,哈希值校驗:收到來自交易節(jié)點針對一數(shù)據(jù)庫表的后續(xù)操作后,將針對該后續(xù)操作的表操作語句與該數(shù)據(jù)庫表的基礎(chǔ)哈希值進(jìn)行連接,再進(jìn)行哈希運算得到新的哈希值;

      s4,哈希值校驗:比較所述后續(xù)操作里記錄的基礎(chǔ)哈希值與當(dāng)前在s3中計算的基礎(chǔ)哈希值是否相同,如果不同則判定交易失?。?/p>

      s5,如果相同,則校驗成功,則將新計算的基礎(chǔ)哈希值記錄在該數(shù)據(jù)庫表的對象內(nèi)。

      本發(fā)明的有益效果包括:使得基于數(shù)據(jù)庫的區(qū)塊鏈系統(tǒng)針對數(shù)據(jù)庫表的操作在交易時序上保持嚴(yán)格的順序,使用戶基于當(dāng)前所見的狀態(tài)對表進(jìn)行操作,得到期望的結(jié)果,如果未能基于當(dāng)前狀態(tài)進(jìn)行操作,則交易失敗。

      附圖說明

      圖1為本發(fā)明的系統(tǒng)的一個結(jié)構(gòu)示意圖;

      圖2為本發(fā)明的方法的一個實施方式的流程圖;

      圖3為本發(fā)明的方法的又一個實施方式的流程圖。

      具體實施方式

      下面參照附圖描述本發(fā)明的實施方式,其中相同的部件用相同的附圖標(biāo)記表示。

      下面以區(qū)塊鏈系統(tǒng)為例來描述本發(fā)明,但是本發(fā)明不僅僅適用于區(qū)塊鏈系統(tǒng)。

      在基于數(shù)據(jù)庫的區(qū)塊鏈系統(tǒng)中,對數(shù)據(jù)庫的操作先進(jìn)區(qū)塊鏈共識,共識通過后,操作會被記錄在區(qū)塊鏈網(wǎng)絡(luò)的區(qū)塊里,同時該交易會去操作數(shù)據(jù)庫表,得到用戶想要的數(shù)據(jù)庫表結(jié)果。本發(fā)明要實現(xiàn)的技術(shù)效果是,針對表的操作是必須基于自己當(dāng)時看到的一個狀態(tài),如果狀態(tài)改變,則操作失敗。

      第一實施方式

      圖1顯示了區(qū)塊鏈系統(tǒng)的一種拓?fù)浼軜?gòu),包括數(shù)據(jù)庫和多個交易節(jié)點。數(shù)據(jù)庫中維護(hù)每一個數(shù)據(jù)庫表以及每一次交易的記錄。

      如圖2所示,本發(fā)明的方法包括:

      步驟s1,創(chuàng)建表對象:區(qū)塊鏈系統(tǒng)為數(shù)據(jù)庫表生成一個對象,所述對象記錄了所述數(shù)據(jù)庫表的屬性??梢园褦?shù)據(jù)庫表的全部屬性記錄在所述對象內(nèi),包括后面所述的該數(shù)據(jù)庫表的基礎(chǔ)哈希值。

      交易節(jié)點發(fā)起針對一個數(shù)據(jù)庫表的第一個操作時,交易節(jié)點將表操作語句發(fā)送至區(qū)塊鏈系統(tǒng)。交易節(jié)點發(fā)送至區(qū)塊鏈系統(tǒng)的信息包括:表操作語句,以及步驟s1中的基礎(chǔ)哈希值。關(guān)于交易節(jié)點如何獲取所述基礎(chǔ)哈希值,在下面詳述。

      步驟s2,創(chuàng)建基礎(chǔ)哈希值:區(qū)塊鏈系統(tǒng)將該數(shù)據(jù)庫表的第一個操作的表操作語句(例如sql語句)進(jìn)行哈希運算得到一個哈希值h0,作為基礎(chǔ)哈希值,記錄在所述對象內(nèi)??梢允褂胹ha512-half算法得到一個32個字節(jié)的基礎(chǔ)哈希值。

      當(dāng)交易節(jié)點發(fā)起針對該數(shù)據(jù)庫表的后續(xù)操作時,交易節(jié)點將表操作語句發(fā)送至區(qū)塊鏈系統(tǒng)。交易節(jié)點發(fā)送至區(qū)塊鏈系統(tǒng)的信息包括:表操作語句,以及步驟s2中的基礎(chǔ)哈希值。關(guān)于交易節(jié)點如何獲取所述基礎(chǔ)哈希值,在下面詳述。

      而且,針對該數(shù)據(jù)庫表的第n個操作,都將該操作的表操作語句與前一個操作生成的基礎(chǔ)哈希值hn-1相關(guān)聯(lián),生成新的基礎(chǔ)哈希值hn。

      以公式表示為:

      創(chuàng)建表:basehashh0=sha512-half(sql0)

      后續(xù)第n次操作:basehashhn=sha512-half(basehashhn-1+sqln)

      這樣,每一次表操作基于的哈希值都是一個最新的值?;谟涗浟嗣恳粋€表操作的基礎(chǔ)哈希值,當(dāng)交易進(jìn)入共識環(huán)節(jié)時,就可以進(jìn)行驗證。

      步驟s3,哈希值校驗:區(qū)塊鏈系統(tǒng)收到來自交易節(jié)點的針對一數(shù)據(jù)庫表的后續(xù)操作后,將針對該后續(xù)操作的表操作語句(例如sql語句)與該數(shù)據(jù)庫表的基礎(chǔ)哈希值進(jìn)行連接,再進(jìn)行哈希運算得到新的哈希值hn。

      步驟s4,哈希值校驗:區(qū)塊鏈系統(tǒng)比較所述交易里記錄的基礎(chǔ)哈希值與當(dāng)前在s3中計算的基礎(chǔ)哈希值是否相同,如果不同則不通過共識,判定交易失敗。

      步驟s5,如果相同,則校驗成功,則將新計算的基礎(chǔ)哈希值記錄在該數(shù)據(jù)庫表的對象內(nèi)。

      具體而言,在一交易節(jié)點做交易時,之前該數(shù)據(jù)庫表已經(jīng)被操作了n次,那么該數(shù)據(jù)庫表的對象中記錄的最新的基礎(chǔ)哈希值為:

      basehashhn=sha512-half(basehashhn-1+sqln)

      當(dāng)該交易節(jié)點向所述區(qū)塊鏈系統(tǒng)提交交易時,這是針對該數(shù)據(jù)庫表的第n+1次操作。該交易里記錄了該交易節(jié)點的表操作語句sqln+1與基于該數(shù)據(jù)庫表的最新基礎(chǔ)哈希值basehashhn算出來的值:

      basehashhn+1=sha512-half(basehashhn+sqln+1)。

      區(qū)塊鏈系統(tǒng)收到該交易后,基于該交易中的表操作語句sqln+1和系統(tǒng)中存儲的該數(shù)據(jù)庫表的最新基礎(chǔ)哈希值basehashhn生成一個哈希值basehashh’n+1,比較basehashh’n+1和basehashhn+1是否相同。相同,則允許對該數(shù)據(jù)庫表進(jìn)行操作。

      交易失敗會讓用戶不會以為正確操作了數(shù)據(jù)庫,但是事實上卻得不到正確的期望結(jié)果,所以極大地提高了用戶體驗,保證了對數(shù)據(jù)庫表操作的可靠性。

      第二實施方式

      如圖3所示,根據(jù)本發(fā)明的另一方面,對第一實施方式進(jìn)行了改進(jìn)。

      在步驟a1,在發(fā)送交易的交易節(jié)點的本地創(chuàng)建一map表,所述map表的key值為數(shù)據(jù)庫表的表名,對應(yīng)的值包含第一實施方式的步驟s2中生成的基礎(chǔ)哈希值。所述map表可以存儲在本地的緩存中。

      步驟a2,當(dāng)某一交易節(jié)點向所述區(qū)塊鏈系統(tǒng)發(fā)送一筆交易時,先在本地的所述map表中查詢。

      第一種情況,步驟a3,如果在所述map表里能查到,則用這個緩存的基礎(chǔ)哈希值,作為最新的基礎(chǔ)哈希值,如第一實施方式那樣進(jìn)行后續(xù)操作。

      第二種情況,步驟a4,如果未能找到,則所述交易節(jié)點向所述區(qū)塊鏈系統(tǒng)請求獲取該數(shù)據(jù)庫表的對象中記錄的基礎(chǔ)哈希值,作為最新的基礎(chǔ)哈希值,如第一實施方式那樣進(jìn)行后續(xù)操作。

      優(yōu)選地,在第二種情況下,所述交易節(jié)點用從區(qū)塊鏈系統(tǒng)獲取的基礎(chǔ)哈希值來更新本地的所述map表中的值。

      除了步驟a4中所述的更新map表的方法,還有一種更新本地map表的哈希值的方式。

      步驟a5,在交易節(jié)點的交易成功后(交易的哈希值校驗如第一實施方式的步驟s5所述),所述交易節(jié)點更新本地的所述map表中的值。

      在本實施方式中,在本地設(shè)立map表,這是因為,基于數(shù)據(jù)庫的區(qū)塊鏈系統(tǒng)中一般設(shè)定每隔一段時間(例如3~9秒)才會生成一個新的區(qū)塊,數(shù)據(jù)庫表的屬性都記錄在區(qū)塊上,因此只有在新的區(qū)塊上才能反應(yīng)基礎(chǔ)哈希值的變化。那么,如果在這個時間(交易會被記在一個區(qū)塊上)里想發(fā)送多個交易來操作該表,就需要緩存一個基礎(chǔ)哈希值來維護(hù)交易里記錄的哈希值的連續(xù)性。

      另一方面,因為所述map表位于緩存中,則不能讓該map表不斷增大,因此,在步驟a6,為map表里的數(shù)據(jù)庫表設(shè)立計時器,如果一段時間(例如30分鐘)內(nèi),map表內(nèi)的某一個數(shù)據(jù)庫表緩存的計時信息未發(fā)生變化,則從所述map表里刪除對該數(shù)據(jù)庫表的基礎(chǔ)哈希值的緩存記錄。

      另外,當(dāng)本地的所述map表里的某張數(shù)據(jù)庫表的基礎(chǔ)哈希值與區(qū)塊鏈系統(tǒng)里記錄的值不一致時,即,在本節(jié)點收到的對某張數(shù)據(jù)庫表的交易時間段里,其它區(qū)塊鏈節(jié)點也收到一個或多個針對同樣一張數(shù)據(jù)庫表的操作交易。需要及時察覺到這種錯誤并更正本節(jié)點緩存中對應(yīng)的基礎(chǔ)哈希值。

      將經(jīng)過本節(jié)點的針對某個數(shù)據(jù)庫表的交易都記錄到上面本地的所述map表里,每生成一個新的區(qū)塊,本地節(jié)點檢查本地的map表里記錄的各個數(shù)據(jù)庫表的操作是否已經(jīng)成功記錄在了區(qū)塊上,如果記錄上,則刪掉對應(yīng)的交易,如果發(fā)現(xiàn)未記錄到區(qū)塊上,則要刪除這個交易之后的所有交易(因為都基于了一個錯誤的基礎(chǔ)哈希值),然后再去區(qū)塊鏈里去獲取最新的正常的對應(yīng)表的基礎(chǔ)哈希值,對本地緩存的所述map表里的基礎(chǔ)哈希值進(jìn)行更新。

      第三實施方式

      本發(fā)明還提出一種基于數(shù)據(jù)庫表的操作系統(tǒng),包括區(qū)塊鏈系統(tǒng)和交易節(jié)點,所述區(qū)塊鏈系統(tǒng)被配置為執(zhí)行第一、第二實施方式中的步驟s1-s5。所述交易節(jié)點包括處理器,所述處理器被配置為執(zhí)行第一、第二實施方式中的a1-a4。

      本發(fā)明還提出一種存儲介質(zhì),其存儲有可在處理器中運行的程序,所述程序為第一、第二實施方式中的步驟s1-s5以及a1-a4。

      以上所述的實施例,只是本發(fā)明較優(yōu)選的具體實施方式,本領(lǐng)域的技術(shù)人員在本發(fā)明技術(shù)方案范圍內(nèi)進(jìn)行的通常變化和替換都應(yīng)包含在本發(fā)明的保護(hù)范圍內(nèi)。

      當(dāng)前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1