2017-05-16 37 views
1

私は大量のユーザー入力を受け取り、計算を実行し、その結果をさまざまなWebページに投影するデータ分析Flaskアプリケーションを構築しています。私はpandas Dataframeを使用して入力を保存し、計算を実行しています。次に、DFを辞書に変換し、セッションオブジェクトに格納します。Flask:セッションの最大サイズが小さすぎる

セッションオブジェクトが〜4kバイトしか保持できないという問題があります。いくつかのページがデータを読み込むので、私はこの大量のデータ(〜5k〜50k)を1つのリクエストから別のリクエスト(セッションオブジェクトは完全には小さなメモリサイズ用)に渡す手段が必要です。

セッションオブジェクトの記憶域の上限を設定することはできますか(4kはCookieの制限で、セッションオブジェクトはCookieではないと思います)。それとも、私がここでやるべきことがありますか?(データベースに書き込むなど)

EDIT:

私は実行可能な代替案は、データベース(私の場合は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があります。

これらは、同じSessionMixinインターフェイスをCookieセッションシステムとして使用するため、移行しにくいはずです。

アンも簡単なアプローチは、拡張子がフラスコのアプリケーションのためにロードされると

フラスコとの統合は、シームレスであることを主張Flask-KVSessionを、使用することができ、それは透過的にフラスコ独自のセッション管理を置き換えます。セッションを扱うアプリケーションは、Flask-KVSessionと同じように動作します。

+0

ありがとう!私は[Flask-Sessions](https://pythonhosted.org/Flask-Session/)も見つけました。これはサーバー側のセッションに役立ちます。もう一つ質問があります。上記の編集をご覧ください。 –

+0

それはいいようです。私は、それがジンジャーのテンプレートエンジンに送信されたときにデータがコピーされないことを意味します。これは同じメモリへの参照だけです。それから、HTMLページでは50KBが大きすぎますか?いいえ、私にとってはうまくいくようです。代わりに、APIエンドポイントを介してjsonにサービスを提供し、ページに動的にロードさせることもできますが、ここではおそらく必要ありません。 –

+0

いいですね。どのくらいのデータがHTMLページにとってどれほどの量ですか? –

関連する問題