как сделать 1 миллион вставок в кассандре - PullRequest
0 голосов
/ 22 мая 2018

Я анализирую тысячи файлов CSV из своего приложения, и для каждой проанализированной строки я делаю вставку в Cassandra.Кажется, что после запуска он останавливается на 2048 вставках и выдает ошибку BusyConnection.

Какой лучший способ для меня сделать около 1 миллиона вставок?

Должен ли я экспортировать вставки в виде строкв файл, затем запустите этот файл непосредственно из CQL, чтобы сделать эти массивные вставки, чтобы я не делал это по сети?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

1 миллион запросов - это не так уж и много, вы можете загрузить его из cqlsh с помощью команды COPY FROM.Но вы также можете загрузить эти данные через ваш Java-код.

Из сообщения об ошибке похоже, что вы используете асинхронный API.Вы можете использовать его для высокопроизводительных вставок, но вам нужно контролировать, сколько запросов обрабатывается одновременно (так называемые запросы в полете).

Здесь есть несколько аспектов:

  1. Начиная с версии 3 протокола, у вас может быть до 32 000 запросов в полете на соединение вместо 1024, которое используется по умолчанию.Вы можете настроить его при создании объекта Cluster .
  2. Вам необходимо контролировать количество запросов, находящихся в полете, обернув session.executeAsync некоторым счетчиком, например, например, вэтот пример (не самый лучший, потому что он ограничивает общее количество запросов на сеанс, а не соединений с отдельными хостами - это потребует гораздо большей логики, особенно в отношении запросов с поддержкой токенов).
0 голосов
/ 22 мая 2018

Мы решаем такие проблемы, используя скрипт (ы).

Скрипт просматривает входные данные и ...

  1. Каждый раз, когда требуется определенный объем данных из ввода.
  2. Ожидать определенное количество времени,
  3. Продолжается чтение и вставка данных.

ad 1. Для нашей конфигурации и данных (максимум 10 столбцов, в основном чисел и коротких текстов) мы нашли от 500 до 1000 строк:оптимальное.

ad 2. Мы определяем время ожидания как n * t.Где n - количество строк, обработанных за один запуск скрипта.И t - постоянная времени в миллисекундах.Значение t сильно зависит от вашей конфигурации;однако для нас достаточно t = 70 мс, чтобы сделать процесс гладким.

...