Size: a a a

2021 June 11

Е

Евгений in pro.elixir
источник

Е

Евгений in pro.elixir
Насколько я понял, оно просто по всей таблице идет и гвардами фильтрует записи.
источник

ML

Maksim Lapshin in pro.elixir
я на синтетическом примере не очень понимаю, что там вообще происходит.

У нас в флюссонике есть подобное место, где надо складировать в памяти данные про сегменты видео.

Каждый сегмент принадлежит стриму и у него есть utc.

Вот эти utc div 3600 = hour

Составной ключ получается:

`{"ort", 450955, 1623438607}`

Второе число — это номер часа. У тебя получаются таким образом бакеты, которые вполне неплохо режут пространство и их сильно меньше.

Дальше если ты знаешь границы, то можешь сразу высчитать готовые бакеты и пофильтровать два на краях
источник

AN

Alexey Novoselov in pro.elixir
Да, а через next просто по очереди читает и это быстрее, т.к. Записи подряд идут
источник

Е

Евгений in pro.elixir
Нет, там фишка в том, что так как таблица ordered set, то можно сразу прыгнуть к нужному диапазону, а не всю таблицу шерстить.
источник

AN

Alexey Novoselov in pro.elixir
На это сообщение ответил
источник

AN

Alexey Novoselov in pro.elixir
Можно, но select_count этого не понимает, это не query planner от Oracle
источник

Е

Евгений in pro.elixir
делаем :ets.next с ключом {500. 0} и оно выдаст первый ключ. С обычными сетами такое не прокатывает.
источник

Е

Евгений in pro.elixir
Кое-что он таки понимает, если матчить {500, _}, то select таки оптимизирует, если верить докам.
источник

Е

Евгений in pro.elixir
В общем не актуально больше. Я на SQLite сделал, через Ecto. Работает - огонь. И в будущем смогу прикрутить запросы посложнее.
источник

AN

Alexey Novoselov in pro.elixir
А если записать как {I, j, "I-j"} в ets?
источник

Е

Евгений in pro.elixir
тогда ключ получится не уникальный
источник

Е

Евгений in pro.elixir
там же ключ, это первый элемент кортежа
источник

AN

Alexey Novoselov in pro.elixir
Точно (
источник

Е

Евгений in pro.elixir
Короче, составные ключи и прочие сложные запросы - никаких ЕТС и Мнезий.
источник

ML

Maksim Lapshin in pro.elixir
значит у тебя что-то очень странное всё равно.

Ни в какой вселенной sqlite не работает быстро =)
источник

Е

Евгений in pro.elixir
Фишка в том что я использую SQLIte в памяти.
источник

Е

Евгений in pro.elixir
И оно обходит ETS на описанном сценарии с составным ключом. Я бенчил.
источник

Е

Евгений in pro.elixir
Задача, держать несколько сотен тысяч записей в памяти и очень быстро и много искать по ним. Писать довольно редко.
источник

AN

Alexey Novoselov in pro.elixir
Видимо тормозит из-за того, что select_count всю таблицу до конца смотрит, а ручной матч обрывается сразу при первом несовпадении
источник