Size: a a a

2020 February 27

IL

Ilya Ladygin in pro.elixir
Имеется таблица, у которой есть уникальный индекс, который формируется из user1_id user2_id, это обеспечивает что записи уникальны.
Требуется, что бы они генерировались в фоне.

Вариант, который работает это Enum.find(tail, &check_unique_pair(head, &1), функция это запрос, которая чекает есть ли пересечения
источник

IL

Ilya Ladygin in pro.elixir
Но, если записей много я так понимаю это не Гуд решение и хотел бы не запросом чекать а при помощи ets, которая хранит уникальные индексы
источник

IL

Ilya Ladygin in pro.elixir
Или может есть ещё более правильные варианты?
источник

m

madeinussr in pro.elixir
Требуется, что бы они генерировались в фоне. не очень понятно - заранее как-то хочется знать все пары?

Навскидку:
слепить из двух id тупл {user_id1, user_id2} и использовать как ключ в мапе вида %{{:a, :b} => true, {:d, :e} => true}
мапу положить в ets/генсервер

я бы, наверное, в генсервер/агент сунул
потом спрашиваешь у агента: есть такой тупл?
он отвечает результатом вроде your_map[{user_id1, user_id2}] == true
если вернул true - есть такая пара
источник

m

madeinussr in pro.elixir
конечно, все это летит после релиза :) и заполнять надо заново
источник

m

madeinussr in pro.elixir
ну и первоначально заполнить мапу все-таки надо
или лениво (1 раз идешь в БД - результат в мапу) или при пуске приложения все пары выгрести из БД, потом лениво или по мере создания юзеров
источник

m

madeinussr in pro.elixir
Требуется, что бы они генерировались в фоне. видать, это наполнение и спрашивалось
источник

m

madeinussr in pro.elixir
чекнул, нет пары - записал, есть пара - ничего не делаешь
надеюсь, верно понял что требуется
источник

IL

Ilya Ladygin in pro.elixir
Супер!Это то что нужно)
источник

IL

Ilya Ladygin in pro.elixir
Спасибо)
источник

m

madeinussr in pro.elixir
всегда пожалуйста
источник

P

Pavel in pro.elixir
Вы серьезно обсуждаете unique индекс и on_conflict: :ignore через генсервер и ets?
источник

m

madeinussr in pro.elixir
Я обсуждаю изначальную постановку вопроса. Что требуется делать с этой проверкой и парами не знаю. Написано было просто "чекать".
источник

ВА

Верховный Архитектор in pro.elixir
Ihor Katkov
Ещё лучше взять auth0
Просто реализовать по мылу или какому-нибудь fb_token выдачу своего токена стоит того, чтобы отказаться от plug.call в пользу хитрых схем авторизации?
источник

IL

Ilya Ladygin in pro.elixir
Я не описал всю задачу, это мой косяк.Кратко:
список пользователей  -> по рекурсии проходимся по нему и формируем пары, которых не было -> создаём встречу
источник

P

Pavel in pro.elixir
Если в проект можно затащить oAuth с каким-нибудь гуглом - это же решает все проблемы
источник

P

Pavel in pro.elixir
madeinussr
Я обсуждаю изначальную постановку вопроса. Что требуется делать с этой проверкой и парами не знаю. Написано было просто "чекать".
Ну мне кажется человека стоит спросить о том, что его задача как-бы имеет более простое решение, а выходит, что он там городит свой индекс
источник

IL

Ilya Ladygin in pro.elixir
Мне казалось индекс это всегда полезно)
источник

SM

Sergei Maximov in pro.elixir
Ilya Ladygin
Мне казалось индекс это всегда полезно)
Ну у тебя будет тот же индекс, только в БД и без головняков
источник

m

madeinussr in pro.elixir
Ilya Ladygin
Я не описал всю задачу, это мой косяк.Кратко:
список пользователей  -> по рекурсии проходимся по нему и формируем пары, которых не было -> создаём встречу
я какое-то время назад (кажись, пару дней)
предлагал вариант со связью многие-ко-многим
источник