我有一个非常大的 Cassandra 表,大约有 1300 万个条目。该表用作一种查找表。这意味着没有写入,只有读取。我使用Datastax Enterprise 4.8
(包括Cassandra 2.1
)。
因此,内容是非常静态的,但不时(每隔几个月)会更新内容。问题是,旧数据可能会过时并出现新数据。但旧数据不会被覆盖(它保留在表中)。必须删除旧数据才能拥有干净的数据库。
我有一个要求......数据库必须在更新期间可用。新旧数据并存的时间很短(几分钟)是可以的。
我已经考虑过以下解决方案:
- 直接把新表写成SSTable,和旧表交换
- 将更新作为批处理进行,并在开始时截断旧数据
- 创建一个新表(使用新名称)并在程序中更改使用的表(在运行时)
- 添加版本列,使用新版本添加新数据,然后删除旧数据(使用旧版本)
这些解决方案中哪一个是最好的?或者更好的是,有没有一种解决方案可以更优雅地解决我的问题?