我正处于 Cassandra 中应用程序数据建模的初始阶段。此应用程序具有现有的关系持久层,必须用 Cassandra 替换。
应用程序使用以login_log用户命名的表,该表为所有应用程序中的任何用户提供上次登录时间。
这CQL是我用来创建这个表的
create table login_log (
user_id int,
application_name text,
login_date timestamp,
primary key (user_id, application_name, login_date)
) with clustering order by (application_name asc, login_date desc)
Run Code Online (Sandbox Code Playgroud)
user_id是分区键。application_name并且login_date是聚类键。该表维护登录历史,其中的数据永远不会被删除。
我正在尝试user_id在一个查询中检索所有应用程序的上次登录日期。
如果我正在编写一个SQL查询来做同样的事情,它看起来像下面这样
select user_id, application_name, max(login_date) from login_log group by user_id, application_name
Run Code Online (Sandbox Code Playgroud)
但是它不能在 Cassandra 中完成,因为没有 group by 子句或聚合函数。可以说,聚类列已经分组,但我无法创建一个查询,该查询login_date在一个查询中检索所有应用程序的最新信息。
如果为一个应用程序执行此操作,则CQL如下所示
select * from login_log where user_id = ? and application_name = ? limit 1
Run Code Online (Sandbox Code Playgroud)
由于集群已由 订购login_date,order by因此不需要。我需要扩展相同的查询以一次性检索所有应用程序的数据。
有可能在 Cassandra 中做到这一点吗?如果没有,是否有一种数据建模技术可以让我做到这一点?
任何提示表示赞赏。
| 归档时间: |
|
| 查看次数: |
6612 次 |
| 最近记录: |