【问题标题】:Django - Dojo/Dgrid - how to manage LARGE data setsDjango - Dojo/Dgrid - 如何管理大型数据集
【发布时间】:2015-09-05 22:50:55
【问题描述】:

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

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

我进行了研究,但在任何一方都找不到明确的方法。

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

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

更新 6.22.15 -

好吧,我终于让分页工作了,它在标题中显示了限制/偏移量。 :) 耶!!!!我还可以在响应标头中看到数据。但是......网格不会填充,我不断收到这个奇怪的错误: TypeError: transform(...) 为空

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

instrum...tion.js (line 20)

我之前遇到过这个错误,但我一直无法找到解决方法。经过研究,我找不到太多关于如何修复或实际上是什么的信息。对此的任何帮助将不胜感激!在我的头撞到墙上的几个星期之后,我离让这个东西正常工作很近了。请帮忙! :) 先谢谢了!!!

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

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.

【问题讨论】:

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


    【解决方案1】:

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

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

    1. 使用 collection 引用 dstore/Rest 实例设置 dgrid 实例
    2. dstore/Rest 实例是使用appropriate properties set 创建的。在这种情况下,基于DRF Documentation
      • useRangeHeaders: false(这已经是默认设置了)
      • rangeStartParam: 'offset'
      • rangeCountParam: 'limit'
    3. 因此,当网格呈现时,您应该会看到发送到服务器的请求,例如endpoint?offset=0&limit=25 - 如果你没有看到这两个参数,那就是你得到太多数据的原因
    4. 服务器将需要使用相应的 OFFSET 和 LIMIT 查询数据库
    5. 服务器必须提供带有预期项目数的响应(除非它首先到达数据集的末尾,这应该由响应中的total属性反映,假设之前的SO答案中的自定义我链接已使用)

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

    【讨论】:

    • 好的..我现在在标题中看到了limit.offset...耶!! :) 但是我一直收到这个错误,我研究了几个星期,还没有发现任何明确的内容。上面更新了答案
    • 根据您的问题和dgrid issue you commented on,我怀疑您的服务仍然没有像我在回答的第 5 步中建议的那样报告total 属性。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 2023-03-29
      • 2013-11-08
      • 1970-01-01
      相关资源
      最近更新 更多