私は多少新しくなっているので、誰かが助けてくれればすごいでしょう。SQLAlchemy-Marshmallowのクエリが遅くなり、JSONにシリアライズ
私は、私が取り組んでいるFlaskアプリケーション用にSQLAlchemyにいくつかのモデルを設定しました。私はアプリケーションを構築している間に私の呼び出しのどれが遅いのか驚いていますが、私はデータベース(現在はSQLite)にいくつかの偽のデータを埋め込んでいました。
私はメニューと呼ばれるDB内にテーブルを持っています。メニューには、子を持つセクション、子を持つセクション、アイテムがあります。
- メニュー
- セクション
- アイテム
- セクション
私は、4つのセクションを持っており、1つのメニューを照会しています対象:このようなそれぞれ10項目あります。
Flaskのルートでは、Menu.query.get(id)を使用してDBにクエリを行い、marshmallowを使用してJSONにシリアル化します。
私のローカルマシンに戻るには、何かが250ミリ秒かかっています。
私の質問は: 私は250msほど心配してばかげているのですか? 遅さの原因は何ですか? - スキーマ設計が不良ですか? - SQLite/SQL Dbを使用していますか? - 他に何か?
ご協力いただければ幸いです。
さらに、私はもともと2つのレベルをさらに深くしていましたが(アイテムには選択肢があるオプションがあります)、完了するまでには約1秒かかっていたので、ユーザーが特定のアイテムを要求したときに別のエンドポイントに移動しました。
これらは遅延ロードされています。私は参加して何か改善があるかどうかを見直します。ありがとう。 – GMarsh
うわー。それは確かに助けた。その変化を50〜75msまで抑えることができます。好奇心が強い、熱心なローディング対怠け者の欠点? – GMarsh
データベースはJOINを実行しますので、より多くの作業を行いますが、クエリでデータが必要であることがわかっている場合は、データを取得するのが最も効率的です(別の '遅延クエリ'を実行する場合と比較して)。あるいは、デフォルトを遅延読み込みとして使用し、結合するクエリでjoinedload()オプションを使用することもできます。 – Naishy