使用 AWS DynamoDB 和 PHP 进行分页

Kam*_*aul 5 php pagination amazon-dynamodb

有人对从表中分页记录有任何想法。其实我想用DynamoDb在php中创建一个分页组件。

似乎不可能像 <first> <prev> 1,2,3, 4 ,5... <next> <last>这样的分页。

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

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

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

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

Jus*_*nas 2

OFFSET是的,你是对的, DynamoDB 中没有。但仅使用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;
}
Run Code Online (Sandbox Code Playgroud)

$this->_client指 DynamoDb 客户端对象。
基本上我循环遍历所有条目,LastEvaluatedKey直到到达所需的页面。
要获取表中的总条目,请调用$this->scan($this->tableName(), [], null, null)['Count'];(即 - 没有任何搜索条件并且没有分页,就像在正常分页函数中一样)。

  • 如果没有大量缓存,这对于除前几个页面之外的任何页面的性能都会非常糟糕 (2认同)