1. 每日区块链首页
  2. 学院
  3. 平台教程

如何针对DApp使用RAM优化?

对于创建基于EOS的DApp的所有人来说,RAM优化是主要关注点。我们ITAM网络也在努力寻找解决方案。这篇文章将介绍如何优化RAM使用情况。

什么时候能用上RAM?

使用RAM主要有两个时候。(虽然还有更多)

1、上传智能合约时

当您编写DApp并首次发布它时,它将消耗大约10倍于您的二进制文件的RAM。这取决于智能合约的制作过程以及设计方式。因此,可以说RAM的使用取决于开发人员的能力。 但是,因为它是在智能合约部署时消耗的,所以这不是一个大问题。

2、使用智能合约TABLE保存数据时

使用DApp时,需要执行保存和加载数据的操作。因此,EOS提供了TABLE,我相信大多数智能合约都在使用它。但是,这个TABLE占用的RAM会很多。每次创建TABLE或注册数据时都会使用RAM。此外,最大的问题是,如果不删除TABLE或数据,则无法恢复被占用的RAM,它将继续被占用。

如何更有效地使用RAM?一个简单的方法是让精明的开发人员精心设计和编码以节省RAM。但是,这不是使用TABLE的基本解决方案。然后想一想,可能会认为“将最少量的数据存储并保存到TABLE以上”可能是更好的选择,但这也意味着使用的DApp越多,RAM的使用会跟着增加。那我们该怎么办?我们需要放弃使用TABLE吗?

最小化的RAM使用方法

ITAM网络开发时,我们不得不查看EOS的BLOCK数据。何不让我们来看看EOS的BLOCK数据? (这是第7813616个区块数据)

如何针对DApp使用RAM优化?

需要密切关注的是交易部分,在交易中,我们来看看trx。

如何针对DApp使用RAM优化?

我们差不多完成了。再来看看Action部分。

如何针对DApp使用RAM优化?

如果查看上述数据,您可以看到eosio.token智能合约中使用的Transfer操作的历史记录。

这篇文章是关于如何最小化RAM使用率的,但为什么我们要看区块数据?请允许我问你一个问题。

区块数据使用RAM的方式与使用TABLE的方式相同吗?

区块数据不使用RAM; 数据在BP中运行一个完整的节点。你们中的一些人可能已经得到了线索,但是如果你再看一下,我们可以得出结论,如果我们使用区块中的数据而不是使用TABLE,我们可以最小化RAM的使用。

那我们怎么做呢?

如果你看一下区块数据,答案是显而易见的; 这是Action数据。

Action是指执行智能合约特定操作的事务中的操作数据。每个智能合约的执行都以上述形式存储在Block上。这意味着如果我们不使用TABLE,但在执行智能合约的操作后使用区块的剩余数据,我们可以最小化TABLE的RAM使用率。

我举一个例子

ITAM Network,我们需要注册游戏中获得的项目,以此为例。

使用itamnetwork1帐户发布智能合约。在智能合约中有get Action,假设我们需要itamKey,itemName和onwer的参数值。执行itamnetwork1的get动作,如果我们在Block上查看它,我们会看到以下内容。(假设获得该项目的帐户名称是itamnetwork2)

如何针对DApp使用RAM优化?

如您所见,我们可以在区块信息中看到您要保存为Action数据的所有数据。如果你像这样使用区块的数据,我相信它将是一种最小化TABLE使用RAM量的方法。

需要的准备工作是什么?

这很明显,您需要能够使用区块数据。如果将EOS块数据存储在数据库中,则可以根据该数据库轻松搜索和处理。因此,我们需要的是每次在维护完整节点时检索Block数据的方法,或者使用最近在EOS上发布的demux-js作为数据库中的特定Action以作良好的替代存储。

需要考虑的事情

使用区块数据时必须考虑一些事项。

1.EOS完整节点/demux-js

要利用块数据,必须有一种维护完整节点或使用demux-js的方法。我们需要考虑这是否是一种有效的方法。

2.智能合约设计

因为这不是使用TABLE的常用方法,所以智能合约的设计至关重要。

3.商业模式

由于所有数据都在区块上公开,因此您需要设计相应的业务模型。

结语

总而言之,我们继续使用Action数据,该数据在区块上运行,同时避免使用大量RAM的TABLE。请记住,这只是一种替代方法,并不是唯一正确的答案。应用此方法的结果反馈很重要。

原创文章,作者:楷书,如若转载,请注明出处:http://www.dayqkl.com/41368.html

发表评论

登录后才能评论
QR code