Порядок Кассандры по математическому выражению - PullRequest
0 голосов
/ 27 июня 2018

У меня есть семейство столбцов со следующими характеристиками:

CREATE COLUMNFAMILY places (
  name text,    
  category text,
  latitude double,
  longitude double,
PRIMARY KEY (name, category));

Что мне нужно, так это искать места и порядок по формуле расстояния на основе широты и долготы, то есть я предоставлю набор широты и долготы и получу результаты, отсортированные по кратчайшему расстоянию от этих точек. Это запрос, который я хочу выполнить:

SELECT name, distance(latitude, longitude, 37.8074907, -122.4074504) as distance FROM places ORDER BY distance;

Я написал UDF с именем расстояние, которое может вычислить расстояние между двумя наборами широт и долгот. Теперь я знаю, что Кассандра не разрешает порядок по некластерному ключу, но я никак не могу сохранить все расстояния и затем кластеризовать их.

Я новичок в Cassandra, поэтому, если есть какой-то способ изменить дизайн таблицы или сделать что-то с CQL, я открыт для этого.

1 Ответ

0 голосов
/ 28 июня 2018

Как вы упомянули, сортировка в Кассандре основана на ключе кластеризации; то есть, порядок является частью определения таблицы. Ваш заказ результатов SELECT должен соответствовать дизайну таблицы.

Лучше всего загружать результаты SELECT в память и сортировать данные в памяти по требованию. (Без более конкретной информации о том, когда и как часто вы выполняете эту операцию, невозможно дать лучший совет.)

...