Size: a a a

Ruby, Rails, Hanami | dry-rb

2020 December 07

MC

Mikhail Churakov in Ruby, Rails, Hanami | dry-rb
второй запустится и возьмёт уже нормальный токен
источник

I

Ildar in Ruby, Rails, Hanami | dry-rb
Sergey
совместный
Ну вот в этом и проблема. У тебя по сути уникальность на пару user_id, токен. А должна быть уникальность отдельно на user_id и отдельно на токен
источник

S

Sergey in Ruby, Rails, Hanami | dry-rb
Mikhail Churakov
у тебя есть юзер, блокируй его
ок, попробую
источник

MC

Mikhail Churakov in Ruby, Rails, Hanami | dry-rb
Ildar
Зависит от логики. Если ловить это исключение то отката транзакции не будет. А Прото выберется новый токен и сохранится.
Исключение будет выкинуто БД по сути, что плохо - а где ловить его - дело десятое
источник

I

Ildar in Ruby, Rails, Hanami | dry-rb
Mikhail Churakov
второй запустится и возьмёт уже нормальный токен
А второй завис из-за ковкой то другой блокировки и привет dead block.
источник

MC

Mikhail Churakov in Ruby, Rails, Hanami | dry-rb
Ну для этого есть тайауты блокировок
источник

I

Ildar in Ruby, Rails, Hanami | dry-rb
Mikhail Churakov
Ну для этого есть тайауты блокировок
Это более сложна логика где проще накосячить. Да и медленнее работать будет. Через уникальные индексы быстрее будет. Хотя от размера данных зависит.  Если таблица на миллиард пользователей то апдейт и проверка индекса дольше будет конечно. (Хотя ведь уникальность все равно надо проверять…)
источник

MC

Mikhail Churakov in Ruby, Rails, Hanami | dry-rb
Это обычное решение =) С тем же User.find(12).with_lock do будет всё нормально работать
источник

S

Sergey in Ruby, Rails, Hanami | dry-rb
Ildar
Это более сложна логика где проще накосячить. Да и медленнее работать будет. Через уникальные индексы быстрее будет. Хотя от размера данных зависит.  Если таблица на миллиард пользователей то апдейт и проверка индекса дольше будет конечно. (Хотя ведь уникальность все равно надо проверять…)
Ты предлагаешь сделать чтобы в таблице мог лежать только один токен с уникальным user_id?
источник

I

Ildar in Ruby, Rails, Hanami | dry-rb
Да. Это же по задачи требуется? Или я опять что-то не понял?
источник

S

Sergey in Ruby, Rails, Hanami | dry-rb
Ildar
Да. Это же по задачи требуется? Или я опять что-то не понял?
Ну, я имею в виду чтобы у меня в таблице лежал только один актуальный токен, вместо двух. Я думал над тем чтобы бы сделать belongs_to вместо has_many, но там также гонки могут возникать по-идее
источник

I

Ildar in Ruby, Rails, Hanami | dry-rb
Я тебе позже отвечу. Сейчас писать не удобно. Но явно надо сперва с постановкой задачи разобраться. От этого зависят варианты решения
источник

АД

Антон Дьячук... in Ruby, Rails, Hanami | dry-rb
сдается мне что нужно уже смотреть вокруг постгреса
источник

АД

Антон Дьячук... in Ruby, Rails, Hanami | dry-rb
актуальный токен - не то состояние которое обязательно нужно хранить в постгресе
источник

S

Sergey in Ruby, Rails, Hanami | dry-rb
Антон Дьячук
сдается мне что нужно уже смотреть вокруг постгреса
либо айосников попинать чтобы у себя эту проблему разрулили)
источник

S

Sergey in Ruby, Rails, Hanami | dry-rb
Так да конца и не понял что им мешает юзать один инстанс чата, вместо двух. Один они юзают чтобы рисовать список чатов, а другой чтобы отображать наличие непрочитанных сообщений в тапбаре
источник

АД

Антон Дьячук... in Ruby, Rails, Hanami | dry-rb
Sergey
либо айосников попинать чтобы у себя эту проблему разрулили)
они только ответ "нет" будут думать неделю
источник

VS

Viacheslav Stepanov in Ruby, Rails, Hanami | dry-rb
Uncle Iroh
потому что писать миграцию на каждое неважное поле порядком задалбывает, особенно в процессе разработки, когда они появляются и исчезают тоннами
Так может jsonb поле сделать просто, если postgresql. И потом https://github.com/madeintandem/jsonb_accessor
источник

VS

Viacheslav Stepanov in Ruby, Rails, Hanami | dry-rb
Там и индексы можно будет навешивать
источник

I

Ildar in Ruby, Rails, Hanami | dry-rb
Sergey
Ну, я имею в виду чтобы у меня в таблице лежал только один актуальный токен, вместо двух. Я думал над тем чтобы бы сделать belongs_to вместо has_many, но там также гонки могут возникать по-идее
Я так вижу себе проблему и в зависимости от того что требуется два похожих вариант решения.
1. у пользователя несколько актуальнуых токенов (одновременно две (или более) сессии могут быть активны). Тогда user has many token. В таблице tokens не уникальный индекс на user_id (для ускорения выборки) и отдельный уникальный индекс на токен (токен же должны быть уникальный среди всех пользоватлей?)
2. У пользователя может быть только один актуальнй токен (одновременно у пользователя может быть только одна активная сессия). Тогда user has one token. Уникальный индекс на user_id и отдельный уникальный индекс на токен.
источник