概述
- multi_index是eosio上的数据库管理接口,通过eosio::multi_index智能合约能够写入、读取和修改eosio数据库的数据
- multi_index在eosio中的位置:eos/contracts/eosiolib/multi_index.hpp
- eosio::multi_index来源于boost库的boost::multi_index
- eosio::multi_index在概念上和传统数据库的“表(table)”类似,数据“行(rows)”是独立的对象(通常是class对象或struct对象),数据“列(columns)”是对象的成员属性(class或struct的成员属性)
- eosio::multi_index提供和传统数据库的“键(key)”类似的成员属性,用于快速查找对象
- eosio::multi_index支持主键(primary key),但必须是唯一的无符号64位整型(uint64_t)
- eosio::multi_index按主键排序时,使用升序
- eosio::multi_index允许使用自定义函数作为索引,但它的返回值是受限制的,只能是支持的键类型
- multi_index表允许多索引排序,最多可以使用16个二级索引
- 二级索引作为multi_index表构造函数的一部分创建,不支持直接构建
- multi_index迭代器可以双向迭代,即const_iterator或const_reverse_iterator
创建multi_index表
- 使用C++类(class)或结构体(struct)定义对象
- 在class或struct中,定义一个const成员函数:primary_key(),返回uint64_t类型的主键值
- 确定二级索引(最多支持16个),二级索引不局限于uint64_t,它支持更多类型
二级索引支持的键类型:
idx64:64位无符号整型键
idx128:128位无符号整型键
idx256:256位固定大小字典键
idx_double:双精度浮点键
idx_long_double:四倍精度浮点键
- 为每个二级索引定义extractor,即一个函数,用于从Multi-Index表的函数中获取键,这个函数会被indexed_by(后面会讲)用到
- 一个完整的multi_index表定义如下:
struct address {
uint64_t account;
string name;
uint64_t phone;
uint64_t liked;
uint64_t primary_key() const { return account; }
uint64_t get_phone() const