2016-08-09 2 views
0

У меня есть приложение Python, построенное с помощью Flask, которое позволяет импортировать множество записей данных (в любом месте от записей 10k-250k + за один раз). Сейчас он вставляет в базу данных Cassandra, вставив одну запись, в то время как это:Как эффективно вставлять объемные данные в Cassandra с помощью Python?

for transaction in transactions: 
    self.transaction_table.insert_record(transaction) 

Этот процесс невероятно медленно. Существует ли наилучший подход, который я мог бы использовать для более эффективного ввода этих объемных данных?

+1

Очевидным было бы попробовать объемные вставки запросов, которые Cassandra поддерживает. Кроме того, подготовка запроса и повторное использование его может быть быстрее, чем объемные вставки. Но не ожидайте, что импорт 250 тыс. Записей будет быстрым. Может быть, вам следует делегировать работу работнику (работникам)? – freakish

ответ

1

Для этого можно использовать оператор партии, пример и документацию можно получить у datastax documentation. Вы также можете использовать некоторых дочерних работников и/или асинхронные запросы поверх этого.

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

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

Вы также можете рассмотреть возможность использования TokenAware load balancing policy, позволяющего напрямую связываться с соответствующим узлом, вместо того, чтобы координировать его через другой узел.

1

Самое легкое решение - генерировать csv-файлы из ваших данных и импортировать их с помощью команды COPY. Это должно хорошо работать до нескольких миллионов строк. Для более сложных сценариев вы можете использовать команду sstableloader.

Смежные вопросы