主頁 > 區塊鏈 > 作為資料庫核心成員,如何讓淘寶不卡頓?

作為資料庫核心成員,如何讓淘寶不卡頓?

2020-10-02 07:17:37 區塊鏈

簡介:TDDL(Tabao Distributed Data Layer)是淘寶開源的一個用于訪問資料庫的中間件,集成了分庫分表,主備,讀寫分離,權重調配,動態資料庫配置等功能,本文以2007年TDDL初誕生時的視角,介紹TDDL是如何一步步設計成型的,希望能幫助同學們簡單識訓:常規資料庫效率問題解決思路、TDDL框架設計基本思路以及分布式資料庫設計思路等,

image.png

時間倒轉穿越回2007年年底

一覺醒來,我還是照常去上班,走到西溪濕地附近,馬路沒有,高樓沒有,有的是小山坡和金色的稻田,一番打聽之后,才知道此時沒有什么西溪園區,沒辦法,硬著頭皮去濱江上班,一刷卡,才發現我并不是我,我現在的身份是淘寶資料庫團隊的核心成員,

此時全國上下在迎接著奧運的到來,一片祥和,淘寶網成交額突破400億,榷訓用戶達1000萬,工程師們都非常興奮,磨刀霍霍,但是也遇到了棘手的問題,

一 分析當前的現狀

1.1 現有業務背景

  • 淘寶網給中國市場提供了全新的購物形式,在互聯網的大潮下,用戶暴增,成交量暴增,公司持續飛速增長,
  • 截止2007年,淘寶網成交額突破400億,榷訓用戶達1000萬,
  • 全天有1000萬用戶訪問淘寶,而絕大多數用戶都是在網上逛,什么也不買,

1.2 當前的問題

1.2.1 用戶體驗與反饋

用戶普遍反饋逛淘寶卡頓,操作延遲特別明顯,

1.2.2 分析核心原因

  • 大量的用戶在瀏覽商品,并不下單,這個人數和場景的比例有20:1,
    • 說明:資料庫模式事務,寫操作會對表或者行加寫鎖,阻塞讀操作,
  • 業務資料集中在一張表里,如user表,一張表里資料破幾千萬,查詢一條資料需要好幾秒(單表資料量太大),
    • 說明:一張表資料提升,必然會導致檢索變慢, 這是必然事實,不論如何加索引或者優化都無法解決的,
  • 所有表集中在一個庫里,所有庫集中在一個機器里,資料庫集中在一臺機器上,動不動就說硬碟不夠了(單機單庫),
    • 說明:所有業務共用一份物理機器資源,機器存在瓶頸:磁盤和CPU不夠用且后期拓展性不佳,

1.2.3 總結問題

  • 20:1讀寫比例場景,
  • 單表單庫資料量太大,
  • 小型機與單機場景,抗不住當前規模,

image.png

二 我要做什么?

  • 如何滿足當前每天1000萬用戶逛淘寶的需求,且用戶體驗好(最基本要求:回應快),
  • 如何滿足未來有上億用戶的訪問,甚至是同時訪問,且用戶體驗好(最基本要求:回應快),

高筑墻,廣積糧,積極做好準備,

提煉核心:

  • 提高資料庫操作速度,
  • 同時能應對未來規模變化,

三 我能做什么?

為實作以上兩大目標,我能做什么?

3.1 提高資料庫操作速度,通用方法

提煉常見的通用方法:

sql優化

  • 排除語法問題,爛sql
  • 下推優化

下推的目的:提前過濾資料 -> 減少網路傳輸、并行計算,

  • 提前過濾資料
  • 小表驅動大表等

建立索引

  • 查詢頻率高的熱點欄位
  • 區分度高的(DISTINCT column_name)/COUNT(),以主鍵為榜樣(1/COUNT())
  • 長度小
  • 盡量能覆寫常用查詢欄位
  • 注意索引失效的場景

分庫分表

  • 垂直分庫分表
  • 水平分庫分表

讀寫分離

快取的使用

等等,

3.2 如何應對未來的持續變化?

必須支持動態擴容,

必須走分布式化路線,百分百不動搖,

3.3 結合定位,分析自己能做的

3.3.1 分析我們的架構定位

(1)大前提

  • 我們要做通用型框架,不參與業務,
  • 從軟體設計原則出發,開閉原則:對擴展開放,對修改關閉,

說明:大修改就意味著不穩定,因此:我們要做到盡可能少的修改原來的代碼,在程式需要進行拓展的時候,不能去修改原有的代碼,實作一個熱插拔的效果,

(2)當前架構現狀

淘寶網主要使用hibernate/ibatis傳統框架:

image.png

(3)分析我們的架構定位

淘寶資料庫團隊當時使用映射框架(hibernate/ibatis)作為資料庫互動入庫,為了不讓他們修改代碼,那我們只能在ibatis/hibenate這類映射框架之下,

同時jdbc是與底層資料庫互動的Java資料庫連接驅動程式,是基礎能力,我們要使用它,而不是改造它,

結論:我得把TDDL安插于ibatis/jdbc之間,于是有了第一張架構圖:

image.png

3.4 總結,我們能做什么?

image.png

結合我們的目標,通用方法,大前提以及架構定位,分析下我們能做和不能做的,

不能做的:

  • 索引,因為這個是設計階段,強業務相關,與大前提沖突:我們不參與業務,

能做的:

  • 語法優化
    • 排除sql問題
    • 下推優化
  • 分表分庫(自動水平分表,水平分庫)
    • 讀寫分離(讀寫分離/分布式化與動態擴容)

四 我們如何做?

4.1 語法優化

為達到語法優化的目的,我們需要具備什么能力?

簡單來說:

  • 我們需要認識這個別人提交給我的sql,
  • 我能拆解sql,
  • 優化與重組這個sql,

image.png

專業點來說:語意分析能力,

  • sql決議
  • sql規則制定
  • sql優化
  • sql重組

image.png

因此:我們需要設計一個sql決議器,sql優化器,

4.1.1 決議器

決議器的核心是詞法分析、語法語意分析,也就是說來了一條 select/update/insert/delete陳述句,你能認識它,而且你知道下一步該怎么處理,同時為后面的優化器打下基礎,

核心:將sql決議為一棵語法樹,

例:

SELECT id, member_id FROM wp_image WHERE member_id = ‘123’

image.png

sql語法樹:

image.png

4.1.2 優化器

核心:

  • 在sql決議成sql語法樹后,使用sql優化規則(1. 語法優化 2. 下推優化), 通過對樹進行左旋,右旋,洗掉子樹來對語法樹進行重構sql語法樹,
  • 將重構的語法樹進行遍歷得到優化后的sql,

(1)語法優化

  • 函式提前計算
a. id = 1 + 1  => id = 2
  • 判斷永真/永假式
1 = 1 and id = 1 => id = 1
0 = 1 and id = 1 => 空結果
  • 合并范圍
id > 1 or id < 5 => 永真式
id > 1 and id = 3 => id = 3
  • 型別處理
id = ‘1’  => id為數字型別,自動Long.valueof(1)
create=‘2015-02-14 12:12:12’ => create為timestamp型別,決議為時間型別

(2)下推優化

  • Where條件下推
select from (A) o where o.id = 1
=>
select from (A.query(id = 1))

說明:提前條件過濾,提前獲取資料,減少后期計算/IO/網路成本,

  • JOIN中非join列的條件下推
A join B on A.id = B.id where A.name = 1 and B.title = 2
=> 
A.query(name = 1) join B.query(title = 2) on A.id = B.id

說明:提前過濾,減輕后期join計算成本,達到“小表驅動”的目的,

  • 等值條件的推導
A join B on A.id = B.id where A.id = 1 => B.id = 1
=> 
A join B.query(B.id=1) on A.id = B.id

說明:同理,提前過濾,

4.1.3 總結

  • sql決議器
    • 負責將sql陳述句化為sql語法樹,
  • sql優化器
    • 負責將sql語法樹利用sql優化規則,重構sql語法樹,
    • 將sql語法樹轉化為sql陳述句,

image.png

4.2 分表分庫

單庫單表的問題:

幾年前,業務簡單,應用的資料比較少,表結構也不復雜,只有一個資料庫,資料庫中的表是一張完整的表,而到了今天,2007年了,業務復雜起來了,資料量爆增,單表資料破千萬甚至上億條,一條DML陳述句,死慢死慢的,這種情況下加索引已不再有顯著的效果,

這個時候,資料庫效率瓶頸不是靠加索引,sql優化能搞定的,

正確出路:分表分庫,通過將表拆分,來降低單表資料量,進而提高資料庫操作效率,

分表分為:

  • 垂直分表
  • 水平分表

分庫分為:

  • 垂直分庫
  • 水平分庫

由于TDDL不參與業務,而垂直分庫分表是強業務相關的,因此TDDL暫不參與垂直分庫分表,只在水平分庫分表方向上努力,

4.2.1 垂直分表

垂直拆分是將一張表垂直拆成多個表,往往是把常用的列獨立成一張主表,不常用的列以及特別長的列拆分成另一張拓展表,
image.png

簡單垂直分表舉例
核心要素:

  • 冷熱分離,把常用的列放在一個表,不常用的放在一個表,
  • 大欄位列獨立存放,如描述資訊,
  • 關聯關系的列緊密的放在一起,

它帶來的提升是:

  • 為了避免IO爭搶并減少鎖表的幾率,查看詳情的用戶與商品資訊瀏覽互不影響,
  • 充分發揮熱門資料的操作效率,商品資訊的操作的高效率不會被商品描述的低效率所拖累,

4.2.2 水平分表

水平分表是在同一個資料庫內,把同一個表的資料按一定規則拆到多個表中,

image.png

簡單點的技巧:按照列舉型別區分,

作用總結:

  • 庫內的水平分表,解決了單一表資料量過大的問題,分出來的小表中只包含一部分資料,從而使得單個表的資料量變小,提高檢索性能,
  • 避免IO爭搶并減少鎖表的幾率,

4.2.3 垂直分庫

垂直分庫是指按照業務將表進行分類,分布到不同的資料庫上面,每個庫可以放在不同的服務器上,它的核心理念是專庫專用,
image.png

作用總結:

  • 解決業務層面的耦合,業務清晰,
  • 高并發場景下,垂直分庫一定程度的提升IO、資料庫連接數、降低單機硬體資源的瓶頸,
  • 能對不同業務的資料進行分級管理、維護、監控、擴展等,
  • 垂直分庫通過將表按業務分類,然后分布在不同資料庫,并且可以將這些資料庫部署在不同服務器上,從而達到多個服務器共同分攤壓力的效果,但是依然沒有解決單表資料量過大的問題,

4.2.4 水平分庫(TDDL 核心)

水平分庫是把同一個表的資料按一定規則拆到不同的資料庫中,每個庫可以放在不同的服務器上,

image.png

作用總結:

  • 解決了單庫單表資料量過大的問題,理論上解決了高并發的性能瓶頸,

水平分庫核心要解決的問題:

  • 如何知道資料在哪個庫里?- 路由問題
  • 結果合并
  • 全域唯一主鍵ID
  • 分布式事務(暫時不支持)

4.2.5 水平分庫——問題解決

(1)自動路由演算法

sql轉發:在水平拆分后,資料被分散到多張表里,原來的一個sql需要拆解,進行轉發路由,

例:

select * from tb1 where member_id in ('test1234', 'pavaretti17', 'abcd');
=>
select * from tb1 where member_id in ('test1234', 'pavaretti17', 'abcd');
select * from tb1 where member_id in ('abcd');

image.png

其中拆分和尋找的演算法:怎么知道對應哪個表?即自動路由演算法,常見的有:固定哈希演算法和一致性哈希演算法,

a)固定哈希演算法

image.png

b)一致性哈希演算法

一致性哈希演算法在1997年由麻省理工學院提出,是一種特殊的哈希演算法,目的是解決分布式快取的問題,

一致性哈希演算法的優勢:

  • 極好的應對了服務器宕機的場景,
  • 很好的支持后期服務器擴容,
  • 在引入虛擬節點后:能很好的平衡各節點的資料分布,

由于一致性哈希演算法的優勢,此演算法幾乎是所有分布式場景下使用的方案,包括mysql的分布式、redis的分布式等,

image.png

(2) 結果合并

image.png

升華:引入fork-Join,提升操作速度(多執行緒并發重點場景,代碼中也很常用哦),

  • 任務拆分
  • 多路并行操作
  • 結果合并

image.png

(3)全域唯一主鍵

演算法:基于資料庫更新+記憶體分配,在資料庫中維護一個ID,獲取下一個ID時,會對資料庫進行ID=ID+100 WHERE ID=XX,拿到100個ID后,在記憶體中進行分配,

  • 優勢:簡單高效,
  • 缺點:無法保證自增順序,

例:

水平分庫分表:一拆三場景,
主鍵分隔值:1000,
  • 表1新增一條資料,于是給表1分配1000個主鍵ID, 直到它用完,
  • 同理,表2、表3在新增資料時,也給它們分配1000個主鍵ID,直到它用完,
  • 當它們的1000個主鍵ID用完后,繼續給它們分配1000個即可,
  • 重復下去,可保證各庫表上的主鍵不重疊,唯一,

image.png

這種產生全域唯一id的方式相當有效,保證基本的全域唯一特性和高性能的同時,可以對生成id的資料庫分機架分機房部署達到容災的目的,

4.2.6 分表分庫總結

image.png

架構師角度:

  • 優先考慮快取降低對資料庫的讀操作,
  • 再考慮讀寫分離,降低資料庫寫操作,
  • 最后開始資料拆分,切分模式:首先垂直(縱向)拆分、再次水平拆分,
    • 首先考慮按照業務垂直拆分,
    • 再考慮水平拆分:先分庫(設定資料路由規則,把資料分配到不同的庫中),
  • 最后再考慮分表,單表拆分到資料1000萬以內,

個人開發角度:

  • 優先使用分表分庫框架(直接使用),
  • 優先考慮快取降低對資料庫的讀操作,
  • 自己垂直分表,
  • 自己水平分表,

之所以先垂直拆分才水平拆分,是因為垂直拆分后資料業務清晰而且單一,更加方便指定水平的標準,

4.3 分布式化

分布式化是大潮,是大規模服務器最后都要走的一步,
image.png

4.3.1 讀寫分離

設計讀寫分離的資料庫,有兩大意義:

  • 主從只負責各自的寫和讀,極大程度的緩解X鎖和S鎖的競爭,
  • 從庫可配置myisam引擎,提升查詢性能以及節約系統開銷,

說明:myisam查詢效率高于默認的innodb效率,參考:myisam和innodb的區別,

image.png

核心問題:

  • 資料的備份同步問題:參考4.4.3,
  • 讀寫比例支持動態設定:結合業務,如淘寶可設定為20:1,

4.3.2 容災

主備倒換:提高可靠性 > 應對個別資料庫宕機場景,尤其主庫宕機,
image.png

說明:DB2主庫宕機后,自動將主庫轉為DB3,

核心問題:

  • 資料的備份同步問題:binlog 參考4.4.3,
  • 檢測資料庫的在線狀態:心跳機制,

4.3.3 資料備份與同步

當只有單機或者一份資料時,一但資料庫出問題,那么整體服務將不可用,而且更嚴重的是會造成資料損害丟失不可逆,

在讀寫分離與主備倒換的場景下,核心要解決的是多個資料庫的資料同步與備份問題,

當前主流的是采用日志備份方式(redis也類似),

實作原理:binlog日志備份,

image.png

說明:

  • 主庫負責寫操作,在資料變更時,會寫入binlog,同時通知各從庫,
  • 從庫收到通知后,IO執行緒會主動過來讀取主庫的binlog,并寫入自己的log,
  • 寫完從庫log后,通知sql執行緒,sql執行緒讀取自己的日志,寫入從庫,

4.3.4 動態擴容

動態擴容的意義在于:隨著后期業務量增大,資料庫個數可以通過增多的方式來應對,而相對的改造代價很小,

擴容前:

image.png

擴容后:
image.png

核心內容:

  • 在添加新庫時
    • 注冊機器與庫
    • 路由演算法調整:固定哈希演算法-調整模數/一致性哈希演算法天然支持擴容
  • 可選的權重調整
    • 修改權重,資料插入偏向于新庫5,
    • 在各庫數量平衡時,觸發修改回原來平衡的權重,以保證后續的均衡分配,

五 架構成型

sql流向

下圖介紹sql從流入TDD到流入資料庫,期間TDDL各模塊對Sql的處理,

image.png

架構圖

image.png

下圖介紹了TDDL三層的位置以及作用,
image.png

核心能力圖

TDDL 核心能力,核心組建示意圖,其中標出了各模塊核心要解決功能,核心演算法等,

image.png

參考

TDDL 官方檔案
http://mw.alibaba-inc.com/products/tddl/_book/
TDD產品原理介紹
http://gitlab.alibaba-inc.com/middleware/tddl5-wiki/raw/master/docs/Tddl_Intro.ppt
TDDL(07-10年)初始版本介紹
https://wenku.baidu.com/view/9cb630ab7f1922791788e825.html
阿里云SQL調優指南
https://help.aliyun.com/document_detail/144293.html
一致性哈希演算法原理
https://www.cnblogs.com/lpfuture/p/5796398.html
TDDL初期原始碼(碼云)
https://gitee.com/justwe9891/TDDL
MyISAM與InnoDB 的區別(9個不同點)
https://blog.csdn.net/qq_35642036/article/details/82820178

原文鏈接:https://developer.aliyun.com/article/773227?

著作權宣告:本文內容由阿里云實名注冊用戶自發貢獻,著作權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任,具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》,如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻洗掉涉嫌侵權內容,

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

標籤:區塊鏈

上一篇:干貨!一文看Doris在作業幫實時數倉中的應用&實踐

下一篇:看看別人是怎么面試螞蟻金服的!社招Java面經分享

標籤雲
其他(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