Я использую DSE для интеграции Cassandra / Solr, чтобы данные хранились в Cassandra и индексировались в Solr. Вполне естественно использовать Cassandra для обработки операций CRUD и использовать Solr для полнотекстового поиска соответственно, а DSE действительно может упростить синхронизацию данных между Cassandra и Solr.
Однако, когда дело доходит до запроса, на самом деле есть два пути: вторичный / настраиваемый вручную индекс Cassandra и Solr. Я хочу знать, когда использовать какой метод и какова разница в производительности в целом, особенно при настройке DSE.
Вот один пример использования в моем проекте. У меня есть таблица Cassandra, в которой хранятся некоторые данные объекта. Помимо базовой операции CRUD, мне также нужно получить элементы по равенству в каком-то поле (например, категории), а затем отсортировать их в каком-то порядке (в моем случае здесь - поле like_count).
Я могу придумать три разных способа справиться с этим:
- Объявите indexed = true в схеме Solr для поля category и like_count и запроса в Solr
- Создайте денормализованную таблицу в Cassandra с первичным ключом (category, like_count, id)
- Создайте денормализованную таблицу в Cassandra с первичным ключом (категория, порядок, идентификатор) и используйте внешний компонент, такой как Spark / Storm ,, чтобы отсортировать элементы по like_count
Первый метод кажется наиболее простым в реализации и обслуживании. Я просто пишу тривиальный код доступа к Solr, а остальная тяжелая работа выполняется поиском Solr / DSE.
Второй метод требует ручной денормализации при создании и обновлении. Мне также нужно вести отдельную таблицу. Также существует проблема с надгробиями, так как like_count может часто обновляться. Хорошо то, что чтение может быть быстрее (если нет лишних надгробий).
Третий метод может облегчить проблему надгробий за счет одного дополнительного компонента для сортировки.
Как вы думаете, какой метод лучше всего? Какая разница в производительности?