У нас есть таблица в Redshift:
people
people_id people_tele people_email role
1 8989898332 john@gmail.com manager
2 8989898333 steve@gmail.com manager
3 8989898334 andrew@gmail.com manager
4 8989898335 george@gmail.com manager
У меня есть несколько пользователей, которые будут запрашивать таблицу как:
select * from people where role = 'manager' limit 1;
Системные пользователи в основном телефонные звонки этих людей для продажи продуктов. Таким образом, когда запрос возвращает результаты, он не должен возвращать одних и тех же людей.
Например.
Если пользователь A выполняет запрос - select * from people where role = 'manager' limit 1;
, то он должен получить результат:
people_id people_tele people_email role
1 8989898332 john@gmail.com manager
Если пользователь B выполняет запрос - select * from people where role = 'manager' limit 1;
, тогда он должен получить результат :
people_id people_tele people_email role
2 8989898333 steve@gmail.com manager
ПОДХОД 1
Итак, я подумал о добавлении столбца is_processed
, чтобы не возвращать те же результаты. Таким образом, после того, как пользователь A выполнит запрос, таблица будет выглядеть примерно так:
people_id people_tele people_email role is_processed
1 8989898332 john@gmail.com manager 1
2 8989898333 steve@gmail.com manager 0
3 8989898334 andrew@gmail.com manager 0
4 8989898335 george@gmail.com manager 0
APPROACH 2
Другая идея заключалась в создании еще одной таблицы с именем - query_history
где у меня есть:
query_id people_id processed_time
1 1 22 Jan 2020, 4pm
2 2 22 Jan 2020, 5pm
ВОПРОС
Мой вопрос заключается в том, что происходит, когда пользователь A и пользователь B запрашивают одновременно ТОЧНОЕ? В этот момент система будет возвращать один и тот же people_id, и одному и тому же человеку будет сделано 2 телефонных звонка.
Как решить проблему параллелизма?