neo-go/pkg/core
Roman Khimov ae071d4542 storage: introduce PutChangeSet and use it for Persist
We're using batches in wrong way during persist, we already have all changes
accumulated in two maps and then we move them to batch and then this is
applied. For some DBs like BoltDB this batch is just another MemoryStore, so
we essentially just shuffle the changeset from one map to another, for others
like LevelDB batch is just a serialized set of KV pairs, it doesn't help much
on subsequent PutBatch, we just duplicate the changeset again.

So introduce PutChangeSet that allows to take two maps with sets and deletes
directly. It also allows to simplify MemCachedStore logic.

neo-bench for single node with 10 workers, LevelDB:

  Reference:

  RPS    30189.132 30556.448 30390.482 ≈ 30379    ±  0.61%
  TPS    29427.344 29418.687 29434.273 ≈ 29427    ±  0.03%
  CPU %     33.304    27.179    33.860 ≈    31.45 ± 11.79%
  Mem MB   800.677   798.389   715.042 ≈   771    ±  6.33%

  Patched:

  RPS    30264.326 30386.364 30166.231 ≈ 30272    ± 0.36% ⇅
  TPS    29444.673 29407.440 29452.478 ≈ 29435    ± 0.08% ⇅
  CPU %     34.012    32.597    33.467 ≈   33.36  ± 2.14% ⇅
  Mem MB   549.126   523.656   517.684 ≈  530     ± 3.15% ↓ 31.26%

BoltDB:

  Reference:

  RPS    31937.647 31551.684 31850.408 ≈ 31780    ±  0.64%
  TPS    31292.049 30368.368 31307.724 ≈ 30989    ±  1.74%
  CPU %     33.792    22.339    35.887 ≈    30.67 ± 23.78%
  Mem MB  1271.687  1254.472  1215.639 ≈  1247    ±  2.30%

  Patched:

  RPS    31746.818 30859.485 31689.761 ≈ 31432    ± 1.58% ⇅
  TPS    31271.499 30340.726 30342.568 ≈ 30652    ± 1.75% ⇅
  CPU %     34.611    34.414    31.553 ≈    33.53 ± 5.11% ⇅
  Mem MB  1262.960  1231.389  1335.569 ≈  1277    ± 4.18% ⇅
2021-08-12 17:42:16 +03:00
..
block core/block: add Nonce field to header 2021-07-15 15:58:49 +03:00
blockchainer core: implement dynamic NEP17 balances tracking 2021-07-29 10:23:01 +03:00
chaindump block: drop Network from the Header 2021-03-26 13:45:18 +03:00
dao dao: completely drop Cached 2021-08-11 23:06:17 +03:00
fee fee: use array for opcodes 2021-08-02 20:18:33 +03:00
interop *: don't use dao.Cached in tests 2021-08-11 21:02:50 +03:00
mempool core: move mempool.Event to a separate package 2021-06-01 12:24:28 +03:00
mempoolevent core: move mempool.Event to a separate package 2021-06-01 12:24:28 +03:00
mpt mpt: use BinWriter.Grow() instead of custom buffer 2021-08-10 09:34:05 +03:00
native *: don't use dao.Cached in tests 2021-08-11 21:02:50 +03:00
state state: optimize NEP17TransferLog.Append 2021-08-09 11:09:49 +03:00
stateroot *: increase GAS for verification 2021-07-14 10:27:09 +03:00
storage storage: introduce PutChangeSet and use it for Persist 2021-08-12 17:42:16 +03:00
test_data core/block: add Nonce field to header 2021-07-15 15:58:49 +03:00
transaction transaction: add benchmark for transaction serialization 2021-08-09 12:01:38 +03:00
bench_test.go core: don't recalculate witness script hash 2021-08-06 11:25:09 +03:00
blockchain.go dao: completely drop Cached 2021-08-11 23:06:17 +03:00
blockchain_test.go core: don't spawn goroutine for persist function 2021-08-02 16:33:00 +03:00
doc.go core: add Blockchain event subscription mechanism 2020-05-25 00:27:39 +03:00
helper_test.go core: implement dynamic NEP17 balances tracking 2021-07-29 10:23:01 +03:00
interop_system.go *: simplify some integer checks with IsUint64() 2021-07-19 15:42:42 +03:00
interop_system_test.go *: don't use dao.Cached in tests 2021-08-11 21:02:50 +03:00
interops.go interop: implement System.Runtime.GetRandom 2021-07-15 16:00:01 +03:00
interops_test.go dao: drop network from DAO 2021-03-26 13:45:18 +03:00
native_contract_test.go core: don't spawn goroutine for persist function 2021-08-02 16:33:00 +03:00
native_designate_test.go core/test: get rid of empty tx scripts 2021-07-15 15:58:49 +03:00
native_gas_test.go native: drop Refuel method from GAS 2021-08-05 10:27:13 +03:00
native_ledger_test.go core/block: add Nonce field to header 2021-07-15 15:58:49 +03:00
native_management_test.go core: maintain a set of NEP17-compliant contracts 2021-07-28 13:22:53 +03:00
native_neo_test.go core/test: get rid of empty tx scripts 2021-07-15 15:58:49 +03:00
native_notary_test.go config: make MaxValidUntilBlockIncrement configurable 2021-05-17 13:43:03 +03:00
native_oracle_test.go core/test: get rid of empty tx scripts 2021-07-15 15:58:49 +03:00
native_policy_test.go core: don't spawn goroutine for persist function 2021-08-02 16:33:00 +03:00
nonnative_name_service_test.go examples: fix IPv6 bounds check 2021-05-28 11:31:09 +03:00
notary_test.go notary: process new transactions in a separate goroutine 2021-07-23 14:48:00 +03:00
oracle_test.go *: simplify some error messages 2021-07-23 10:08:09 +03:00
prometheus.go stateroot: move state-root related logic to core/stateroot 2021-03-09 13:48:29 +03:00
stateroot_test.go *: create real temporary dirs and files in tests 2021-07-20 12:51:11 +03:00
util.go core/block: add Nonce field to header 2021-07-15 15:58:49 +03:00
util_test.go core/block: add Nonce field to header 2021-07-15 15:58:49 +03:00