1 対多および多対多の関係の効率的なマッピング
背景
Golang でリレーショナル データベースを操作する場合、1 対多または 1 対多で保存されたデータをマッピングする構造体との多対多の関係では、効率と保守性を慎重に考慮する必要があります。目標は、データベース クエリを最小限に抑え、メモリ使用量を最適化し、開発を簡素化するソリューションを見つけることです。
アプローチ 1: ブルート フォース (非効率)
各行を個別に選択するエンティティとその関連エンティティについては、多数のデータベース クエリが発生します。このアプローチは、データセットが大きくなるとますます非効率になります。
アプローチ 2: 手動による行反復と構造体アセンブリ (非効率)
単一のデータベース クエリから取得したカーソルを手動でループするアプローチ 1 よりもパフォーマンス上の利点があります。ただし、複雑な SQL 結合を構築し、複数の属性のメモリを管理する必要があります。 struct.
失敗したアプローチ 3: SQLx 構造体スキャン
この複雑なシナリオで SQLx 構造体スキャンを使用する試みは、再帰的構造体スキャンの制限により成功しませんでした。
代替アプローチ 4: PostgreSQL 配列と GROUP BY
このアプローチはテストされていないため、機能しない可能性があります。その目的は、PostgreSQL 配列アグリゲーターと GROUP BY を使用して、関連データを各エンティティの配列に集約することです。実現可能性を判断するには、さらなる探索とテストが必要です。
推奨ソリューション
提示されたアプローチはいずれも、効率、簡素性、低メモリ オーバーヘッドの要件を完全には満たしていません。代替ソリューションは、PostgreSQL 自体の機能を利用し、その配列処理機能と高度な SQL 機能を利用することです。
集計クエリを使用してビューを作成することにより、PostgreSQL は単一のクエリで必要なデータを提供できます。カスタム golang 関数を使用して、配列を目的の構造体形式に解凍できます。
このアプローチでは、次のことが可能になります。
結論
Golang で関係データをマッピングする従来の方法は効率が不十分である可能性がありますが、提案された方法はPostgreSQL の機能を活用したアプローチは、複雑なデータ構造に対して有望なソリューションを提供します。 SQL と Go の長所のバランスを取ることで、効率的なデータ取得、最適なメモリ使用率、合理化された開発が可能になります。
以上がGolang で 1 対多および多対多の関係を効率的にマッピングするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。