有人知道对表中的记录进行分页吗?实际上我想用 DynamoDb 在 php 中创建一个分页组件。
似乎不可能像
因为 Dyanmodb 只是为我们提供了 LIMIT 子句,通过它我们可以读取某些 no。的记录,我们可以通过 LastEvaluatedKey 处理下 n 条记录。那么如果我想直接跳到第5页,怎么可能呢?
据我了解,我们无法在分页中显示页码。我们能做的就是读取特定限制的记录并提供 NEXT 链接以检索下 n 条记录。
分页是任何 Web 应用程序的基本功能,如果迁移到 DynamoDb 等云数据库,我们如何实现?
请提出您的意见和建议。谢谢
最佳答案
是的,你没看错,DynamoDB 中没有OFFSET
。但是仅使用 Limit
和 LastEvaluatedKey
,我实现了这个功能:
public function scan($table, $filter = [], $select = null, $limit = 2)
{
$page = isset($_GET['page']) ? $_GET['page'] : 0;
$options = [
'TableName' => $table,
'Count' => true,
];
if (!empty($limit)) {
$options['Limit'] = $limit;
}
if (!is_null($select)) {
$options['Select'] = $select;
}
if (!empty($filter)) {
$options['ScanFilter'] = $filter;
}
$results = $results = $this->_client->scan($options);
while ($page > 0 && isset($results['LastEvaluatedKey'])) {
$results = $results = $this->_client->scan($options);
$options['ExclusiveStartKey'] = $results['LastEvaluatedKey'];
$page--;
}
return $results;
}
$this->_client
引用 DynamoDb 客户端对象。
基本上,我使用 LastEvaluatedKey
遍历所有条目,直到到达所需的页面。
要获取表中的总条目,请调用 $this->scan($this->tableName(), [], null, null)['Count'];
(即 - 没有任何搜索条件并且没有分页,就像正常的分页功能一样)。
关于php - 使用 AWS DynamoDB 和 PHP 进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23443683/