Кассандра может упорядочивать результаты только путем кластеризации столбцов.Он не может упорядочить результаты с помощью агрегатной функции.
Существует несколько вариантов, которые можно использовать для достижения этой цели.
- Выполните запрос, а затем измените порядок результатов.в вашем приложении.
Эта опция может работать, если вы ожидаете, что только ограниченное количество строк будет возвращено из каждого запроса.
Обратите внимание, что рекомендуется использовать агрегатные функции (например, avg ()) только тогда, когда вы знаете, что они будут применяться только к ограниченному числу строк.В идеале вы должны использовать их только при работе с одним разделом (используйте предложение WHERE, чтобы ограничиться одним разделом).Если у вас нет ограничений, вы можете увидеть очень медленные запросы или тайм-ауты запроса, если Cassandra нужно прочитать большое количество строк, чтобы вычислить совокупность.
Сохраните предварительно рассчитанное среднее значение в таблице или кэшируйте его в своем приложении.
Это лучший вариант, если вам нужны вычисленные средние значения для большего набора данных.
Если вы сделаете average_rating
столбец кластеризации, Cassandra будет хранить средние значения для каждого раздела в отсортированном порядке.Это очень эффективно с точки зрения Cassandra.
Недостатком является то, что вам нужно будет вычислять среднее значение в вашем приложении каждый раз, когда вы вставляете или обновляете строку, потому что это будет столбец первичного ключа в Cassandra.Таблица.
Одна вещь, на которую вы могли бы обратить внимание - это использовать триггер Кассандры, чтобы вычислить среднее значение для вас.Это может облегчить вам жизнь, если у вас есть несколько приложений, пишущих в эту таблицу, однако я на самом деле не уверен, возможно ли изменить столбец первичного ключа с помощью пользовательского триггера.Я бы порекомендовал провести некоторые исследования и тестирование, если вы решите посмотреть на эту опцию.Вы можете прочитать о триггерах здесь .