Size: a a a

2021 June 10

AD

Anastasiya Dyachenko in pro.elixir
я говорю про твое приложение, в нем конфиг прописать
источник

AD

Anastasiya Dyachenko in pro.elixir
как раз в кишки зависимости лезть не надо
источник

AD

Anastasiya Dyachenko in pro.elixir
подскажи, как там правильно конфиги объявлять. в доке не вижу
источник

AD

Anastasiya Dyachenko in pro.elixir
залезла в сорсы, видимо что-то такое
```
my_app/config/config.exs (or any other)

config :clickhousex, :codec, Clickhousex.Codec.JSON
```
источник

Е

Евгений in pro.elixir
Эксперты! Что за херня с :ets.select_count?
Синтетический тест:
Есть ordered_set в ETS, 1кк записей, ключи - кортежи {i, j}, где i и j целые в диапазоне от 1 до 1000 включительно.
Хочу посчитать количество записей с ключами больше {500, 0} и меньше {599, :infinity} (должно получиться 100к записей).
Так вот :ets.select_count считает чуть ли ни на порядок медленнее, чем просто ручной подсчет через :ets.next.
WTF?
источник

Е

Евгений in pro.elixir
Код бенча:
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

Elmir in pro.elixir
там только один конфиг, но он внутри самих исходников
config :clickhousex, :codec, Clickhousex.Codec.JSON
и
в доке не указано что надо э тот конфиг выставлять в конфиг файле рутового приложения
источник

AD

Anastasiya Dyachenko in pro.elixir
ну видимо дока не полная
источник

E

Elmir in pro.elixir
да это работает. но не понятно почему это приходится вписывать в этот файл, потому что это уже ведь прописано в конфиг файле самой либы
источник

AD

Anastasiya Dyachenko in pro.elixir
вообще там в коде используется значение по умолчанию
источник

AD

Anastasiya Dyachenko in pro.elixir
`Application.get_env(:clickhousex, :codec, Clickhousex.Codec.JSON)` - третий аргумент это значение по-умолчанию
источник

AD

Anastasiya Dyachenko in pro.elixir
должно работать и без конфига
источник

E

Elmir in pro.elixir
дефолт в том то и дело что падает
источник

AD

Anastasiya Dyachenko in pro.elixir
а что значит падает, какая ошибка
источник

E

Elmir in pro.elixir
не возвращаются там данные в json формате
(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_terminated
источник

AD

Anastasiya Dyachenko in pro.elixir
возвращается пустая строка, а если задать конфиг в приложении то работает нормально?
источник

DS

Dmitry Shpagin in pro.elixir
источник

E

Elmir in pro.elixir
да, с заданным конфигом работает.
источник

AD

Anastasiya Dyachenko in pro.elixir
действительно странное поведение, непонятно как это связано с конфигом. В стектрейсе видно что Clickhousex.Codec.JSON все-таки применяется, значит где-то дефолтное значение сработало
источник

A ß in pro.elixir
если считаете что это баг или просто фигня, открывайте ишью, вечером посмотрю
источник