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 个参数。
根据您问题的措辞,听起来客户端实际上请求了太多数据。我将概述流程应该如何运作,希望您能发现您错过的内容:
- dgrid 实例设置为
collection
引用 dstore/Rest
实例
dstore/Rest
实例是用 appropriate properties set. In this case, based on the DRF Documentation 创建的:
useRangeHeaders: false
(这已经是默认值)
rangeStartParam: 'offset'
rangeCountParam: 'limit'
- 因此,当网格呈现时,您应该会看到发送到服务器的请求,例如
endpoint?offset=0&limit=25
- 如果您没有看到这两个参数,这就是您获取过多数据的原因
- 服务器将需要使用相应的 OFFSET 和 LIMIT 查询数据库
- 服务器必须提供一个包含预期项目数的响应(除非它首先到达数据集的末尾,这应该由响应中的
total
属性 反映,假设使用了我链接的上一个 SO 答案中的定制)
最终,如果服务按预期工作,网格应该一次只请求少量项目,并且在任何给定时间应该只触发一个或两个请求。
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 和数据库之间的层上回答这个问题,但是正如
根据您问题的措辞,听起来客户端实际上请求了太多数据。我将概述流程应该如何运作,希望您能发现您错过的内容:
- dgrid 实例设置为
collection
引用dstore/Rest
实例 dstore/Rest
实例是用 appropriate properties set. In this case, based on the DRF Documentation 创建的:useRangeHeaders: false
(这已经是默认值)rangeStartParam: 'offset'
rangeCountParam: 'limit'
- 因此,当网格呈现时,您应该会看到发送到服务器的请求,例如
endpoint?offset=0&limit=25
- 如果您没有看到这两个参数,这就是您获取过多数据的原因 - 服务器将需要使用相应的 OFFSET 和 LIMIT 查询数据库
- 服务器必须提供一个包含预期项目数的响应(除非它首先到达数据集的末尾,这应该由响应中的
total
属性 反映,假设使用了我链接的上一个 SO 答案中的定制)
最终,如果服务按预期工作,网格应该一次只请求少量项目,并且在任何给定时间应该只触发一个或两个请求。