我正在構建由用戶執行以下操作的Web應用程序:存儲大量的會話級數據集?
瀏覽和搜索對含有數百萬個條目的Solr的服務器。 (這部分應用程序工作得很好。)
選擇此數據的特權片段(某些特定搜索的結果),並將其暫時保存爲「數據集」。 (我希望數據集大小限制在真的大,比方說50萬個結果。)
對該數據集執行一些雜項操作。
(的前端內置的Rails的,但我懷疑這是如何解決這方面的問題確實有關。)
第二步,如何檢索步驟3中的數據,是什麼給了我麻煩。我需要暫時保存數據集,在需要時恢復它們,並在一段時間後過期。問題是,我的結果有SHA1校驗和ID,所以每個ID是48個字符。一個500,000條記錄數據集,即使我只存儲ID,也是22 MB的數據。所以我不能只有一個數據庫表,併爲每個用戶構建的數據集引入一行。
有沒有人曾經需要這樣的事情?解決這個問題的最好方法是什麼?我應該爲用戶構建的每個數據集生成單獨的表嗎?如果是這樣,一段時間後過期/刪除這些表的最佳方法是什麼?如果需要的話,我可以部署一個MySQL服務器(儘管我還沒有一個,所有的數據都在Solr中),而且如果還有別的東西符合要求,我也會接受一些更瘋狂的軟件。
編輯:一些更詳細的信息,以迴應傑夫費蘭下面。
數據對象是不可變的,靜態的,並完全駐留在Solr數據庫中。它可能更有效的文件,但我寧願(因爲搜索和瀏覽的原因)保持他們在哪裏。數據和數據集都不需要分佈在多個系統中,我不認爲我們會得到這種負載。現在,整個該死的東西都在一個虛擬機內運行(如果我到達那裏,我可以穿過那座橋)。通過「在需要時恢復」,我的意思是這樣的:用戶運行一個非常精心製作的搜索查詢,從而爲他們提供一組對象作爲結果。他們然後決定他們想操縱那套。當他們(作爲一個隨機例子)點擊「按年份繪製這些對象」按鈕時,我需要能夠檢索全套對象ID,以便我可以將它們帶回Solr服務器並運行更多查詢。我寧願存儲對象ID(而不是搜索查詢),因爲當我們添加更多對象時,結果集可能會在用戶下方更改。
「while」大致是用戶會話的長度。然而,有一個複雜因素可能會影響到:我可能會需要實施一個工作隊列,以便推遲處理,在這種情況下,「只要需要處理您的工作」就需要「時間」。
感謝傑夫刺激我提供正確的進一步細節。
已編輯的問題,讓我知道如果添加的信息有幫助! –
編輯的答案 - 希望有所幫助! –
太棒了 - 謝謝!我沒有考慮過,你可能會得到相當大的吞吐量(類似於滾動表)。 (如你所見,數據庫設計不是我的特長!) –