Драйвер Cassandra запрашивает несколько ключей - PullRequest
2 голосов
/ 17 мая 2019

Я пытаюсь запросить cassandra из приложения c ++ и вернуть значения для набора ключей. Я использую драйвер datastax, описанный здесь: http://datastax.github.io/cpp-driver/api/

Строка запроса cassandra выглядит примерно так:

SELECT value from my_table WHERE key IN (?);

Если я подготавливаю отдельную строку запроса для каждого числа параметров, я могу использовать cass_statement_bind_string_n, но есть ли способ использовать одну строку независимо от количества ключей, которые я хочу запросить?

1 Ответ

1 голос
/ 17 мая 2019

Здесь есть несколько вещей:

  1. синтаксис IN (?) означает, что вы всегда запрашиваете только один элемент - в вашем списке есть только одна запись;
  2. , если хотитедля запроса нескольких элементов необходимо изменить синтаксис на IN ? и связать его, используя ass_statement_bind_collection_by_name , чтобы значение имело тип LIST. См. Документ о том, как вы можете создавать типы коллекций ;
  3. Использование IN для запроса по ключу раздела - это действительно анти-паттерн - это добавляет нагрузку на узел, выполняющий запрос, изамедляет ваши запросы, поскольку координирующему узлу потребуется отправлять запросы другим узлам, ожидать результатов, собирать их и отправлять обратно.Это будет быстрее, если вы выполните отдельные запросы для каждого ключа раздела и соберете ответ в своем приложении.
...