Size: a a a

2020 May 25

AB

Alexey Bolshakov in pro.elixir
но, судя по всему, тут вопрос не столько в кешировании, сколько в некой унификации
источник
2020 May 26

VI

Victor Ivanov in pro.elixir
Кто-нибудь знает, есть ли более быстрый способ достать неименнованную ets табличку?
acc = fn {channel, _}, map -> Map.update(map, channel, 1, &(&1 + 1)) end
table_names = [App.PubSub.KeyPartition0, App.PubSub.KeyPartition1]

:ets.all()
|> Enum.filter(fn x -> x != :undefined end)
|> Enum.map(fn x -> :ets.info(x) end)
|> Enum.filter(fn x -> Enum.member?(table_names, Keyword.get(x, :name)) end)
|> Enum.map(fn x -> :ets.foldl(acc, %{}, Keyword.get(x, :id)) end)
|> Enum.map(fn x -> x["log:everyone"] || 0 end)
|> Enum.sum()
источник

LL

Lama Lover in pro.elixir
Victor Ivanov
Кто-нибудь знает, есть ли более быстрый способ достать неименнованную ets табличку?
acc = fn {channel, _}, map -> Map.update(map, channel, 1, &(&1 + 1)) end
table_names = [App.PubSub.KeyPartition0, App.PubSub.KeyPartition1]

:ets.all()
|> Enum.filter(fn x -> x != :undefined end)
|> Enum.map(fn x -> :ets.info(x) end)
|> Enum.filter(fn x -> Enum.member?(table_names, Keyword.get(x, :name)) end)
|> Enum.map(fn x -> :ets.foldl(acc, %{}, Keyword.get(x, :id)) end)
|> Enum.map(fn x -> x["log:everyone"] || 0 end)
|> Enum.sum()
Как я вижу, ты тут тянешь именованные таблички, которые есть в table_names
источник

VI

Victor Ivanov in pro.elixir
я все ( из :ets.all() ) перебираю, и выбираю те, у которых имя совпадает с тем, что мне нужно
источник

LL

Lama Lover in pro.elixir
Victor Ivanov
я все ( из :ets.all() ) перебираю, и выбираю те, у которых имя совпадает с тем, что мне нужно
Так может сразу сделать Enum.map по именам? А в создании таблиц использовать :named_table?
источник

VI

Victor Ivanov in pro.elixir
таблицу не я создаю
источник

LL

Lama Lover in pro.elixir
Это странно, что нет референсов, но есть имена. Я сейчас по-плотнее документацию почитаю, но ты пока можешь в эрлангочатике спросить
источник

VI

Victor Ivanov in pro.elixir
я лезу в нутря феникса, чтоб по быстрому получить число коннектов к определенному каналу
источник

VI

Victor Ivanov in pro.elixir
таблички эти создаются в Registry
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Victor Ivanov
я лезу в нутря феникса, чтоб по быстрому получить число коннектов к определенному каналу
Видимо это делается не так
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Представь что для того чтобы узнать размер таблицы в SQLite ты узнаешь размер одной записи и делишь размер сохранённого на диске файла бд на размер одной записи
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Выглядит приблизительно так же...
источник

VI

Victor Ivanov in pro.elixir
У меня было сделално, как вот здесь описано http://neuvians.io/2016/02/27/counting-connections-to-a-phoenix-channel/
С феникс 1.5  работать это перестало, потому что поменялись имена таблиц в ets и из named они стали неименнованными (хотя имя у них все равно есть).

Вот и хотел узнать, если ли какой-то более быстрый способ получить табличку 🤷‍♂️
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Может я чего-то в этой жизни не понимаю, но по-моему в фениксе встроенный функционал для такого
источник

ŹR

Źmićer Rubinštejn in pro.elixir
источник

VI

Victor Ivanov in pro.elixir
у меня есть важные каналы, есть неважные, presence ведется только для важных. А чисто в целях понимания общего масштаба хочется общее число подключенных людей видеть
источник

P

Pavel in pro.elixir
какая-то экономия на спичках, которая потом будет оборачиваться вот такими велосипедами
источник

VI

Victor Ivanov in pro.elixir
угу, а гонять presence diff на десятках тысяч юзерах – это типа норм. ок, ок
источник

P

Pavel in pro.elixir
в каком виде необходимо? просто статистика коннектов? сделайте на каналах :telemetry.execute и считайте это в statsd/prometheus, да хоть в чем
источник

VI

Victor Ivanov in pro.elixir
о, вот это хорошая тема
источник