php – Cassandra:只选择最新的行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – Cassandra:只选择最新的行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1759字,纯文字阅读大概需要3分钟。
内容图文
我使用下表:
CREATE TABLE IF NOT EXISTS lp_registry.domain (
ownerid text,
name1st text,
name2nd text,
name3rd text,
registrar text,
registered timestamp,
expiration timestamp,
updated timestamp,
technologies list<text>,
techversions list<text>,
ssl boolean,
PRIMARY KEY (
(name1st, name2nd, name3rd),
registrar, ownerid, registered, expiration, updated
)
);
表不会更新,只会添加新行.每次爬虫检查域时,都会添加新行.
我正在执行此选择:
SELECT * FROM lp_registry.domain WHERE
registrar = 'REG-WEDOS' AND
ownerid = 'FORPSI-JAF-S497436'
ALLOW FILTERING;
但是我在结果中想要的只是每个唯一“name3rd.name2nd.name1st”具有最新“更新”值的行.
如果我在标准SQL数据库中,我将使用嵌套选择MAX或GROUP BY.但是,Cassandra(MAX(), DISTINCT and group by in Cassandra)不支持此功能.但是我应该在CQL中做些什么呢?
解决方法:
扩展到Cedric’s answer(这是一个很好的建议并将其视为接受的答案),你会得到一个大致类似的表结构:
CREATE TABLE IF NOT EXISTS lp_registry.domain (
ownerid text,
name1st text,
name2nd text,
name3rd text,
registrar text,
registered timestamp,
expiration timestamp,
updated timestamp,
technologies list<text>,
techversions list<text>,
ssl boolean,
PRIMARY KEY ((registrar, ownerid), updated, name1st, name2nd, name3rd)
) WITH CLUSTERING ORDER BY (updated desc);
选择数据时,它将返回您正在查询的注册商和所有者ID的分区中具有最新更新值的行.
此查询将非常快,因为您的数据将由注册商在磁盘上组织,所有者ID按行按顺序按更新的降序排列.
这是cassandra的一个关键概念,因为您的数据是根据您查询的方式进行组织的.您在查询中失去了灵活性,但您可以放心,因为您在组织数据时检索数据,因此您将获得出色的性能.这就是为什么根据您的查询对数据进行非规范化至关重要的原因.
如果您想要检索最近更新的所有数据,那么事情变得复杂.除非一切共享具有其自身问题的相同分区(example strategy using a ‘dummy’ partition key),否则用cassandra很难解决这个问题.
内容总结
以上是互联网集市为您收集整理的php – Cassandra:只选择最新的行全部内容,希望文章能够帮你解决php – Cassandra:只选择最新的行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。