我正在制作一个需要对帖子进行分页的社交应用程序。
这是数据库:
id | post | time |
---------|---------------|----------|
1 | "oldest" | 9:00 |
2 | "old" | 10:00 |
3 | "new" | 11:00 |
4 | "newest" | 12:00 |
在我的应用中:
最新的帖子在最上面,我一次只加载 2 个帖子。
假设前 2 个数据已加载到应用中
- 4 (12:00) newest
- 3 (11:00) new
用户向下滚动,应用程序检测到已到达最后一篇文章,因此它请求 PHP 文件按以下顺序再下载 2 个:
- 2 (10:00) old
- 1 (9:00) older
它工作正常。以下是我的代码:
$qry = $db->prepare('SELECT id, post
FROM posts
WHERE id < :lastLoadedId
ORDER BY time DESC LIMIT 0, 2');
问题/疑问:
我的服务器会自动删除非常旧的帖子(为了节省空间)
假设一段时间后 mysql 表达到了它的限制(最后可用的 id 是 2,147,483,647)
然后我需要从 1 开始重新给 ids:
问题来了
id | post | time |
--------------|---------------|----------|
1 | "new" | 11:00 |
2 | "newest" | 12:00 |
2,147,483,646 | "oldest" | 9:00 |
2,147,483,647 | "old" | 10:00 |
前 2 个数据再次加载到我的应用中。
- 2 (12:00) newest
- 1 (11:00) new
当它尝试加载更多内容时,它会搜索小于数字 2 的 ID,但由于 2,147,483,647 更大,因此它不会返回“最旧”和“旧”帖子。
我应该担心这个吗?
大公司如何处理如此多的数据?过了一会儿,他们开始了一张新 table ?
最佳答案
根据MySQL官网,unsigned bigint最大可达18446744073709551615,如果24x7每秒插入100万条记录,需要584542年才能达到极限。所以我认为您不必太担心。
这是一个例子:
CREATE TABLE foo (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
)
请注意,20代表要显示的位数,与存储无关。
关于php - Mysql 分页 - 按 id 或时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51735780/