【发布时间】:2015-09-22 16:39:43
【问题描述】:
我在这方面非常缺乏经验,所以这似乎是一个愚蠢的问题,但请多多包涵。
得到一个mysql DB 和一个查询,通过PHP PDO 看起来像这样:
SELECT p.*, group_concat( distinct c.color) as color, b.breeder_puppy_thumb , b.breeder_name
FROM puppy_list p
JOIN puppies_join_colors pjc ON p.ID = pjc.puppy_ID
JOIN puppy_colors c ON c.ID = pjc.color_ID
JOIN breeder_list b ON b.ID = p.puppy_breeder_id
WHERE p.puppy_breed = :breedName
GROUP BY p.ID
ORDER BY p.price DESC
ORDER BY 子句可以变化(可以按不同的字段排序)。
我通过AJAX 将此查询发送到PHP 文件,该文件将其发送到数据库服务器 - 所以往返,4 跳。
在我的网站中,有分页,它是即时完成的,所有数据都以大 JSON 对象的形式存储在内存中 - 并且处理是在前端框架中的这个 JSON 对象上完成的(基于angularJS - 分页),无需再次查询数据库。
我的第一个问题是:给定这样的查询,返回的行数为数千(数万),对单个查询设置什么安全限制?我应该返回多少行,这样我才不会过度杀伤客户?
我的第二个问题是:我应该将部分处理从 angular 转移到后端框架还是像这样继续?
如果我的问题表述得不够好,请告诉我,我会尽力解决。
【问题讨论】:
-
您喜欢的网站是如何做到的?默认分页 50 但可由用户调整?拥有尽可能多的服务器端。这里有很多分页示例
-
@DrewPierce 很难说。唯一比较的网站(据我所知)是 airbnb.com - 似乎他们在每个页面请求上都对数据库进行查询 - 我试图避免对每个请求执行一个,但可能是 40 步(寻找最大的安全数)。所以第 1 页、第 40 页、第 80 页 .. 将获得下一个数据块。
-
在 s.o. 上查看 url 参数。 (我相信你有)
-
服务器:LIMIT {[offset,] row_count ...
-
@DrewPierce 不完全适用。我正在开发的网站需要表现得(感觉)像一个单页应用程序 - stackoverflow 有部分类似的行为。意思是,当我优化我的网站时,我试图尽可能少地推动来回请求,因此为什么我在想我可以逃脱的返回数据的限制是什么——类似的事情。跨度>