gpt4 book ai didi

sql - Redshift中选择查询的并发性

转载 作者:行者123 更新时间:2023-12-04 10:43:25 25 4
gpt4 key购买 nike

我们在 Redshift 中有一个表:

人们

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

方法 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 个电话。

如何解决并发问题?

最佳答案

您只能使用方法 1 解决它,只需在其中添加 Randomisers

SELECT * FROM people 
WHERE role = 'manager'
AND is_processed = 0
order by random()
limit 1;

引用: https://docs.aws.amazon.com/redshift/latest/dg/r_RANDOM.html

关于sql - Redshift中选择查询的并发性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59826303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com