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

Django - Dojo/Dgrid - how to manage LARGE data sets

6.30.15 - 我怎样才能使这个问题更好,对其他人更有帮助?反馈会很有帮助。谢谢!

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

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

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

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

更新 6.22.15 -

好吧,我终于让分页工作了,它在 headers 中显示了 limit/offset。 :) 好极了!!!!我还可以在 Response headers 中看到数据。然而......网格不会填充,我不断收到这个奇怪的错误: TypeError: transform(...) 为 null

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

instrum...tion.js (line 20)

我以前遇到过这个错误,但一直找不到解决办法。经过研究,我找不到太多关于如何修复的信息,甚至是它是什么。对此的任何帮助将不胜感激!在我的头撞墙几周又几周之后,我已经很接近让这个东西正常工作了。请帮忙! :) 提前致谢!!!

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

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.

会添加为评论,但目前信誉不足....

您的问题很笼统,但一种策略是允许用户 select 他们希望一次查看的项目数,然后允许用户使用 'next x items' 和 'prev x items' 按钮。然后,您的数据对象查询将使用当前位置 +/- 'x' 作为索引范围,以减少发送到浏览器的数据对象的数量。这是 Ebay、Amazon、Google 或任何有数千件商品要展示的网站的基本流程。 'next' 和 'prev' 操作可以连接为 POST 请求。

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

根据您问题的措辞,听起来客户端实际上请求了太多数据。我将概述流程应该如何运作,希望您能发现您错过的内容:

  1. dgrid 实例设置为 collection 引用 dstore/Rest 实例
  2. dstore/Rest 实例是用 appropriate properties set. In this case, based on the DRF Documentation 创建的:
    • useRangeHeaders: false(这已经是默认值)
    • rangeStartParam: 'offset'
    • rangeCountParam: 'limit'
  3. 因此,当网格呈现时,您应该会看到发送到服务器的请求,例如endpoint?offset=0&limit=25 - 如果您没有看到这两个参数,这就是您获取过多数据的原因
  4. 服务器将需要使用相应的 OFFSET 和 LIMIT 查询数据库
  5. 服务器必须提供一个包含预期项目数的响应(除非它首先到达数据集的末尾,这应该由响应中的 total 属性 反映,假设使用了我链接的上一个 SO 答案中的定制)

最终,如果服务按预期工作,网格应该一次只请求少量项目,并且在任何给定时间应该只触发一个或两个请求。