2015-06-19 48 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請求連線。