php - 使用 AWS DynamoDB 和 PHP 进行分页

标签 php pagination amazon-dynamodb

有人知道对表中的记录进行分页吗?实际上我想用 DynamoDb 在 php 中创建一个分页组件。

似乎不可能像 1,2,3,4,5... 这样的分页。

因为 Dyanmodb 只是为我们提供了 LIMIT 子句,通过它我们可以读取某些 no。的记录,我们可以通过 LastEvaluatedKey 处理下 n 条记录。那么如果我想直接跳到第5页,怎么可能呢?

据我了解,我们无法在分页中显示页码。我们能做的就是读取特定限制的记录并提供 NEXT 链接以检索下 n 条记录。

分页是任何 Web 应用程序的基本功能,如果迁移到 DynamoDb 等云数据库,我们如何实现?

请提出您的意见和建议。谢谢

最佳答案

是的,你没看错,DynamoDB 中没有OFFSET。但是仅使用 LimitLastEvaluatedKey,我实现了这个功能:

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/

相关文章:

php - wordpress 3.8.1 类别页面 2 错误 404 未找到/自定义帖子类型

amazon-web-services - 使用 UpdateItemEnhancedRequest DynamoDb java sdk2 更新特定属性

php - 选择条目值为 1 的列名称

php - 将 Zend 用于非常小的网站的任何缺点

PHP:无法加载动态库 intl.so (OSX)

php - 如何在 Laravel 中按 $category->companies 进行分页

CouchDB 中的分页?

java - DynamoDB 中的动态属性?

amazon-web-services - AWS Lambda - 从 Lambda 队列中删除重复出现的失败事件

PHP 生成的文件列表 : any way to have line breaks between different letters?