Получение иерархических данных в Cassandra - PullRequest
1 голос
/ 16 июня 2020

У меня есть некоторые данные, структурированные как Country / State / District / PostalCode, которые хранятся в виде столбцов в таблице с названием «LocationData» в Cassandra с почтовым индексом в качестве ключа раздела / первичного ключа. У меня есть интерфейс, где я пытаюсь получить эти данные и показать их в теге выбора. Когда пользователь выбирает страну (динамически загружается), состояния этой страны будут динамически загружены в другой тег выбора. Когда пользователь выбирает штат, районы этого штата будут загружаться динамически и так же, как и почтовый индекс.

Проблема в том, что когда я пытаюсь запросить все отдельные страны, доступные в базе данных, например "SELECT DISTINCT country FROM tableName", он показывает ошибка, поскольку ключевое слово DISTINCT можно использовать только для ключей раздела. Поэтому я должен использовать "SELECT country FROM tableName", что даст тысячи строк, поскольку значение столбца страны будет одинаковым для многих почтовых индексов. Затем я беру набор результатов из запроса и программно получаю все отдельные страны. Точно так же, когда пользователь выбирает страну, я извлекаю все штаты этой страны, используя SELECT state FROM tableName where country=" SomeCountry", который также дает повторяющиеся записи, которые необходимо отфильтровать, чтобы получить все отдельные состояния, что крайне неэффективно, так как мне нужно искать по тысячам строк, чтобы получить отличные значений каждый раз, когда пользователь выбирает другую страну / штат / район и т.д.

1 Ответ

0 голосов
/ 16 июня 2020

Я собирался написать в качестве комментария, но он длиннее, чем он.

Я думаю, что Кассандра для этого слишком много. Ваша структура данных почти идеально подходит для РСУБД + дополнительный слой кеша. У вас есть отношения (внешние ключи), вам нужны соединения (иногда многоуровневые), и вы можете использовать Common Table Expressions для иерархических данных. Почти все современные RDBM поддерживают это. postgresql или mysql. Эти числа почти постоянны для страны, штата, района и т.д. реплики при необходимости. вы можете хранить кэшированные данные в Redis, используя lists или hashes, чтобы не обращаться к базе данных регулярно для постоянных данных.

...