亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

【許曉笛】EOS 數(shù)據(jù)庫(kù)與持久化 API —— 架構(gòu)

piglei / 3079人閱讀

摘要:與數(shù)據(jù)庫(kù)交互的被官方稱為,中文可以叫做持久化。下圖為數(shù)據(jù)結(jié)構(gòu)。所有對(duì)數(shù)據(jù)的操作必須通過(guò)迭代器完成。迭代器會(huì)移動(dòng)到需要的數(shù)據(jù)對(duì)象上。相關(guān)文章和視頻推薦許曉笛數(shù)據(jù)庫(kù)與持久化實(shí)戰(zhàn)圓方圓學(xué)院匯集大批區(qū)塊鏈名師,打造精品的區(qū)塊鏈技術(shù)課程。

EOS 數(shù)據(jù)庫(kù)結(jié)構(gòu)詳解

在 EOS 中,智能合約執(zhí)行完畢后,所占用的內(nèi)存會(huì)釋放。程序中的所有變量都會(huì)丟失。如果智能合約里要持久地記錄信息,比如游戲智能合約要記錄每位用戶游戲記錄,本次合約執(zhí)行完畢后數(shù)據(jù)不能丟失,就需要將數(shù)據(jù)存儲(chǔ)到 EOS 數(shù)據(jù)庫(kù)中。與數(shù)據(jù)庫(kù)交互的 API 被官方稱為 Persistence API,中文可以叫做持久化 API。下圖說(shuō)明了 EOS 智能合約在執(zhí)行 Action 時(shí),與數(shù)據(jù)庫(kù)的交互過(guò)程。

為了方便智能合約與 EOS 數(shù)據(jù)庫(kù)的交互,EOS 仿造了 Boost 庫(kù)中的 Multi-Index Containers,開(kāi)發(fā)了 C++ 類(lèi):eosio::multi_index(以下簡(jiǎn)稱 multi_index`),中文可以叫做多索引列表類(lèi)。

multi_index 頭文件地址:
https://github.com/EOSIO/eos/...

在 EOS 見(jiàn)證人硬盤(pán)中,為每個(gè)賬戶都預(yù)留了數(shù)據(jù)庫(kù)空間(大小與代幣持有量有關(guān)),每個(gè)賬戶名下可以建立多個(gè)數(shù)據(jù)表。智能合約無(wú)法直接操作存儲(chǔ)在見(jiàn)證人硬盤(pán)中的數(shù)據(jù)表,需要使用multi_index作為中間工具(或者叫容器),每個(gè)multi_index實(shí)例都與一個(gè)特定賬戶的特定數(shù)據(jù)表進(jìn)行交互(取決于實(shí)例化時(shí)的參數(shù))。EOS智能合約與EOS數(shù)據(jù)庫(kù)的數(shù)據(jù)交互如下圖所示。

數(shù)據(jù)表

multi_index是一個(gè)非常方便的數(shù)據(jù)庫(kù)交互容器,可以存儲(chǔ)任何 C++ 數(shù)據(jù)類(lèi)型。每一個(gè)multi_index都相當(dāng)于傳統(tǒng)數(shù)據(jù)庫(kù)的一個(gè)數(shù)據(jù)表(table),但將傳統(tǒng)數(shù)據(jù)庫(kù)的行與列的形式改為了單純的列。也就是說(shuō)multi_index是一個(gè)線性排列的表,只有一列,每一行都只存儲(chǔ)一個(gè)對(duì)象。但是一般來(lái)說(shuō)multi_index存儲(chǔ)的對(duì)象都是結(jié)構(gòu)體或者類(lèi),里面含有多個(gè)成員變量,所以multi_index存儲(chǔ)數(shù)據(jù)的靈活性也是不亞于傳統(tǒng)數(shù)據(jù)庫(kù)的。

我們使用官方的“汽車(chē)維修店”示例,我們建立一個(gè)數(shù)據(jù)表,儲(chǔ)存每個(gè)汽車(chē)維修店客戶的賬戶名、保養(yǎng)時(shí)間、車(chē)輛里程。那么multi_index數(shù)據(jù)表儲(chǔ)存的項(xiàng)目中,每個(gè)都是如下的結(jié)構(gòu)體:

struct service_rec {
    uint64_t        pkey;           // 主鍵
    account_name    customer;       // 車(chē)主用戶名
    uint32_t        service_date;   // 維修保養(yǎng)時(shí)間
    uint32_t        odometer;       // 車(chē)輛里程
};

在傳統(tǒng)數(shù)據(jù)庫(kù)中,需要建立一個(gè) 4 列的數(shù)據(jù)表,用來(lái)儲(chǔ)存每個(gè)用戶的這個(gè) 4 個(gè)數(shù)據(jù),而multi_index的每個(gè)數(shù)據(jù)表只有一列,只存儲(chǔ)每個(gè)用戶的 service_rec 整個(gè)結(jié)構(gòu)體即可。下圖為multi_index數(shù)據(jù)結(jié)構(gòu)。

多索引

首先,每個(gè)數(shù)據(jù)表要有一組主鍵,主鍵必須是無(wú)符號(hào) 64 位整數(shù)類(lèi)型(64-bit integer),這就是上面的service_rec結(jié)構(gòu)體中第一個(gè)變量為uint64_t類(lèi)型的原因。在數(shù)據(jù)表中,所有的對(duì)象就是按照主鍵升序排列的,小的在前,大的在后。主鍵可以是有意義的,也可以是沒(méi)有意義的,讓系統(tǒng)產(chǎn)生一個(gè)在這個(gè)數(shù)據(jù)表中沒(méi)有被使用的主鍵即可。為了設(shè)置主鍵,我們需要在之前的service_rec結(jié)構(gòu)體添加一個(gè)叫做primary_key()的成員函數(shù)函數(shù)的返回值為主鍵。

    auto    primary_key()const { return pkey; }

這樣就將pkey這個(gè)變量設(shè)置成了主鍵。

multi_index從字面上看就是能使用多個(gè)索引的數(shù)據(jù)表。EOS 中,每個(gè)multi_index或者說(shuō)每個(gè)數(shù)據(jù)表都可以設(shè)置最多16個(gè)索引。索引相當(dāng)于使用特定的方式給數(shù)據(jù)表中的對(duì)象重新排序。比如在我們經(jīng)常使用的 windows 文件管理器中,可以按照文件名排序、按照文件修改時(shí)間排序、按照文件大小排序,這就有了3個(gè)索引。EOS 數(shù)據(jù)庫(kù)索引更加靈活,可以多帶帶按照結(jié)構(gòu)體中的某個(gè)變量索引,也可以將變量之間的運(yùn)算結(jié)果(函數(shù)輸出)進(jìn)行索引。如果我們想使用車(chē)主用戶名進(jìn)行索引,需要在結(jié)構(gòu)體中添加一個(gè)get_customer()成員函數(shù),函數(shù)的返回值為索引變量。

account_name    get_customer()const { return customer; }

這樣就將customer這個(gè)變量設(shè)置成了數(shù)據(jù)表的一個(gè)索引,下圖右側(cè)為customer索引。

迭代器

multi_index是如何操作數(shù)據(jù)表中的每個(gè)對(duì)象的呢?答案是 Iterators(迭代器)。大家可以搜索 “C++ 迭代器”或者設(shè)計(jì)模式中的“迭代器模式”來(lái)了解迭代器的設(shè)計(jì)思路。在 EOS 數(shù)據(jù)庫(kù)中,我更愿意將迭代器比喻為一個(gè)“電梯”,在整個(gè)數(shù)據(jù)表中上下穿梭。所有對(duì)數(shù)據(jù)的操作必須通過(guò)迭代器完成。典型的數(shù)據(jù)修改過(guò)程是這樣的:首先使用迭代器的find()方法,在特定的索引中尋找需要的數(shù)據(jù),比如在車(chē)主用戶名索引中尋找某個(gè)用戶。迭代器會(huì)移動(dòng)到需要的數(shù)據(jù)對(duì)象上。然后就可以使用迭代器的modify()方法修改當(dāng)前迭代器對(duì)應(yīng)的數(shù)據(jù)。下圖為迭代器指向用戶 Sue 的情況。

本篇文章介紹了 EOS 數(shù)據(jù)庫(kù)的基本結(jié)構(gòu),以后的文章會(huì)詳細(xì)介紹 EOS 數(shù)據(jù)庫(kù)使用實(shí)戰(zhàn),敬請(qǐng)期待。


相關(guān)文章和視頻推薦

【許曉笛】EOS 數(shù)據(jù)庫(kù)與持久化 API —— 實(shí)戰(zhàn)

圓方圓學(xué)院匯集大批區(qū)塊鏈名師,打造精品的區(qū)塊鏈技術(shù)課程。 在各大平臺(tái)都長(zhǎng)期有優(yōu)質(zhì)免費(fèi)公開(kāi)課,歡迎報(bào)名收看。
公開(kāi)課地址:https://ke.qq.com/course/345101? ? ?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/24412.html

相關(guān)文章

  • 曉笛EOS 數(shù)據(jù)庫(kù)久化 API —— 實(shí)戰(zhàn)

    摘要:查詢數(shù)據(jù)使用方法和其他迭代器操作查詢數(shù)據(jù)。數(shù)據(jù)庫(kù)服務(wù)的對(duì)象是維修技師和車(chē)主。如果查找成功,迭代器就會(huì)指向所需的數(shù)據(jù)對(duì)象。 EOS 數(shù)據(jù)庫(kù)開(kāi)發(fā)實(shí)戰(zhàn) 上次的文章詳細(xì)講解了 EOS 數(shù)據(jù)庫(kù)的架構(gòu),本文將以官方示例為基礎(chǔ),詳解 EOS 數(shù)據(jù)庫(kù)的開(kāi)發(fā)實(shí)戰(zhàn)。 基本步驟 在智能合約里與 EOS 數(shù)據(jù)庫(kù)交互,首先要定義存儲(chǔ)的數(shù)據(jù): 定義對(duì)象:具體就是定義一個(gè) C++ 類(lèi)或者 C++ 結(jié)構(gòu)體,數(shù)據(jù)表...

    yck 評(píng)論0 收藏0
  • 曉笛EOS 系統(tǒng)架構(gòu)圖解

    摘要:了解系統(tǒng)架構(gòu)之前我們先看看目前系統(tǒng)的主要組成部分系統(tǒng)的核心進(jìn)程,也就是所謂的節(jié)點(diǎn)。 其實(shí)沒(méi)有那么復(fù)雜 相信關(guān)心 EOS 系統(tǒng)的同學(xué)肯定見(jiàn)過(guò)下面這張藍(lán)圖。對(duì),目前只是一個(gè)藍(lán)圖,而且以 BM 的尿性,肯定在心理已經(jīng)把這張圖改的面目全非了(比如圖中的 eosd 早就改名了)。所以這張圖只能作為未來(lái) EOS 發(fā)展方向的參考而已,目前的 EOS 還遠(yuǎn)沒(méi)有這么復(fù)雜和完善。 showImg(http...

    vibiu 評(píng)論0 收藏0
  • 曉笛】聽(tīng)說(shuō)你買(mǎi)了EOS ,連代碼什么樣都不知道?

    摘要:說(shuō)點(diǎn)題外話如果你想提高英語(yǔ)的話,持有一點(diǎn)代幣吧,你會(huì)急于搞清楚白皮書(shū)在講什么,要是想短時(shí)間快速提高英語(yǔ),持有大量代幣吧,別問(wèn)我是怎么知道的。 最近發(fā)現(xiàn)很多人投資了EOS,卻并不關(guān)心 EOS 目前的開(kāi)發(fā)進(jìn)度和技術(shù)細(xì)節(jié),如果你投資了 EOS, 還有一定的技術(shù)基礎(chǔ),那就更應(yīng)該關(guān)心 EOS 的開(kāi)發(fā)情況了,下面我們就從 EOS 的源代碼說(shuō)起: Github 是目前最流行的源碼管理網(wǎng)站,無(wú)數(shù)明星項(xiàng)...

    imccl 評(píng)論0 收藏0
  • 曉笛】重新理解EOS的系統(tǒng)架構(gòu)

    摘要:所以想要實(shí)現(xiàn)真正實(shí)用的智能合約平臺(tái),就要脫離比特幣系統(tǒng)的架構(gòu),尋找新的系統(tǒng)組織形式。比特幣和以太坊之所以設(shè)計(jì)了手續(xù)費(fèi)機(jī)制,就是防止大量垃圾交易使得系統(tǒng)擁堵。 區(qū)塊鏈系統(tǒng)中,去中心化程度與效率之間天然地存在矛盾關(guān)系。 如果區(qū)塊鏈智能合約系統(tǒng)想追求類(lèi)似比特幣的去中心化程度,理論上效率就會(huì)大打折扣?,F(xiàn)實(shí)也是這樣的:比特幣每秒鐘只能處理7筆左右的交易,每一筆交易要用至少30分鐘才能確認(rèn),這種效...

    Alan 評(píng)論0 收藏0
  • 曉笛】49行代碼就能發(fā)幣?而且EOS連例子都給你了

    摘要:相關(guān)文章和視頻推薦許曉笛智能合約案例解析圓方圓學(xué)院匯集大批區(qū)塊鏈名師,打造精品的區(qū)塊鏈技術(shù)課程。 Daniel Larimer 在他的博客介紹了EOS新的智能合約架構(gòu)(EOS團(tuán)隊(duì)的開(kāi)發(fā)速度實(shí)在是太嚇人,根本追不上)。他給出了最簡(jiǎn)單的一個(gè)新幣種的智能合約代碼,僅有49行就能完成一個(gè)新幣種的開(kāi)發(fā),一個(gè)新的愛(ài)息歐就誕生了。讓我們一步一步實(shí)現(xiàn)吧。 首先實(shí)現(xiàn)私有成員,建立一個(gè) account 結(jié)...

    Freeman 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<