首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EOS技术研究:合约与数据库交互

一个action执行时会有上下文变量出现,包括事务机制处理,这些内容会应用链上分配内存资源,而如果没有持久化技术,执行超过作用域就会丢失掉这些上下文数据。...持久化技术应该包括: 记录一些状态持久化到数据库中 具备查询能力从数据库中获取内容 提供C++ API来调用这些服务,也服务于合约开发者 eosio::multi_index 这是模仿boost::...该对象需要有一个const成员作为主键,类型为uint64_t 二级主键可选,提供不同类型 为每个二级索引定义一个导出器,导出器是一个函数,可以用来从Multi_index表中获取 使用Multi-Index...code代表表拥有者,目前是current_receiver(),也可以使用contract基类构造器初始化时账户名_self,第二个参数是scope,代码层次范围标识符,这里就使用传入owner...find涉及二级索引,迭代器等操作,end判断等multi_indexapi操作没有给出具体实例,未来在其他合约使用时会直接说明。

80550

【许晓笛】EOS 数据库与持久化 API —— 架构

EOS 数据库结构详解 EOS 中,智能合约执行完毕后,所占用内存会释放。程序中所有变量都会丢失。...与数据库交互 API 被官方成为 Persistence API,中文可以叫做持久化 API。下图说明了 EOS 智能合约在执行 Action ,与数据库交互过程。...[fazjwkmd4o.png] 为了方便智能合约与 EOS 数据库交互,EOS 仿造了 Boost 库中 Multi-Index Containers,开发了 C++ 类:1eosio::multi_index...也就是说multi_index是一个线性排列表,只有一列,每一行都存储一个对象。...所有对数据操作必须通过迭代器完成。典型数据修改过程是这样:首先使用迭代器find()方法,特定索引中寻找需要数据,比如在车主用户名索引中寻找某个用户。迭代器会移动到需要数据对象上。

95740
您找到你想要的搜索结果了吗?
是的
没有找到

【刘文彬】EOS技术研究:合约与数据库交互

一个action执行时会有上下文变量出现,包括事务机制处理,这些内容会应用链上分配内存资源,而如果没有持久化技术,执行超过作用域就会丢失掉这些上下文数据。...持久化技术应该包括: 记录一些状态持久化到数据库中 具备查询能力从数据库中获取内容 提供C++ API来调用这些服务,也服务于合约开发者 eosio::multi_index 这是模仿boost::...该对象需要有一个const成员作为主键,类型为uint64_t 二级主键可选,提供不同类型 为每个二级索引定义一个导出器,导出器是一个函数,可以用来从Multi_index表中获取 使用Multi-Index...code代表表拥有者,目前是current_receiver(),也可以使用contract基类构造器初始化时账户名_self,第二个参数是scope,代码层次范围标识符,这里就使用传入owner...通过multi_index进行curd一个例子(第一个例子是官方文档给出,其中内容有bug)。

48020

【许晓笛】EOS 数据库与持久化 API —— 实战

定义索引:EOS 数据表不光可以按照主键搜索数据,还可以定义多达 16 种索引。而且索引(Key)不止支持64位无符号整数,还支持 128、256位整数以及双精度、四精度浮点数。...为每个索引定义提取器(key extractor)。 存储数据定义好之后,就可以与数据库交互了: 建立数据表:实例化 multi_index,建立数据表。...增删数据:使用emplace方法表中添加数据;使用erace方法删除数据。 修改数据:使用modify方法修改数据。 查询数据:使用get、find方法和其他迭代器操作查询数据。...顾客账户:存储每次维修服务顾客账户名。 维修日期:每次维修服务日期。 车辆里程:每次服务,车辆里程信息。 我们还想方便查询每个顾客维修记录,所以需要一个以顾客账户名为(Key)索引。...也可以修改其中部分变量。

72730

深入分析MySQL行锁加锁规则

1.3 范围查询记录存在索引什么位置加什么锁?为什么? 1.4 范围查询记录不存在索引什么位置加什么锁?为什么?...2.3 范围查询记录存在索引什么位置加什么锁?为什么? 2.4 范围查询记录不存在索引什么位置加什么锁?为什么?...这一块情况可能比较复杂,出现了不同MySQL版本对锁实现不同情况,建议读者一定要动手实践, 1.4 范围查询记录不存在索引什么位置加什么锁?...这里可以得出结论:查询条件是唯一索引,如果查询条件是范围查询且记录存在,唯一索引上,会对查询到记录加邻锁,对剩余未加锁间隙下一条记录加邻锁(这里和上面1.3不太一样,不会退化成间隙锁);主键索引上...这里可以得出结论:查询条件是唯一索引,如果查询条件是范围查询且记录不存在,唯一索引上,会对查询条件所在间隙下一条记录加邻锁;主键索引上不加锁。

1.7K40

py学习(流程控制语句和组合数据类型)

• 条件判断语句(if语句) • 语法 : if 条件表达式 : 语句(代码块) • 执行流程 :if语句执行时,会对条件表达式进行求值判断,如果为true,则执行if后语句;如果为false,...,None,[1,2,3],print] • 列表中对象会按照插入顺序存储到列表中, • 第一个插入对象保存到第一个位置,第二个保存到第二个位置 • 我们可以通过索引(index)开获取列表中元素...• 索引元素列表中位置,列表中每一个元素都有索引索引是从0开始整数,列表中第一个位置索引为0,第二个位置索引为1…… • My_list=[10,20,30,40,50] • 通过索引获取列表中元素...+1 • 切片 • 切片指从现有列表中,获取一个子列表 • 列表索引可以是负数 • 如果索引是负数,则从后向前获取元素,-1表示倒数第一个,-2表示倒数第二个,以此类推 • 通过切片来获取指定元素 •...Del mylist[0 :2] • Mylist[ 1:3] =[] • 以上操作适用于可变序列 • 不可变序列,无法通过索引修改 • 可以通过list()函数将其他序列转换为list • 列表方法

1.6K20

图解: EXPLAIN 实战-1

id为1table表名为,表示是一张派生表,派生表从id为2执行过程中来 UNION:UNION中第二个和随后 SELECT被标记为UNION。...第一个SELECT被标记就好像它以部分外查询来执行。这就是下面第一个例子中UNION中第一个SELECT显示为PRIMARY原因。...表增加数据再执行eq_ref2个例子,其实是没有影响,因为eq_ref针对是teacher都能返回唯一行数据 ref:非唯一性索引,对于每个索引查询,返回匹配所有行(0,多) 修改表为如下...对tname建立索引,当我们查询tid,它值已经B+树叶子节点上了,不需要回表查询,从索引中就可以拿到,因为非聚集索引,叶子节点存放索引键值,以及该索引键值指向主键 接着,同时查tname(...Using index和Using where前面已经有例子,当出现索引覆盖,会显示Using index,性能得到了提升,出现Using temporary和Using filesort说明性能损耗比较

54020

「春招系列」MySQL面试核心25问(附答案)

根据主索引搜索,直接找到key所在节点即可取出数据;根据辅助索引查找,则需要先取出主键值,再走一遍主索引。...回滚日志作用:1)能够发生错误或者用户执行 ROLLBACK 提供回滚相关信息 2) 整个系统发生崩溃、数据库进程直接被杀死后,当用户再次启动数据库进程,还能够立刻通过查询回滚日志将之前未完成事务进行回滚...,第二个事务已经读取var为100,此时第一个事务做了回滚。...乐观锁,先进行业务操作,最后实际更新数据进行检查数据是否被更新过。...最终还是要“回表”,也就是要通过主键再查找一次,这样就 会比较慢。覆盖索引就是把要查询出列和索引是对应,不做回表操作! 25、数据库中主键、超、候选、外是什么?

50630

关于Mysql数据库索引你需要知道内容

这是因为,修改性能和检索性能是互相矛盾。当增加索引,会提高检索性能,但是会降低修改性能。当减少索引,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能,不应该创建索引。...与非聚集索引相比,聚集索引通常提供更快数据访问速度。 四. 索引优缺点 为表设置索引要付出代价:一是增加了数据库存储空间,二是插入和修改数据要花费较多时间(因为索引也要随之变动)。...大家想想平时编程中我们要对两个字段排序,是不是先按照第一个字段排序,如果第一个字段出现相等情况,就用第二个字段排序。这个排序方式同样被用到了B+树里。...字符串排序方式:先按照第一个字母排序,如果第一个字母相同,就按照第二个字母排序。。。...根据主索引搜索,直接找到key所在节点即可取出数据;根据辅助索引查找,则需要先取出主键值,再走一遍主索引

1.4K30

eos源码赏析(十四):EOS智能合约数据持久化存储(下)

上篇文章发出来之后,群内前辈@郭其淼 针对性提出两个问题: 1、 创建用户可以用emplace返回值作为已创建对象编号。 2、 未对Multi-Index一个关键性二级索引作出说明。...同时我们可以发现在find中使用了db_find_i64,他也包含在我们接下来要说二级索引以及和chainbase交互中,现在我们来将上篇文章中代码稍作修改,然后再执行create action看看...:1000,他内力值:500--emplace返回该英雄编号:0 看完了第一个问题,我们再来看看关于二级索引使用,Multi-Index.hpp中对二级索引做了部分介绍可以参考下官方例子来实现下...,这里实现一个action并简单测试下,根据英雄武力值来查找该英雄信息: //关于hero_tablemulti-index声明修改如下: typedef eosio::multi_index...chainbase走向了boost::multi-index,chainbase.hpp中还有若干操作来实现对数据增、删、改、查,代码阅读起来相对较难,因笔者能力和笔力有限,不再对和boost::multi-index

60110

《逆袭进大厂》第十一弹之MySQL25问25答

根据主索引搜索,直接找到key所在节点即可取出数据;根据辅助索引查找,则需要先取出主键值,再走一遍主索引。...数据库并发会带来脏读、幻读、丢弃更改、不可重复读这四个常见问题,其中: 脏读:第一个修改事务和读取事务进行时候,读取事务读到数据为100,这是修改之后数据,但是之后该事务满足一致性等特性而做了回滚操作...脏读 第一个事务首先读取var变量为50,接着准备更新为100,并未提交,第二个事务已经读取var为100,此时第一个事务做了回滚。最终第二个事务读取var和数据库var不一样。...乐观锁,先进行业务操作,最后实际更新数据进行检查数据是否被更新过。...最终还是要“回表”,也就是要通过主键再查找一次,这样就 会比较慢。覆盖索引就是把要查询出列和索引是对应,不做回表操作! 25、数据库中主键、超、候选、外是什么?

45620

EOS开发中区块链数据持久性(上) 原

由于它是一个地址簿,该表将包含人,因此创建一个名为“person”struct。 //c++ struct person {}; 定义multi_index模式,需要使用唯一值作为主键。... address_index; }; 第6步:构造函数 使用C++类,你应该创建第一个公共方法是构造函数。...//c++ addressbook(account_name self): contract(self){} 第7步:向表中添加记录 以前,多索引主键被定义为强制执行此合约将仅为每个用户存储一条记录...使用modify方法,传递一些参数 前面定义迭代器,调用此操作设置为声明用户。...范围“scope”或“ram payer”ram消费者,在这种情况下是用户,如先前提出该合约设计时所决定那样。 回调函数用于处理表修改

56920

用 Explain 命令分析 MySQL SQL 执行

const 通过索引一次就找到,匹配一行数据,用于常数值比较PRIMARY KEY 或者 UNIQUE索引。 ?...range 检查给定范围行,使用一个索引来选择行,当使用 =, between, >, <, 和 in 等操作符,并使用常数比较关键列。...key_len 显示 MySQL 决定使用索引长度。如果为 NULL,则本列也为 NULL,使用索引长度,保证精确度情况下,越短越好。因为越短,索引文件越小,需要 I/O次数也越少。 ?...using filesort MySQL 会对数据使用一个外部索引排序,而不是按照表内索引顺序进行读取,若出现该值,应该优化 SQL 语句。...distinct 发现第一个匹配后,停止为当前行组合搜索更多行 后记 通过 explain 了解到 SQL 执行计划后,我们不仅可以了解 SQL 执行时使用索引,判断加锁场景,还可以针对其他信息对

1.8K11

EXPLAIN 使用分析

type 表示表连接类型 possible_keys 表示查询,可能使用索引 key 表示实际使用索引 key_len 索引字段长度 ref 列与索引比较 rows 扫描出行数(估算行数...const:表示通过索引一次就找到了,const用于比较primary key 或者unique索引。因为匹配一行数据,所以很快。...key_len 表示索引中使用字节数,该列计算查询中使用索引长度不损失精度情况下,长度越短越好。 如果是NULL,则长度为NULL。...,但是十分重要额外信息 Using filesort 说明mysql会对数据适用一个外部索引排序。...注: EXPLAIN不会告诉你关于触发器、存储过程信息或用户自定义函数对查询影响情况 EXPLAIN不考虑各种Cache EXPLAIN不能显示MySQL执行查询所作优化工作 部分统计信息是估算

96520

《读书报告 – Elasticsearch入门 》----Part II 深入搜索(2)

牢记term查询倒排查询里精确地查找特定短语,而不会匹配短语其它变形,如foo或FOO。不管短语怎样被加入索引,都匹配倒排索引准确值。...(如果索引存在) 然后,关联失效这一节解释了为什么我们创建该索引时候使用一个主分片。...这个子句是最重要,因为他有最高boost值。 这个子句比第一个查询子句要重要,但是没有“Elasticsearch”子句重要。...---- 13.6 关联失效 讨论多字段检索中更复杂查询前,让我们顺便先解释一下为什么我们只用一个主分片来创建索引。...嵌套布尔查询boost值为默认1。 给boost参数一个最好值可以通过试验和犯错来很容易决定:设置一个boost值,执行测试查询,重复上述过程。

1.2K20

mysql 面试总结

为了让事务 B 执行期间读取数据都是一致,就有了可重复读隔离级别,即事务 B 执行期间,其他事务不得进行修改操作。 可串行化: 上面的可重复读隔离级别保证了事务执行期间读取一致性。...mysql 建立联合索引后,是按最左匹配原则来筛选记录,即检索数据是从联合索引第一个字段来筛选。如果 where 里条件只有第二个字段,那么将无法应用到索引。...全文索引接收到文档会对它进行分词处理,以获取到关键词。然后会将关键词和属于这个文档 id 关联起来。... mysql 里行锁依赖索引实现,如果没有索引存在,则会直接进行表锁! 行锁 记录锁:锁住某一条记录。当对唯一索引(包括主键)进行精确查询,会使用记录锁。...间隙锁:当使用范围查询会对符合条件区间数据上锁。涉及到普通索引(即不是唯一索引查询,都会使用间隙锁。 Next-key 锁:临建锁,可以理解为 记录锁 + 间隙锁。

40301

【mysql系列】细谈explain执行计划之“谜”

因为匹配一行数据,所以如果将主键置于where列表中,mysql能将该查询转换为一个常量 3.eq_ref:唯一性索引扫描,对于每个索引,表中只有一条记录与之匹配。...possible_keys: 指出MySQL能使用哪个索引该表中找到行 key: 显示MySQL实际决定使用(索引)。如果没有选择索引,是NULL。...这可能是 const 之外最好连接类型了,简单 select 查询不会出现这种 type。 ? id列都是1,当id列值一样,从上到下执行表。...(这是为什么会比正常计算多1原因)。 索引最大长度是768字节,当字符串过长,MySql会做一个类似左前缀索引处理,将前半部分字符提取出来做索引。...ref 显示key列索引中,表查找值所用到列或常量,一般比较常见为const或字段名称。 ?

87210

Mysql学习笔记,持续记录

DERIVED FROM列表中包含子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中 UNION 若第二个SELECT出现在UNION之后,则被标记为UNION...因为匹配一行数据,所以很快。如将主键置于where列表中,MySQL就能将该查询转换为一个常量。 eq_ref 唯一性索引扫描,对于每个索引,表中只有一条记录与之匹配。...会对数据使用一个外部索引排序,而不是按照表内索引顺序进行读取。...一个字符串列表就是一个由一些被 ‘,' 符号分开子链组成字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。...这个函数第一个参数包含一个逗号(‘,')将无法正常运行。 5. 包含于匹配 like匹配,可以用instr函数方案代替,效率的话还得自己测一测。 6.

1.1K50
领券