同步进行时,如何将数据存储在cassandra中的临时位置?

同步进行时,如何将数据存储在cassandra中的临时位置?,cassandra,Cassandra,我们有一个mysql服务器正在运行,它提供应用程序写入服务。为了进行批处理,我们编写了一个同步作业,将数据迁移到cassandra集群 1. A daily sync job which transfers by updated timestamp for that day. 2. A complete sync job which transfers complete data, overriding existing ones. 现在有可能是从mysql中删除了该行,在这种情况下,使用上述

我们有一个mysql服务器正在运行,它提供应用程序写入服务。为了进行批处理,我们编写了一个同步作业,将数据迁移到cassandra集群

1. A daily sync job which transfers by updated timestamp for that day.
2. A complete sync job which transfers complete data, overriding existing ones.
现在有可能是从mysql中删除了该行,在这种情况下,使用上述方法,它将永远位于cassandra中

为了解决这个问题,我们为每行提供了15天的TTL。因此,最终它将被删除,如果它没有被删除,那么在下一次完全同步中,TTL将再次被重写

就用例而言,它的工作很好,但问题是在完全同步时,完整数据被过度写入,sstable被连续生成,压缩一直在发生,负载平均值随着慢度和备份大小的增加而急剧上升(这是可以避免的)

从本质上讲,我们希望用新数据替换现有的表数据,但我们不希望在开始作业之前截断,而只希望在作业完成之后截断


除了创建一个新表并在生成数据时删除过去的表之外,还有什么方法可以解决这个问题吗?

您可以看看我在这里介绍的双运行迁移策略:


它的优点是允许100%的正常运行时间,如果出现问题,还可以回滚。缺点是发布和代码所需的工作量

Wow!很荣幸收到大师的评论!迫不及待地想在实践中使用SASI指数:)