我一直在努力探讨如何使用GOlang中的驱动程序函数在Apache Cassandra中进行分页。
我有以下代码来获取行
///假设所有其他先决条件。
会议,……
事实证明, WillSwitchPage() 永远不会在循环中的任何一点返回true。不知道为什么。我想这是因为我正在使用它 MapScan() 控制内循环。
WillSwitchPage()
MapScan()
无论如何,我通过在查询循环的en dof中检查页面状态本身的[]字节来找出解决方案。如果驱动程序到达结尾并且未填充页面,则页面状态将具有0个元素,因此我将其用作我的暂停条件。这可能是也可能不是处理驱动程序分页的最优雅或最有效的方式,但它的功能正常。
var pagestate []byte query := session.Query(`select * from keyspace.my_table`) for { query = query.PageState(pagestate) if err := query.Exec(); != nil { panic(err) } iter := query.Iter() for { row := map[string]interface{}{} if !iter.MapScan(row) { pagestate = iter.PageState() break } /// Do whatever I need with row. } if len(pagestate) == 0 { break } }