2015-06-19 20 views
-1

6.30.15 - 如何让这个问题更好,更有益于其他?反馈会很有帮助。谢谢!Django - Dojo/Dgrid - 如何管理大型数据集

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

我已经研究过,无法找到明确的方法来做到这一点。

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

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

修订15年6月22日 -

好吧,我终于得到了分页工作,它显示在头偏移极限/。 :) 好极了!!!!我还可以在Response头中看到数据。无论其...网格将不填充和我不断收到这个奇怪的错误: 类型错误:变换(...)为空

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. 

回答

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. 服务器必须提供一个响应项的预期数(除非它到达数据首先被设置,这应该通过在响应中total属性反映的末端,假设在先前定制SO回答我连接时)

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

+0

好吧..我现在看到在标题limit.offset ...耶! :)但我不断收到这个错误,我已经研究了几个星期,并没有发现任何明确的内容。 – Johnson

+0

上面的回答基于你的问题和你评论过的[dgrid问题](https://github.com/SitePen/dgrid/issues/1055#issuecomment-114164782),我怀疑你的服务还没有报告总数如我在答复的第5步中所建议的那样。 –

1

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

你的问题是相当普遍的,但是一个策略是让用户选择项目的数量,他们希望一次查看,然后允许用户使用'下一个x项目'和'预先x项目'按钮翻阅数据。您的数据对象查询将使用当前位置+/-'x'作为索引范围,以减少发送到浏览器的数据对象的数量。这是易趣,亚马逊,谷歌或任何可以显示数千个项目的网站的基本流程。 'next'和'prev'操作可以作为POST请求连线。