2013-02-01 20 views
2

我是一家主要製作工具的網絡營銷公司的程序員。這些工具有certian要求:如何處理海量數據集並提供實時用戶體驗

  • 他們在瀏覽器中運行,必須在所有這些工作。
  • 用戶要麼上傳某些東西(.csv)來處理它們,要麼提供一個URL並調用API來檢索關於它的信息。
  • 他們正在移動數千行數據(認爲大型數據庫)。這些工具通常會在幾個小時內運行,通常會在夜間運行。
  • 用戶必須能夠在處理他們的信息並向他們呈現時觀看直播。

目前我們正在寫PHP,MySQL和Ajax。

我的問題是如何處理大量的數據並在工具運行時提供用戶體驗。目前我使用自定義隊列系統發送ajax調用並將行插入表或數據到div中。

這種方法是在屁股巨大的痛苦,不可能是正確的方法。我應該使用模板系統還是有更好的方法來刷新大量數據的頁面塊。我的意思是很多數據,因爲我們已經接近最大化PHP內存,並且是我們一直在尋找的東西。

此外,我很想做到這些工具可以自己運行在服務器上。我的意思是上傳一個.csv並關閉瀏覽器窗口,然後在工具完成時發送一封電子郵件給用戶。

有沒有人有任何比使用.ajax調用更好的方法(編程標準)?謝謝。


我想更新一些筆記,因爲任何人都有同樣的問題。我期待到下面,看看哪個是最好的解決辦法:

  • SlickGrid /數據表
  • 的Gearman
  • web套接字
  • 棘輪
  • Node.js的

這些都是沒有特別的順序,我選擇的將取決於我的問題是什麼,以及我的其他部門可以使用什麼。我會在選擇黃金框架時進行更新。

+0

你應該看看網絡套接字。而不是一遍又一遍地發送所有的數據,只是發送新的數據。 – Rob

+0

我曾經寫過類似的東西。你想要我的建議嗎?忘記PHP和JS。回到設計委員會,用C++編寫適當的應用程序。這是不值得的時間和精力 - 它永遠不會有效地工作,特別是如果你有複雜的對象之間的關係(數據行)。 – MarcinWolny

+0

我正在運行一個包含2200個用戶和200多個表的數據庫。最大的數據集不到200萬條記錄,其中包括地理空間多邊形數據。我使用的是5年前的2GB雙核電腦。即使我計算跨北美郵政編碼的多邊形中心的相對距離,我也沒有看到任何類型的服務器滯後。當你說你正在運行幾個小時執行的進程,有時甚至是一夜之間,我擔心還有其他事情與你的數據集的大小沒有任何關係。你正在處理多少個數據集? – Strixy

回答

1

首先,你不能通過Ajax處理大數據。爲了讓用戶能夠實時觀看流程,您可以使用網絡套接字來執行此操作。正如你在PHP方面經驗豐富,我可以建議你Ratchet這是相當新的。

在另一方面,爲了使計算和存儲大數據,我會用NoSQL的替代MySQL的

+0

我同意100%與您的第一個聲明Ajax不是答案在這裏發生了什麼是我被告知複製一個工具,我思想只用於較小的數據集和ajax處理它就好了,然後範圍蠕變發生....所以現在我正在嘗試學習正確的方式,所以我再也不會將自己逼到Ajax地獄:)我會閱讀Rachet和NoSQL非常感謝你。 – RachelC

1

因爲你是那種掐時間已經,遷移到Node.js未必是時間敏感。它還會幫助告知用戶何時結果準備就緒,因爲它可以在不進行輪詢的情況下進行瀏覽器通知推送。由於它使用Javascript,你可能會發現你的一些客戶端代碼是可重用的。

1

我想你可以用某種隊列管理器在後臺運行你所需要的東西。我使用類似於CakePHP的東西,它使我可以異步地在後臺運行時間密集型進程,因此瀏覽器不需要打開。

另一個方面是它的可擴展性,因爲它很容易增加隊列工作人員的數量。

基本上使用PHP,您只需要一個每隔一段時間運行一次的cron作業,該作業啓動一個爲隊列數據庫檢查待處理任務的工作人員。如果沒有找到,它會一直運行,直到出現。

+0

謝謝你的回答。正在把它切換到CakePHP,也可能是Node.js.這只是其中一種方式,然後隨着時間的推移完全改變。去範圍蠕變耶! – RachelC

+0

在這種情況下,希望你能夠很快回到新的問題上。但嚴重的是,聽起來像一個有趣的設置,很想在我的項目中的某個時刻將兩者結合起來。 –

相關問題