2016-08-09 84 views
0

我有一个用Flask构建的Python应用程序,它允许导入许多数据记录(一次从10k-250k +记录的任何地方)。现在插入到Cassandra数据库中,一次插入一条记录,如下所示:如何高效地使用Python将批量数据插入Cassandra?

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

这个过程非常慢。有没有一种最佳实践方法可以用来更有效地插入此批量数据?

+1

显而易见的事情是尝试Cassandra支持的批量插入查询。另外准备查询并重新使用它可能实际上比批量插入更快。但不要指望导入25万条记录的速度很快。也许你应该把工作委托给工人? – freakish

回答

1

您可以对此使用批处理语句,示例和文档可从datastax documentation获取。您也可以在此之上使用一些童工和/或异步查询。

就最佳实践而言,如果每个批次仅包含一个分区键,则效率更高。这是因为您不希望将节点用作许多不同分区键的协调器,所以直接联系每个单独的节点会更快。

如果每条记录都有不同的分区键,那么包含一些子工作者的单个准备好的语句可能会更好。

您可能还想考虑使用允许直接联系相关节点而不是通过另一个节点进行协调的TokenAware load balancing policy

1

最简单的解决方案是从您的数据生成csv文件,并使用COPY命令导入它。这应该适用于高达几百万行。对于更复杂的场景,您可以使用sstableloader命令。