【发布时间】:2015-12-30 06:28:57
【问题描述】:
我正在开发的音乐服务应用程序有以下用例(后端 cassandra)。
我的音乐数据存储将包含艺术家、流派、年份、歌曲名称、观看次数、曲目长度、字节编码内容。我希望能够按艺术家过滤;艺术家和流派;艺术家、流派和年份。我还希望歌曲名称显示为按观看次数降序排列。
我有下表:
MusicStore (
artist text,
genre text,
year text,
songName text,
views bigint
tracklenght bigint,
content text,
PRIMARY KEY ((artist), genre, year, views, songName))
WITH CLUSTERING ORDER BY (year DESC, views DESC, songName ASC);
我遇到的直接问题:
在我允许按艺术家和流派搜索的应用中:
select * from MusicStore where artist='alizee' AND genre='pop' order by views
此查询不起作用。它说“Orderby 目前仅支持按照主键中声明的顺序对列进行排序”。
似乎 orderby 只允许在第一个集群键上。我缺少什么吗?
对于几个用例来说,非规范化是可能的,但我的应用程序在按流派和年份搜索艺术家时会遇到同样的问题,因为 Cassandra 要求 where 子句键出现在主键中并且与查询的顺序相同(流派,然后是年份)和视图列是第一个聚类键是不可能的。使视图成为第一个集群键将要求其他所有内容都是分区键,因此在 where 子句中是强制性的。
对数据模型有什么建议吗?无论如何我可以通过使用thrift API使用列族(带有超列)来避免这种情况吗?
【问题讨论】:
标签: database jdbc cassandra data-modeling