Database design 计算非PK的列-Cassandra

Database design 计算非PK的列-Cassandra,database-design,cassandra,column-oriented,Database Design,Cassandra,Column Oriented,因此,我遇到了无法在表中选择行数的问题 我的问题是:“在图书馆里得到最多的保留书” 我创建的模型: CREATE TABLE library_reservations ( book_isbn bigint, book_title text, book_publicationdate date, reservation_date date, reservation_addinfo text, PRIMARY KEY(book_isbn)

因此,我遇到了无法在表中选择行数的问题

我的问题是:“在图书馆里得到最多的保留书”

我创建的模型:

CREATE TABLE library_reservations (
     book_isbn bigint,
     book_title text,
     book_publicationdate date,
     reservation_date date,
     reservation_addinfo text,
     PRIMARY KEY(book_isbn)
);
查询:

SELECT book_isbn, book_title, COUNT(reservation_date) 
FROM library_reservations 
GROUP BY book_isbn;

我真的觉得我的模特做错了。该表是对PostgreSQL表的改编。那么,我怎样才能正确地计算每本书的预订数量呢?在这种情况下,我的PK应该是什么?

不幸的是,Cassandra没有按功能分组

一个可能的解决方案是保留第二张带有计数器的桌子

您可以找到有关计数器的更多信息

在您的特定情况下,当进行新预订时,您还必须更新计数器表信息


另一件需要记住的事情是,Cassandra中的表是为满足某个查询而设计的。

是的,我了解在查询之后正在设计的表,我必须重新考虑我的所有表建模(将表从PostgreSQL直接转换为Cassandra是一个错误)。关于计数器表,我是否必须创建一个函数,以便每当我插入到预订表中时,它都会将其增加1?Cassandra上是否有触发器,或者可以用不同的方式执行?计数器只能递增或递减。此外,对于计数器,您不能设置特定值(例如,重置为0-一种方法是读取值并使用该值递减计数器。请注意,此操作可能不会成功,因为可以在“重置”操作之间更改计数器。)。Cassandra中有可用的触发器。尽管如此,我还是建议使用批处理。事实上,Cassandra现在有“分组依据”,但它只能应用于分区内部:关于计数器,它们不一定精确,使用时可能会出现差异