`

eos multi_index

    博客分类:
  • EOS
 
阅读更多
EOS的数据库就是chainbase,而调用数据库服务的C++的API是由eosio::multi_index负责的

eosio::multi_index是基于boost::multi_index库改进的,它提供了针对不同类型索引对象的迭代器Multi-Index Iterators.
1.每一个multi_index的表对象都必须包含一个uint64类型的主键,同时每张表都必须包含一个常量函数primary_key()用于获得主键
2.multi_index支持额外16个二级索引,这些二级索引的类型可以是uint64,uint128,uint256,double或long double

一个multi_index的表需要三个参数
1.表名
2.表内存储数据类型(包括数据结构,都可以自定义,要包含主键)
3.索引(指的是二级索引,同样定义在对象数据中,并且包含get该索引的函数)

API
1.multi_index(uint64_t code,uint64_t scope):构建一个multi_index表的实例
2.get_code():获取code成员值,当前table的拥有者
3.get_scope():获取scope成员值,当前table的接收者范围
4.begin()/end(),iterator,const_iterator:返回当前table最小(大)主键对应的值,即最前对象(end批向最后对象的后一个位置,如果=end(),则证明在迭代器对象中不存在目标对象)
5.cbegin()/cend(),const_iterator:无条件返回一个常量迭代器对象
6.cbegin()/cend(),const reverse iterator:返回常量倒转迭代器对象
7.rbegin()/rend(),reverse iterator:返回倒转迭代器对象
8.lower_bound(uint64_t primary):设置主键(或二级索引)最小边界值,返回大于或等于该值的迭代器.若未查到则返回-1
9.upper_bound(uint64_t primary):设置最大值,存在则返回小于或等于该值的迭代器,查找不存在则返回大于该值的迭代器,如果在最后则返回-1
10.available_primary_key():返回一个可用主键,当table新增一条数据时,需要设置主键的值,通过该函数返回一个自增的主键id,不可重复
11.get_index<N(secondary indexName>():返回一个二级索引,可通过名字类型指定某个二级索引
12.iterator_to(const T & obj):返回一个给定对象引用的迭代器
13.emplace(uint64_t payer,Lambda && constructor):table新增一条数据.第一个参数是为新增数据的空间资源及其他开销的付费者;第二个参数为新增数据的对象内容,是一个当场初始化创建一个对象的Lambda函数
a.在multi_index中创建一个新对象,对象指定一个唯一主键,对象被序列化写入table,如果不存在,则先创建表
b.二级索引更新引用新添加的对象,如果不存在,则先创建二级索引,返回一个主键迭代器指向新创建的对象
14.Modify(const_iterator itr,uint64_ payer,Lambda && updater):修改table中的一条对象数据.第一个参数是指向需要更新的对象迭代器,第二个参数是开销付费者,第三个参数是目标对象内容的Lambda函数
a.修改后的对象会替代现有的
b.二级索引会更新,主键不发生更新
c.如果原对象的付款者与更新对象的付款者是同一个账户,则仅向差异化开销付费;如果更新后所占空间变小,则还会退款
d.如果付款者不同,则退还空间开销到原对象的付款账户
15.get(uint64_t primary):返回一个常量,包含特定主键对应table中的对象的引用.除根据主键查找外,还可以通过指定二级索引进行查找
16.find(uint64_t primary):返回一个迭代器,包含与传入值相等的主键的对象.除根据主键查找外,还可以通过指定二级索引进行查找
17.erase(const_iterator itr):传入一个迭代器,指向待删除的对象.通过该对象的主键从table中删除对象.
a.对象从表中删除,所有相关存储资源被回收
b.表中二级索引会更新
c.原对象付款者会被退还空间开销
分享到:
评论

相关推荐

    eos开发中的联合主键使用

    EOS提供两种类型的主键:`uint64_t`(单主键)和`multi_index`(多主键,包括联合主键)。在这里,我们使用`multi_index`来设置联合主键: ```cpp EOSIO_TABLE(Account, id) { uint64_t id; name username; ...

    《玩转EOS智能合约.doc》详细介绍了对EOS智能合约从部署到使用。

    3、Multi_index定义,建立数据表 4、实例化multi_index 5、操作数据,增删改查 #玩转table表 1、Table表producers 2、Table表global 3、Table表voters 4、Table表rammarket (获取RAM实时价格) 5、Table表...

    EOS合约token篇

    代码层面详解eosio.token合约,并对用到的multi-index数据库首先进行了解读。token合约的中用到的各种数据结构,以及create、issue、transfer、sub_balance、add_balance都有详细解读。

    eos-contracts:Eos合约演示

    EOS的数据库模型支持多种类型的数据结构,如tables、multi-index tables等。在这个合约中,可能包括创建、更新和查询用户账户的时刻记录。例如,合约可能定义了一个表来存储用户的特定时刻,如生日、纪念日等,并...

    The Art of Assembly Language Programming

    You are visitor as of October 17, 1996. The Art of Assembly Language Programming &lt;br&gt;Forward Why Would Anyone Learn This Stuff? 1 What's Wrong With Assembly Language 2 What's Right With ...

Global site tag (gtag.js) - Google Analytics