有人知道从表中分页记录吗。实际上,我想用DynamoDb在php中创建一个分页组件。
它似乎是不可能给分页喜欢
因为Dyanmodb只提供了LIMIT子句,通过它我们可以读取一定数量的记录,并且可以通过LastEvaluatedKey处理接下来的n条记录。所以如果我想直接跳到第五页,怎么可能呢?
据我所知,我们不能在页码中显示页码。我们可以做的就是读取一定数量的记录,并提供下一个链接来检索下一个n个记录。
分页是任何Web应用程序的基本功能,如果迁移到像DynamoDb这样的云数据库,我们如何实现?
请提供您的意见和建议。谢谢
再加上@Justinas的答案,如果需要随机访问(即跳转到任意页面),Dynamo的分页性能将非常糟糕。但是,如果只执行下一页和上一页,则可以传递LastEvaluatedKey
,并将由于扫描而产生的开销保持在最低限度。
正如注释中所述,您绝对应该尽可能多地缓存结果。至少,可以缓存LastEvalue atedKey
结果,以便在用户浏览结果时不需要为每个分页请求重新计算它们。这里有一个例子来说明我的意思:
假设您有一个具有如下模式的表,其中CommentID
是散列键。
CommentID | Author | Comment | ...
-----------+--------+---------+------------
1 | Joe | Foo | ...
2 | Joe | Bar | ...
3 | John | Baz | ...
4 | Joe | FooBar | ...
5 | Jane | BooBaz | ...
6 | Joesie | Blah | ...
7 | Johnny | Blahaha | ...
当您开始分页时,假设您每页请求3条评论,您将获得第一页结果和LastEvalue atedKey=3
;然后如果您对第2页进行第二次扫描请求,使用ExclusiveStartKey=3
,您将获得<要获得第3页,您需要使用LastEvalue atedKey=6进行另一次扫描。
您可以看到,在没有任何缓存的情况下,要获取第3页,您需要执行三次扫描(如果您在第3页之前还请求了第1页和第2页,则其中两次扫描会重复)。因此,我建议的优化是为每个页面存储相应的密钥。你会得到这样一张地图:
Page | Hash-Key
------+----------
1 | null
2 | 3
3 | 6
.. | ...
当你翻阅结果时,这些值会被填写出来。现在,当用户想要第3页时,您只需扫描一次,使用6
作为ExclusiveStartKey
。
当然,对于每个页面大小,您都需要这样一个查找表,并且只有在添加(或删除)新行之前,该表才会准确。也就是说,如果您有很多请求,那么存储分页缓存所需的额外内存将非常值得。剩下的就是根据在表中添加(或删除)新数据的频率,为分页缓存设置合理的过期时间。。
是的,你说得对,DynamoDB中没有偏移量。但仅使用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-
本文向大家介绍高效mongodb的php分页类(不使用skip),包括了高效mongodb的php分页类(不使用skip)的使用技巧和注意事项,需要的朋友参考一下 mongodb分页skip+limit分页要先查出所有结果再去跳过,这样如果查询页面越往后效率越低。 如果能够通过查询条件查出每页结果的最后一条记录,在用最后一条记录作为查询条件去查下一页,这样每次都查询页面size条记录,效率不会差。
问题内容: 已关闭 。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我正在寻找一个使用jQuery,PHP和MySQL的很好的Ajax分页教程。我遇到的那些不好。 因此,如果有人可以推荐一个好的网站/教程,那就太好了。谢谢。 编辑 这是一些不好的教程。 网站1 网站2 网站3 问题答案: 这是 CakePHP的 一个教程
本文向大家介绍php 使用array函数实现分页,包括了php 使用array函数实现分页的使用技巧和注意事项,需要的朋友参考一下 代码很简单,就不多废话了。 以上就是使用array函数实现分页的核心代码了,希望大家能够喜欢。
本文向大家介绍php数组使用规则分析,包括了php数组使用规则分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了php中数组的使用规则。分享给大家供大家参考。具体分析如下: 数组在php中处于灰常重要的地位。字符串、图片、数码、视频等值都以数组的形式存在,所以了解清楚数组的各种规则十分必要。 1、键、值。 数组的基本形式: key=>value,其中,key只能是两种,integer、s
问题内容: 我需要找到访问我的网站的用户屏幕的屏幕分辨率? 问题答案: 您无法使用纯PHP做到这一点。您必须使用JavaScript来完成。有几篇有关如何执行此操作的文章。 本质上,您可以设置cookie,甚至可以执行一些Ajax来将信息发送到PHP脚本。如果使用jQuery,则可以执行以下操作: jQuery: PHP(some_script.php) 所有这些实际上都是最基本的,但是它应该可以
本文向大家介绍php中stdClass的用法分析,包括了php中stdClass的用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了php中stdClass的用法。分享给大家供大家参考。具体分析如下: stdclass在php中是预定义的几个类之一,是zent保留的一个类。实际上它是PHP提供的一个基类,就是一个空白的类,里面什么都没有,我们可以实例化它,然后定义一系列的变量,通过它