主頁 > 區塊鏈 > 理解完這些基本上能解決面試中MySql的事務問題

理解完這些基本上能解決面試中MySql的事務問題

2020-10-19 00:50:44 區塊鏈

越努力,越幸運,
本文已收藏在GitHub中JavaCommunity, 里面有面試分享、原始碼分析系列文章,歡迎收藏,點贊
https://github.com/Ccww-lx/JavaCommunity

前言

在面試中,基本上都會問到關于資料庫的事務問題,如果啥都不會或者只回答到表面的上知識點的話,那面試基本上是沒戲了,為了能順利通過面試,那MySql的事務問題就需要了解,所以就根據網上的資料總結一版Mysql事務的知識點,鞏固一下事務的知識,

事務

事務是指邏輯上的一組操作,要么都執行,要么都不執行,

事務的特性(ACID)

  • 原子性(Atomicity):事務是不可分割的作業單元,要么都成功,要么都失敗, 如果事務中一個sql陳述句執行失敗,則已執行的陳述句也必須回滾,資料庫退回到事務前的狀態,

  • 一致性(Consistency):事務不能破壞資料的完整性和業務的一致性 ,例如在銀行轉賬時,不管事務成功還是失敗,雙方錢的總額不變

  • 隔離性(Isolation):一個事務所操作的資料在提交之前,對其他事務的可見性設定(一般是不可見)

  • 持久性(Durability):事務提交之后,所做的修改就會永久保存,不會因為系統故障導致資料丟失

嚴格來說,只有同時滿足資料庫的事務ACID特性才能算一個完整的事務,但現實中實作能夠真正滿足的完整的事務特性少之又少,但是在實作中也必須盡量達到事務要求的特性,

那么事務ACID特性具體怎么實作的呢?我們來分析看看,首先先看看事務的特性,


原子性(Atomicity)

首先我們來看看事務的原子性特性,看看其如何實作的?

原子性(Atomicity):事務是不可分割的作業單元,要么都成功,要么都失敗, 如果事務中一個sql陳述句執行失敗,則已執行的陳述句也必須回滾,資料庫退回到事務前的狀態

原子性(Atomicity)的實作離不開 MySQL的事務日志 undo log日志型別,當事務需要回滾的時候需要將資料庫狀態回滾到事務開始前,即需要撤銷所有已經成功執行的sql陳述句,那么undo log起了關鍵性作用:

當事務對資料庫進行修改時,InnoDB會生成對應的undo log;如果事務執行失敗或呼叫了rollback,導致事務需要回滾,便可以利用undo log中的資訊將資料回滾到修改之前的樣子,

那么undo log是什么呢?每個資料變更操作是怎么被記錄下來的呢?

undo log( 回滾日志 )

undo log (回滾日志):是采用段(segment)的方式來記錄的,每個undo操作在記錄的時候占用一個undo log segment,為什么會在資料更改操作的時候,記錄了相對應的undo log呢?其目的在于:

  • 為了保證資料的原子性,記錄事務發生之前的一個版本,用于回滾,
  • 通過mvcc+undo log實作innodb事務可重復讀和讀取已提交隔離級別,

其中,undo log分為:

  • insert undo loginsert操作中產生的undo log
  • update undo log: 對deleteupdate操作產生的undo log

資料更改的undo log怎么記錄的呢?

因為insert操作的記錄,只對事務本身可見,對其他事務不可見,故該undo log可以在事務提交后直接洗掉,不需要進行purge操作,

Delete操作在事務中實際上并不是真正的洗掉掉資料行,而是一種Delete Mark操作,在記錄上標識Delete_Bit,而不洗掉記錄,是一種"假洗掉",只是做了個標記,真正的洗掉作業需要后臺purge執行緒去完成,

update分為兩種情況:update的列是否是主鍵列,

  • 如果不是主鍵列,在undo log中直接反向記錄是如何update的,即update是直接進行的,
  • 如果是主鍵列,update分兩部執行:先洗掉該行,再插入一行目標行,

insert undo log不同的,update undo log日志,當事務提交的時候,innodb不會立即洗掉undo log, 會將該事務對應的undo log放入到洗掉串列中,未來通過purge執行緒來洗掉,

因為后續還可能會用到undo log,如隔離級別為repeatable read時,事務讀取的都是開啟事務時的最新提交行版本,只要該事務不結束,該行版本就不能洗掉(即undo log不能洗掉),且undo log分配的頁可重用減少存盤空間和提升性能,

Note: purge執行緒兩個主要作用是:清理undo頁和清除page里面帶有Delete_Bit標識的資料行,

接著我們來看看事務的隔離性,看看事務有哪些隔離級別,而且事務并發中會產生什么問題,


隔離性(Isolation)

隔離性(Isolation),是指事務內部的操作與其他事務是隔離的,并發執行的各個事務之間不能互相干擾 ,一個事務所操作的資料在提交之前,對其他事務的可見性設定(一般是不可見),

事務隔離級別

而且資料庫為了在并發下有效保證讀取資料正確性,資料庫提供了四種事務隔離級別>,分別為:

  • 讀未提交(臟讀):允許讀取尚未提交的資料,允許臟讀
  • 讀已提交( 不可重復讀 ):允許讀取事務已經提交的資料
  • 可重復讀( 幻讀 ):在同一個事務內的查詢結果都是和事務開始時刻查詢一致的( InnoDB默認級別 )
  • 串行化:所有事務逐個依次執行, 每次讀都需要獲得表級共享鎖,讀寫相互都會阻塞

其中,不同的隔離級別可能會存在在不同并發問題>,主要并發問題包括:

  • 資料丟失: 兩個或多個事務操作相同資料,基于最初選定的值更新該行時,由于每個事務都不知道其他事務的存在,就會發生丟失更新問題——最后的更新覆寫了其他事務所做的更新
  • **臟讀:**讀到了其他事務還未提交的資料,事務A讀取了事務B更新的資料,然后B回滾操作,那么A讀取到的資料是臟資料

  • **不可重復讀(重點是修改):**在一個事務中,先后進行兩次相同的讀取,由于另一個事務修改了資料,導致前后兩次結果的不一致,事務A多次讀取同一資料,事務B在事務A多次讀取的程序中,對資料作了更新并提交,導致事務A多次讀取同一資料時,結果不一致,

  • 幻讀(重點是新增、洗掉): 在一個事務中,先后進行兩次相同的讀取(一般是范圍查詢),由于另一個事務新增或洗掉了資料,導致前后兩次結果不一致

不可重復讀和幻讀的區別?

不可重復讀和幻讀最大的區別,就在于如何通過鎖機制來解決他們產生的問題,

使用鎖機制來實作這兩種隔離級別,在可重復讀中,相同sql第一次讀取到資料后就將這些資料加鎖,其它事務無法更新操作這些資料來實作可重復讀了隔離,

但這種處理方式卻無法鎖住insert的資料,因此會出現當事務A先前讀取了資料,事務B再insert資料提交,結果發現事務A就會發現莫名其妙多了些資料,這就是幻讀,不能通過行鎖來避免 ,

了解了并發問題后,來看看不同的隔離級別可能會存在在不同并發問題:

事務隔離級別臟讀不可重復讀幻讀
讀未提交
不可重復讀
可重復讀
串行化

為了實作事務隔離,延伸出了資料庫鎖,其中,innodb事務的隔離級別是由鎖機制和MVCC(多版本并發控制)來實作的

那我們來先看看鎖的原理,怎么使用鎖來實作事務隔離的呢?

鎖機制

鎖機制的基本作業原理,事務在修改資料之前,需要先獲得相應的鎖;獲得鎖之后,事務便可以修改資料;該事務操作期間,這部分資料是鎖定的,其他事務如果需要修改資料,需要等待當前事務提交或回滾后釋放鎖,

MySQL主要分成三種型別(級別)的鎖機制:

  • 表級鎖:最大顆粒度的鎖機制,鎖定資源爭用的概率也會最高 ,并發度最低 ,但開銷小,加鎖快,不會出現死鎖,

  • 行級鎖:最大顆粒度的鎖機制很小, 發生鎖定資源爭用的概率也最小,能夠給予應用程式盡可能大的并發處理能力而提高一些需要高并發應用系統的整體性能 ,但 開銷大,加鎖慢;會出現死鎖 ,

  • 頁級鎖: 開銷和加鎖時間界于表鎖和行鎖之間;會出現死鎖;鎖定粒度界于表鎖和行鎖之間,并發度一般

而且不同的存盤引擎支持不同的的鎖機制,主要分析一下InnoDB鎖,

InnoDB鎖

InnoDB實作了以下兩種型別的行鎖

  • 共享鎖(S鎖、行鎖):多個事務對同一資料行可以共享一把鎖,只能讀不能修改
  • 排它鎖(X鎖、行鎖):一個事務獲取一個資料行的排它鎖,那么其他事務將不能再獲取該行的鎖(共享鎖、排它鎖), 允許獲取排他鎖的事務更新資料

對于UPDATE,DELETE,INSERT操作, InnoDB會自動給涉及及資料集加排他鎖(X);對于普通SELECT陳述句,InnoDB不會加任何鎖,

而且因為InnoDB引擎允許行鎖和表鎖共存,實作多粒度鎖機制,使用意向鎖實作表鎖機制,

  • 意向共享鎖(IS鎖、表鎖):當事務準備給資料行加共享鎖時,會先給加上一個意向共享鎖,意向共享鎖之間是兼容的
  • 意向排它鎖(IX鎖、表鎖):當事務準備給資料行加排它鎖時,會先給表加上一個意向排它鎖,意向排它鎖之間是兼容的

意向鎖(IS、IX)是InnoDB資料操作之前自動加的,不需要用戶干預,它的意義在于:當事務想去進行鎖表時,可以先判斷意向鎖是否存在,存在時則可快速回傳該表不能啟用表鎖,否則就需要等待,

其中,四種鎖的兼容性如下

當前鎖模式/是否兼容/請求鎖模式XIXSIS
X沖突沖突沖突沖突
IX沖突兼容沖突兼容
S沖突沖突兼容兼容
IS沖突兼容兼容兼容

如果一個事務請求的鎖模式與當前的鎖兼容,InnoDB就請求的鎖授予該事務;反之,如果兩者兩者不兼容,該事務就要等待鎖釋放,

InnoDB行鎖

InnoDB的行鎖是通過給索引上的索引項加鎖來實作的,只有通過索引檢索資料,才能使用行鎖,否則將使用表鎖(鎖住索引的所有記錄)

臨鍵鎖(next-key),可以防止幻讀,根據索引,劃分為一個個左開右閉的區間,當進行范圍查詢的時候,若命中索引且能夠檢索到資料,則鎖住記錄所在的區間和它的下一個區間,

其實,臨鍵鎖(Next-Key)=記錄鎖(Record Locks)+間隙鎖(Gap Locks)

  • 當我們用范圍條件檢索資料而不是相等條件檢索資料,并請求共享或排他鎖時,InnoDB會給符合范圍條件的已有資料記錄的索引項加鎖;對于鍵值在條件范圍內但并不存在的記錄,叫做間隙(GAP),
  • 當使用唯一索引,且記錄存在的精準查詢時,使用Record Locks記錄鎖

具體的使用體現在哪里呢?如下圖所示:

  • 范圍查詢,記錄存在
  • 當記錄不存在(不論是等值查詢,還是范圍查詢)時,next-key將退化成Gap Lock(間隙鎖)
  • 當條件是精準匹配(即為等值查詢時)且記錄存在時,并且是唯一索引,臨鍵鎖(Next-Key)退化成Record Lock(記錄鎖)
  • 當條件是精準匹配(即為等值查詢時)且記錄存在,但不是唯一索引時,臨鍵鎖(Next-Key)會有精準值的資料會增加Record Lock(記錄鎖)和精準值前后的區間的資料會增加Gap Lock(間隙鎖)

如何使用鎖解決并發問題

利用鎖解決臟讀、不可重復讀、幻讀

  • X鎖解決臟讀

  • S鎖解決不可重復讀

  • 臨鍵鎖解決幻讀

Multiversion concurrency control (MVCC 多版本并發控制)

InnoDBMVCC是通過在每行記錄后面保存兩個隱藏的列來實作的,一個保存了行的事務ID(事務ID就會遞增 )一個保存了行的回滾段的指標

每開始一個新的事務,都會自動遞增產 生一個新的事務id,事務開始時刻的會把事務id放到當前事務影響的行事務id中,而DB_ROLL_PTR表示指向該行回滾段的指標,該行記錄上所有版本資料,在undo中都通過鏈表形式組織,該值實際指向undo中該行的歷史記錄鏈表,

在并發訪問資料庫時,對正在事務中的資料做MVCC多版本的管理,以避免寫操作阻塞讀操作,并且會通過比較版本解決幻讀

而且MVCC只在REPEATABLE READREAD COMMITIED兩個隔離級別下才會作業,其中,MVCC實作實質就是保存資料在某個時間點的快照來實作的, 那哪些操作是快照讀?

快照讀和當前讀

快照讀,innodb快照讀,資料的讀取將由 cache(原本資料) + undo(事務修改前的資料) 兩部分組成

  • 普通的select,比如 select * from table where ?;

當前讀,SQL讀取的資料是最新版本,通過鎖機制來保證讀取的資料無法通過其他事務進行修改

  • UPDATE

  • DELETE

  • INSERT

  • SELECT … LOCK IN SHARE MODE

  • SELECT … FOR UPDATE

    其中當前讀中,只有SELECT … LOCK IN SHARE MODE對讀取記錄加S鎖 (共享鎖)外,其他的操作,都加的是X鎖 (排它鎖),

那么在RR隔離級別下,MVCC具體是如何操作的,

RR隔離級別下,MVCC具體操作

SELECT操作,InnoDB遵循以后兩個規則執行:

  1. InnoDB只查找版本早于當前事務版本的資料行(即行的事務編號小于或等于當前事務的事務編號),這樣可以確保事務讀取的行,要么是在事務開始前已經存在的,要么是事務自身插入或者修改過的記錄,
  2. 行的洗掉版本要么未定義,讀取到事務開始之前狀態的版本>,這可以確保事務讀取到的行,在事務開始之前未被洗掉.只有同時滿足的兩者的記錄,才能回傳作為查詢結果.

INSERTInnoDB為新插入的每一行保存當前事務編號作為行版本號

DELETEInnoDB為洗掉的每一行保存當前事務編號作為行洗掉標識

UPDATEInnoDB為插入一行新記錄,保存當前事務編號作為行版本號,同時保存當前事務編號到原來的行作為行洗掉標識>,

保存這兩個額外系統版本號,使大多數讀操作都可以不用加鎖,這樣設計使得讀資料操作很簡單,性能很好,并且也能保證只會讀取到符合標準的行,不足之處是每行記錄都需要額外的存盤空間,需要做更多的行檢查作業,以及一些額外的維護作業,

分析完了原子性和隔離性,我們繼續看看事務的持久性,

持久性(Durability)

持久性(Durability):事務提交之后,所做的修改就會永久保存,不會因為系統故障導致資料丟失,

而且其實作的關鍵在于redo log, 在執行SQL時會保存已執行的SQL陳述句到一個指定的Log檔案,當執行recovery時重新執行redo log記錄的SQL操作,

那么redo log如何實作的呢?

redo log

當向資料庫寫入資料時,執行程序會首先寫入Buffer Pool,Buffer Pool中修改的資料會定期重繪到磁盤中(這一程序稱為刷臟),這整一程序稱為redo log,redo log 分為:

  • Buffer Pool記憶體中的日志緩沖(redo log buffer),該部分日志是易失性的;
  • 磁盤上的重做日志檔案(redo log file),該部分日志是持久的,

Buffer Pool的使用可以大大提高了讀寫資料的效率,但是也帶了新的問題:如果MySQL宕機,而此時Buffer Pool中修改的資料在記憶體還沒有重繪到磁盤,就會導致資料的丟失,事務的持久性無法保證,

為了確保事務的持久性,在當事務提交時,會呼叫fsync介面對redo log進行刷盤, (即redo log buffer寫日志到磁盤的redo log file中 ),重繪頻率由 innodb_flush_log_at_trx_commit變數來控制的:

  • 0 : 每秒重繪寫入到磁盤中的,當系統崩潰,會丟失1秒鐘的資料 ;
  • 1: 事務每次提交都寫入磁盤;
  • 2:每秒重繪寫入到磁盤中的,但跟0是有區別的,

redo log有更加詳細的解讀,后續有時間再補上,到現在為止,已經將事務三個特性都理解了,那事務一致性呢?


一致性(Consistency)

一致性(Consistency):事務不能破壞資料的完整性和業務的一致性 :

  • 資料的完整性: 物體完整性、列完整性(如欄位的型別、大小、長度要符合要求)、外鍵約束等

  • 業務的一致性:例如在銀行轉賬時,不管事務成功還是失敗,雙方錢的總額不變,

那是如何保證資料一致性的?

其實資料一致性是通過事務的原子性、持久性和隔離性來保證的

  • 原子性:陳述句要么全執行,要么全不執行,是事務最核心的特性,事務本身就是以原子性來定義的;實作主要基于undo log
  • 持久性:保證事務提交后不會因為宕機等原因導致資料丟失;實作主要基于redo log
  • 隔離性:保證事務執行盡可能不受其他事務影響;InnoDB默認的隔離級別是RR,RR的實作主要基于鎖機制(包含next-key lock)、MVCC(包括資料的隱藏列、基于undo log的版本鏈、ReadView)

總結

其中要同時滿足ACID特性,這樣的事務少之又少,實際中很多例子都只是滿足一些特性,比如:

  • MySQL的NDB Cluster事務不滿足持久性和隔離性;
  • InnoDB默認事務隔離級別是可重復讀,不滿足隔離性;
  • Oracle默認的事務隔離級別為READ COMMITTED,不滿足隔離性

所以我們只能使用這個四個維度的特性去衡量事務的操作,

謝謝各位點贊,沒點贊的點個贊支持支持
最后,微信搜《Ccww技術博客》可觀看更多文章

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/179184.html

標籤:區塊鏈

上一篇:SQL相關指令整理

下一篇:學習記錄

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more