2011-02-05 71 views
2

由於我們在應用程序中收集的數據的性質,它允許用戶能夠搜索1,000,000多行數據,並且儘可能快地接收結果客戶端。如何顯示大量的報表數據客戶端(mongoDB,JS)

我們玩過各種技術,目前正在試驗文檔存儲引擎MongoDB。我們實際上是以我們希望在客戶端展示的方式將報告數據存儲在Mongo中。

但是,這是我想要依靠您的經驗。我們已經使用了一些報表插件,比如datatables.net,但是當客戶端請求可能匹配超過100,000條記錄的數據時,將這些數據傳遞給客戶端的延遲時間可能需要一分鐘才能將JSON從服務器導出到客戶。

我已經嘗試通過只向客戶端發送1000個結果來過濾結果集,但是如果用戶決定對列進行排序呢?整個請求必須再次執行,並將第1000個結果加載到客戶端。

但是,如果客戶端選擇在列中搜索,結果必須重新獲取。所有這些問題都不存在,當全部的數據已經被加載到客戶端。

所以基本上我的問題是,怎樣才能高效快速地讓客戶搜索和操作大型數據集,但將結果以一種不需要每次結果一次性發送到客戶端的方式傳遞給客戶端,因此保持客戶端儘可能輕量級?

我確定必須有一些MongoDB的前端數據類型插件,可能通過node.js直接進行JSON通信,但是我找不到任何東西!

感謝您的幫助。

+1

值得注意的是,MongoDB在[BSON](http://bsonspec.org/)中存儲對象,所以仍然存在轉換爲JSON的情況。我懷疑你看到的大部分延遲只是由於必須傳輸和解析客戶端的數據量。 – 2011-02-05 19:06:36

回答

5

聽起來像你的問題在於你試圖通過客戶端的數據量巨大。什麼屏幕顯示1000行數據?

使用開始索引,排序順序和頁面大小發出請求,並僅按該順序提取大量數據並將其返回給客戶端。

查看jqGrid,例如,將客戶端網格傳遞給服務器,並且一次只檢索一個頁面。使用MongoDB的jqGrid和正確的索引是非常快的。

+0

這看起來像一個偉大的表插件,謝謝!我會對此有一個很好的發揮。 – 2011-02-06 14:49:28

1

MongoDB非常棒,但是您可能還希望將這些內容編入MongoDB之外,以提供您描述的性能和靈活性。看看Apache SolrElastic Search。這兩個都基於Lucene,它具有非常強大的搜索功能。特別是您可以以非常高效的方式執行帶分頁和排序的查詢。這兩種工具都可以用JSON返回結果集。有了這麼多的記錄,並且使用基於Lucene的東西,您還將能夠非常輕鬆地提供更高級的過濾功能,例如瀏覽和屏蔽。

+0

Apache Solr很甜! – Stephen 2011-02-06 07:44:31