如何在一段时间内(如每小时或每天)导出数据或从Cassandra数据库导出更新的记录?看起来使用带有日期字段的索引可能会起作用,但是当我手动尝试时,我肯定会在我的cqlsh中获得超时,所以我担心这样做是不可靠的。
如果这不是正确的方式,那么人们如何从Cassandra和传统数据库中获取数据(用于分析,查询JOIN等等)?它不是一个java商店,所以使用Spark是非常重要的(我们不想改变我们的整个系统直接使用Spark而不是cassandra)。我是否必须阅读sstables并尝试以这种方式跟踪它们?有没有办法说“让我的所有记录在时间点X之后受到影响”或“让我在时间戳X后得到所有更改”或类似的东西?
看起来Cassandra在快速阅读和编写个人记录时非常棒,但除此之外,如果你想将数据提取到其他任何东西进行分析或仓储或查询,Cassandra似乎不是正确的工具......
答案 0 :(得分:2)
Spark是最典型的做法(如你所说)。它有效地使用它并且经常使用非常可靠。 Cassandra并不是专为OLAP工作负载而设计的,但像spark连接器这样的东西有助于缩小差距。 DataStax Enterprise可能有更多选项供您使用,但我不确定他们目前的产品。
您仍然可以使用正常的CQL查询来查询和翻阅整个数据集,但速度并不快。您甚至可以使用ALLOW FILTERING,因为它非常昂贵并且会影响您的群集(为工作负载创建单独的DC并使用LOCOL_CL查询对其有帮助)。您可能还会在该场景中向where子句添加< token()
和> token()
以拆分查询并防止在任何一个协调器上进行太多工作。我们强烈建议组织您的数据以便提高查询效率(例如,如果进行时间切片,将事物放在按时间划分的分区中,并将关键时间线聚集在一起,以便对每个时间段进行顺序读取)。
有点俗气但是cqlsh的CSV转储实际上很快,如果你的数据集足够小,可能对你有用。
我不建议直接去sstables,除非你熟悉内部并使用hadoop或spark。