2017-05-16 115 views
1

我正在構建一個數據分析Flask應用程序,它需要大量用戶輸入,執行一些計算,然後將結果投影到各種網頁。我使用熊貓數據框來存儲輸入並執行計算。然後我將DF轉換爲字典並將其存儲在會話對象中。Flask:session max size too

我遇到問題,因爲會話對象只能容納〜4k字節。多個頁面讀取數據,所以我需要一種方法將大量數據(〜5k-50k)從一個請求傳遞到另一個(會話對象完美但是對於較小的內存大小)。

我可以爲會話對象設置更高的存儲限制嗎(我想我不能這麼做,因爲4k是cookie的限制,會話對象是cookie)?或者還有什麼我應該在這裏做的(將字典存儲在數據庫中等)?

編輯:

我想一個可行的替代辦法是抓住從數據庫(在我的情況的MongoDB)的數據,將其存儲在一個局部變量,並且這個變量直接傳遞到模板。這有否定嗎?是否有限制我可以將目錄傳遞給模板的內存量?看下面的例子:

@app.route('/results') 
def results(): 
    # get data I need from database (~5k-50k bytes) 
    data = mongo.db[collection_name].find_one({'key': 'query'}) 
    # pass directory to template (instead of storing in session object) 
    return render_template('results_page.html', data=data) 
+1

該限制與HTTP Cookie相關。你的選擇是:1)存儲在數據庫2)用戶像redis一樣的服務器端緩存系統。堅持數據庫通常不是頭疼的事情。對於這種尺寸的東西,無論您選擇什麼,您都應該能夠獲得優異的性能。 – abigperson

回答

2

是的,這絕對聽起來像是服務器端會話的情況。
最流行的數據庫有code snippets on the official site

這些不應該很難遷移到,因爲它們使用與cookie會話系統相同的SessionMixin接口。

一個更簡單的方法可以是使用Flask-KVSession,謂其

集成瓶是無縫的,一旦擴展加載燒瓶中的應用程序,它透明瓶代替自己的會話管理。任何使用會話的應用程序都應該與Flask-KVSession一樣工作

+0

謝謝!我還發現了[Flask-Sessions](https://pythonhosted.org/Flask-Session/),它有助於服務器端會話。我還有一個問題,請參閱上面的編輯。 –

+0

這似乎很好。我的意思是,數據在發送給jinja模板引擎時不會被複制,只是對同一塊內存的引用。那麼問題是 - 對於HTML頁面來說50kb太大了嗎?不,對我來說似乎很好。另一種方法是通過API端點爲json服務,讓頁面動態加載它,但這可能不是必需的。 –

+0

聽起來不錯。不知道HTML頁面有多少數據太多? –