我正在使用 Scylla 來保存用戶創建的派對。下面的方法回傳用戶創建的各方串列。我目前在不允許分頁的情況下回傳所有各方,但我正在嘗試為下面的方法實作分頁,但我仍然不太了解 Scylla 是如何處理分頁的。
我的猜測是可以將游標傳遞給查詢。根據這個例子,看起來PageState可以用來傳遞類似于游標的東西。
我會很感激一個簡短的解釋是什么PageState以及我是否應該使用它來完成基于令牌的分頁。如果可以提供一個示例來說明如何將PageState新頁面回傳給客戶端并用于在第二個請求中獲取新頁面,那也很棒。
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
}
uj5u.com熱心網友回復:
嗨 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)
}
您需要將頁面狀態發送給呼叫者。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/438845.html
上一篇:低級TLS握手?
