AD
Size: a a a
AD
AD
AD
AD
:clickhousex, :codec, Clickhousex.Codec.JSONЕ
:ets.select_count?ordered_set в ETS, 1кк записей, ключи - кортежи {i, j}, где i и j целые в диапазоне от 1 до 1000 включительно.{500, 0} и меньше {599, :infinity} (должно получиться 100к записей).:ets.select_count считает чуть ли ни на порядок медленнее, чем просто ручной подсчет через :ets.next.Е
defmodule Test do
def bench() do
set = :ets.new(:set, [:set])
ord = :ets.new(:ord, [:ordered_set])
Enum.each(1..1000, fn i ->
Enum.each(1..1000, fn j ->
r = {{i, j}, "#{i}-#{j}"}
:ets.insert(set, r)
:ets.insert(ord, r)
end)
end)
ms = [
{
{:"$1", :_},
[{:andalso, {:>, :"$1", {{500, 0}}}, {:<, :"$1", {{599, :infinity}}}}],
[true]
}
]
{set_time, set_res} = :timer.tc(&:ets.select_count/2, [set, ms])
{ord_time, ord_res} = :timer.tc(&:ets.select_count/2, [ord, ms])
{ord_time_man, ord_res_man} = :timer.tc(&select_count/4, [ord, {500, 0}, {599, :infinity}, 0])
IO.puts("set(#{set_res}) - #{set_time}")
IO.puts("ord(#{ord_res}) - #{ord_time}")
IO.puts("ord manual(#{ord_res_man}) - #{ord_time_man}")
end
def select_count(table, from, to, res) when from < to do
select_count(table, :ets.next(table, from), to, res + 1)
end
def select_count(_table, _from, _to, res), do: res - 1
end
Test.bench()
E
:clickhousex, :codec, Clickhousex.Codec.JSON
и в доке не указано что надо э тот конфиг выставлять в конфиг файле рутового приложенияAD
E
AD
AD
.get_env(:clickhousex, :codec, Clickhousex.Codec.JSON)` - третий аргумент это значение по-умолчаниюAD
E
AD
E
(CaseClauseError) no case clause matching: {:error, %Jason.DecodeError{data: \"\", position: 0, token: nil}}\n (clickhousex 0.5.0) lib/clickhousex/codec/json.ex:38: Clickhousex.Codec.JSON.decode/1\n (clickhousex 0.5.0) lib/clickhousex/http_client.ex:112: Clickhousex.HTTPClient.decode_response/3\n (clickhousex 0.5.0) lib/clickhousex/protocol.ex:167: Clickhousex.Pro...">>,...} in 'Elixir.DBConnection.Connection':handle_cast/2 line 198 in context child_terminatedAD
E
AD
Aß