API での SQL トランザクションの最適化
P粉343408929
2023-08-18 13:24:59
<p>最近就職面接があり、少し宿題をもらいました。その後、更新エンドポイントにクエリとトランザクションの不必要な組み合わせがあるというフィードバックを受け取りました。 </p>
<pre class="brush:php;toolbar:false;">export const update = async (req: リクエスト、res: レスポンス、next: NextFunction) => {
試す {
const reportId = parseInt(req.params.id)
const {名前、年齢、情報} = req.body
const report = await ReportModel.findOne({
どこ: {
id: レポートID
}
})
if (!report) return next(new EntityNotExistError("レポートが存在しません"))
ReportModel.update を待ちます({
名前、
年、
情報
}、{
どこ: {
id: レポートID
}
})
const _report = await ReportModel.findOne({
どこ: {
id: レポートID
}
})
res.json({
メッセージ: 「レポートは正常に編集されました」、
レポート: _レポート
})
} キャッチ (エラー) {
次へ戻る(エラー)
}
}</pre>
<p>ご覧のとおり、最初のクエリはエンティティが存在するかどうかを確認し、次にエンティティの更新を実行し、最後のクエリは更新されたエンティティを返します。
データベースとの通信を最適化する方法はありますか? </p>
コードには、1 つの更新操作に対してデータベースとの 3 つの異なる対話が含まれています。
エンティティが存在するかどうかを確認する | コード:- ReportModel.findOne()
エンティティの更新 | コード: - ReportModel.update()
応答で返す更新されたエンティティを取得する | コード: - ReportModel.findOne()
データベース クエリを減らすと、作業が完了し、パフォーマンスが向上します。