Skip to content

Instantly share code, notes, and snippets.

@jyeshe
Last active December 1, 2021 16:02
Show Gist options
  • Save jyeshe/6fb2fa1fc40e468f46ea04950e76904b to your computer and use it in GitHub Desktop.
Save jyeshe/6fb2fa1fc40e468f46ea04950e76904b to your computer and use it in GitHub Desktop.
cache_txs.ex
defmodule CacheTxs do
alias AeMdw.Db.Model
# import AeMdw.Db.Util, only: [read_block!: 1]
require Model
def read_txs(%Range{first: _from_height, last: _to_height} = range) do
range
|> Enum.map(fn height ->
# IO.inspect Model.block(read_block!({height, -1}), :hash)
{_key_block, micro_blocks} = AeMdw.Node.Db.get_blocks(height)
micro_blocks
|> Enum.with_index()
|> Enum.map(fn {mblock, mbi} ->
:aec_blocks.txs(mblock)
end)
end)
end
def read_txs_and_events(%Range{first: _from_height, last: _to_height} = range) do
:mnesia.transaction(fn ->
range
|> Enum.map(fn height ->
# IO.inspect Model.block(read_block!({height, -1}), :hash)
{_key_block, micro_blocks} = AeMdw.Node.Db.get_blocks(height)
micro_blocks
|> Enum.with_index()
|> Enum.map(fn {mblock, mbi} ->
%{txs: :aec_blocks.txs(mblock), events: AeMdw.Contract.get_grouped_events(mblock)}
end)
end)
end)
end
end
stats = fn list -> {Enum.max(list), Enum.sum(list)} end
bench = fn(height) ->
tasks1a = for _i <- 1..2, do: Task.async(fn -> {t1a, _res} = :timer.tc(fn -> CacheTxs.read_txs(height..height+4); end); t1a; end)
t1a_res = Task.yield_many(tasks1a) |> Enum.map(fn res -> elem(res, 1) |> elem(1) end)
Process.sleep(1000);
tasks1b = for _i <- 1..2, do: Task.async(fn -> {t1b, _res} = :timer.tc(fn -> CacheTxs.read_txs(height+5..height+9); end); t1b; end)
t1b_res = Task.yield_many(tasks1b) |> Enum.map(fn res -> elem(res, 1) |> elem(1) end)
Process.sleep(1000);
tasks1 = for _i <- 1..2, do: Task.async(fn -> {t1, _res} = :timer.tc(fn -> CacheTxs.read_txs(height..height+9); end); t1; end)
t1_stats = Task.yield_many(tasks1) |> Enum.map(fn res -> elem(res, 1) |> elem(1) end) |> stats.()
Process.sleep(1000);
t1ab_stats = Enum.zip(t1a_res, t1b_res) |> Enum.map(fn {t1a, t1b} -> t1a + t1b end) |> stats.()
{t1_stats, t1ab_stats}
end
stats100 = for i <- 1..10, do: bench.(i*10)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment