我有下表:
CREATE TABLE prosfiles (
name_file text,
beginpros timestamp,
humandate timestamp,
lastpros timestamp,
originalname text,
pros int,
uploaded int,
uploader text,
PRIMARY KEY (name_file)
)
CREATE INDEX prosfiles_pros_idx ON prosfiles (pros);
在这个表中我保留了几个由python脚本处理的csv文件的位置,因为我有几个脚本同时运行处理这些文件,我使用这个表来保持控制并避免两个脚本开始处理同一个文件(在'pros'列中0表示文件未处理,1表示已处理文件,1010表示当前正由另一个脚本处理的文件)
每个文件运行以下查询以选择要处理的文件:
"select name_file from prosfiles where pros = 0 limit 1"
但是这总是返回具有该条件的文件的第一行
我想运行一个查询,返回所有pros = 0的randow行。
在mysql中我使用了“按rand()命令”但在cassandra中我不知道如何对结果进行随机排序。
答案 0 :(得分:1)
看起来你正在使用Cassandra作为队列和it's not the best usage pattern for it,使用rabbitmq / sqs / any-other-queue-service。 Cassandra也根本不支持排序,而且完成了以下想法:
但是,如果您知道自己在做什么,则可以重新访问数据库架构,使其更适合此类工作负载:
queue
表中读取随机行(请参阅下面如何通过主键从cassandra中读取〜随机行)queue
删除目标ID,并使用处理信息更新目标表。这种做事方式会引发可能的错误:
要通过它的主键从表中读取伪随机行,您可以使用此查询:select * from some_table where token(id_column)>some_random_long_value limit 1
,但它也有它的缺点:
some_random_long_value
将高于任何现有密钥的标记。