我希望能够从实时更新的Cassandra表中流式传输数据。是的,它是一个数据库,但是否有办法做到这一点?如果有,应保留偏移量或者可以使用哪些CQL查询?
我知道你特别问的是如何从Cassandra中流式传输数据,但我想建议像Apache Kafka这样的技术更适合你要做的事情。它被许多其他大公司使用,并具有出色的实时性能。
Jay Kreps撰写了一篇开创性的博客文章The Log: What every software engineer should know about real-time data's unifying abstraction,很好地解释了Kafka的目的和设计。博客文章中的一个关键引用总结了Kafka的作用:
将所有组织的数据放入一个中央日志中进行实时订阅。
如果要从Cassandra流式传输数据,您可以使用PageSize选项,如下所示:
iter := cass.Query(`SELECT * FROM cmuser.users;`).PageSize(100).Iter()
以上是一个使用Golang的示例。PageSize的描述如下:
PageSize将告诉迭代器以n个为一组的页面大小获取结果。 这对于迭代大型结果集非常有用,但是将页面大小设置得太低可能会降低性能。 此功能仅适用于Cassandra 2及以上版本。
select * from table
的回答实际上没有回答原始问题-作者想要只获取自上次扫描以来的更改。最好的答案来自@RussS...如果你对令牌范围扫描感兴趣-我有一个关于它的单独答案:https://dev59.com/nbDma4cB1Zd3GeqPEv10#54108700 - Alex Ott