Django - Dojo / Dgrid - 如何管理LARGE数据集

时间:2015-06-19 20:36:20

标签: mysql django dojo django-rest-framework dgrid

6.30.15 - 我如何使这个问题更好,更有益于其他人?反馈会有所帮助。谢谢!

我正在开发一个处理/管理非常大的数据集的Web应用程序 - 目前任何类型的重负载都会导致浏览器锁定 - 无论我是在Django Rest Framework API中还是在Dojo /中Dgrid。这是一个双重问题。

我已经研究过,无法在任何一方找到明确的方法。

如何限制数据库一次发送到Django Rest Framework和/或Dojo Dgrid的数量。 Dgrid从Django Rest API中提取数据。 DRF直接从MySQL数据库中提取数据。

如果我可以控制一次发送多少数据,那么希望它不会锁定浏览器。任何建议,建议,帮助,示例都会非常有帮助。提前谢谢!

更新6.22.15 -

好吧,我终于得到了分页工作,它显示了标题中的限制/偏移量。 :) 好极了!!!!我还可以在Response标头中看到数据。然而......网格不会填充,我不断得到这个奇怪的错误:     TypeError:transform(...)为null

return transform(value, key).toString();

instrum...tion.js (line 20)

之前我已经收到此错误,但我从来没有找到解决方案。经过研究,我无法找到如何修复或甚至是什么。任何帮助都将非常感谢!!在WEEKS和WEEKS将我的头靠在墙上之后,我非常接近让这件事正常工作。请帮忙! :)提前致谢!!!

第二次更新 - 这是之前帖子的答案 - 但我仍然不确定如何修复它。当我解决另一个问题时 - 它已经消失了一段时间,但我仍然不知道如何纠正这个问题。

Problem 3: "transform(...) is null return transform(value, key).toString();"

This sounds largely tangential to the original issue, but the most common cause is a widget template that is referencing a property via ${...} that doesn't actually exist in the widget.

2 个答案:

答案 0 :(得分:2)

我不知道如何在DRF和数据库之间的层上回答这个问题,但正如其他SO问题(如this one中所讨论的那样),DRF允许您限制通过页面或请求发送的数据量偏移/限制参数。

根据您的问题的措辞,听起来客户端实际上要求太多数据。我将概述流程应该如何工作,所以希望你能发现你错过的东西:

  1. 设置了一个dgrid实例,其中collection引用了dstore/Rest实例
  2. dstore/Rest实例是使用appropriate properties set创建的。在这种情况下,基于DRF Documentation
    • useRangeHeaders: false(这已经是默认设置)
    • rangeStartParam: 'offset'
    • rangeCountParam: 'limit'
  3. 因此,当网格呈现时,您应该看到发送到您的服务器的请求,例如endpoint?offset=0&limit=25 - 如果您没有看到这两个参数,那就是您获取太多数据的原因
  4. 服务器需要使用相应的OFFSET和LIMIT
  5. 查询数据库
  6. 服务器必须提供具有预期项目数的响应(除非它首先到达数据集的末尾,这应该由响应中的total属性反映,假设在之前的定制中所以我联系使用了答案)
  7. 最终,如果服务按预期工作,则网格应该一次仅请求少量项目,并且应该只触发一个或两个请求在任何给定的时间。

答案 1 :(得分:1)

会添加评论,但目前没有足够的声誉....

您的问题非常普遍,但一种策略是允许用户一次选择他们希望查看的项目数,然后允许用户使用“下一个x项”和“上一页”来浏览数据x项的按钮。然后,您的数据对象查询将使用当前位置+/-'x'作为索引范围,以减少发送到浏览器的数据对象的数量。这是Ebay,亚马逊,Google或任何需要显示数千个项目的网站的基本流程。 “下一个”和“上一个”操作可以作为POST请求连接。