あなたはEOS契約開発者であれば、私はおそらく私のようなあなたを信じているメモリ(RAM)が困惑量。使用時にはmulti_index
、データの保存時に、明らかに少しだけデータを保存しますが、表示ブロック鎖ブラウザのメモリフットプリントは、多くのことを増加しています。この記事では、RAMメモリが正確に必要なデータを計算し、メモリの量を見つけることができます。私たちは、最初のためのシンプルな契約書き込むmulti_index
データにメモリを。展開の契約後、前と後の各インターフェースの呼び出しは、RAMの量、及びレコードに関するお問い合わせです。
書面による契約
新規契約ディレクトリ:
$は、mkdirのAddRow $のCDのAddRowの $タッチaddrow.cpp
ここでは、単純な契約があり、利用者への各呼び出しはadd
、データベースには、行の多くを保存します
#include <eosiolib / eosio.hpp> クラス[[eosio ::契約]のAddRow:公共eosio ::契約 { パブリック: のAddRow(eosio ::名受信機、eosio ::名コード、eosio ::データストリーム<CONST文字* > DS) :eosio ::契約(受信機、コード、DS)、_students(受信機、code.value) {} //添加学生 [eosio ::作用] ボイド追加(eosio ::名のユーザ) { require_auth(ユーザー); eosio ::プリント(「生徒の追加」、利用者)。 _students.emplace(get_self()、[b](オート&P){ p.id = _students.available_primary_key(); }); } 構造体[[eosio ::テーブル]]学生 { IDのuint64_tを; //主キー uint64_tをのPRIMARY_KEY()constは{戻りID;} }; //は、年齢に応じたデータテーブルをソート のtypedef eosio multi_index :: studentstable < "学生" _n、学生。>; //データベーステーブルの学生。 studentstable _students; } ; EOSIO_DISPATCH(のAddRow、(追加))
使用しeosiocpp
、コンパイル取得するためのツールをaddrow.wasm
してaddrow.abi
ファイル:
$ eosiocpp -o addrow.wast addrow.cpp $ eosiocpp -g addrow.abi addrow.cpp
展開の契約
cleos -u https://jungle2.cryptolions.io:443設定契約zmcheng12345 /root/github.com/addrow -p zmcheng12345アクティブ@ チェックアカウントのメモリ使用量: Cleos -u https://jungle2.cryptolions.io:443アカウントzmcheng12345 -jを取得
私は、の値を照会しました:
"ram_usage":52665
この値は、あなたのコンパイラツールやパラメータによって異なる場合があります。私たちは、違いのその後の計算の基礎としての価値を照会しました。
コール契約、データの新しいライン:
$ cleosプッシュアクションeosio.ramfeeのアドオン '' -p eosio.ramfee
クエリ量、結果は次のとおりです。
"ram_usage":52897
そして、新しい行のクエリを追加し、結果は以下のとおりです。
"ram_usage":53017
計算によって得ることができ、最初の行の新しいフットプリントは232バイトに達します!2行目の占有率は120のバイトまでも!あなたが行を追加していく場合は、次の行のフットプリントは120バイトであることがわかります。
つまり、専用のメモリであるuint64_t
データテーブルのフィールド(サイズは8バイト)、最初の行は232バイト、フォローアップの数によって占有さ120バイトを占有します。
概要
使用中EOS契約multi_index
データを格納する(二次インデックスを使用せずに)、次のことを想定するのに必要なRAMの量:
- まず、各レコードの新しい行は、実際のデータサイズ+ 112バイトを占め
- テーブルデータ自体が存在しない場合は、追加料金は、RAMの使用量の112バイトを必要とします
オーバーヘッドデータ(112バイト)の各行は依然として非常に大きい、参照。サイズは、単に予想される使用及び実際の使用誤差を計算するために使用されるデータ構造が非常に大きい場合には(本実施形態では、実際の量に格納されたデータの最初の8つのバイトは、データの29倍の大きさであります!)。アルゴリズムの正確なフットプリントを学んだ後、私たちはより良いDAPPに必要なメモリの量を計画することができます。