Scylla gocqlx如何实现类似游标的分页

Scylla gocqlx how to implement pagination similar to a cursor

我正在使用 Scylla 保存用户创建的派对。下面的方法 return 是用户创建的参与方列表。我目前 return 所有各方都不允许分页,但我正在尝试为下面的方法实现分页,但我仍然不太了解 Scylla 如何处理分页。
我的猜测是可以将游标传递给查询。基于此 example 看起来 PageState 可用于传递类似于游标的内容。
我将不胜感激一个简短的解释 PageState 是什么,以及我是否应该使用它来完成基于标记的分页。如果可以提供一个示例来说明如何将新 PageState return 发送到客户端并用于在第二个请求中获取新页面,那也很好。

func (pq *partyQuery) GetByUser(ctx context.Context, uId string) ([]datastruct.Party, error) {
    var result []datastruct.Party
    stmt, names := qb.
        Select(TABLE_NAME).
        Where(qb.Eq("user_id")).
        ToCql()

    err := pq.sess.
        Query(stmt, names).
        BindMap((qb.M{"user_id": uId})).
        PageSize(10).
        Iter().
        Select(&result)
    if err != nil {
        log.Println(err)
        return []datastruct.Party{}, errors.New("no parties found")
    }

    return result, nil
}

在此先致谢,感谢您抽出宝贵时间。

编辑

对于任何感兴趣的人,这就是我转换函数以允许分页的方式:

func (pq *partyQuery) GetByUser(ctx context.Context, uId string, page []byte) (result []datastruct.Party, nextPage []byte, err error) {
    stmt, names := qb.
        Select(TABLE_NAME).
        Where(qb.Eq("user_id")).
        ToCql()

    q := pq.sess.
        Query(stmt, names).
        BindMap((qb.M{"user_id": uId}))
    defer q.Release()

    q.PageState(page)
    q.PageSize(10)

    iter := q.Iter()
    err = iter.Select(&result)
    if err != nil {
        log.Println(err)
        return []datastruct.Party{}, nil, errors.New("no parties found")
    }

    return result, iter.PageState(), nil
}

嗨,这里是 gocqlx 作者。

请看看这个例子https://github.com/scylladb/gocqlx/blob/25d81de30ebcdfa02d3d849b518fc57b839e4399/example_test.go#L482

    getUserVideos := func(userID int, page []byte) (userVideos []Video, nextPage []byte, err error) {
        q := videoTable.SelectQuery(session).Bind(userID)
        defer q.Release()
        q.PageState(page)
        q.PageSize(itemsPerPage)
    
        iter := q.Iter()
        return userVideos, iter.PageState(), iter.Select(&userVideos)
    }

您需要将页面状态发送给调用方。