ブックマーク機能を構築しています。これにより、ユーザーはブログ投稿内にマーカーを配置できます。データはデータベースに保存され、そのブログ投稿を開いたときに取得されます。
これまでのところ私はこれらの機能のために新しいMySQLテーブル(アプローチ2)を作成してきましたが、今は2度目の推測です。
アプローチの2つの選択肢:
wp_usermeta
テーブルを使うこれには、投稿IDとマーカー位置のリストをシリアル化してから、それらを文字列としてwp_usermeta
テーブル内に格納する必要があります。この方法を使用するのが最も簡単なようですが、これがwp_usermeta
テーブルのパフォーマンスにどのように影響するかはわかりません。特にシリアル化されたデータを考慮すると、潜在的に大きい可能性があります。
このオプションを使えば、データをシリアル化する必要はありませんが、新しいマーカーはそれぞれ独自の行を取得するため、user_id、post_id、およびおそらくタイムスタンプを含める必要があります。
パフォーマンス、スケーラビリティ、互換性、使いやすさなどを考慮して、これらの方法のどれが望ましいかを知りたいです。それとも、これら二つより良い方法がありますか?
データの正規化はより効率的で、DBレベルで検索/処理したいテーブルフィールドにシリアル化されたデータを保存することはMySQL/MariaDBのようなNon-Nosql RDBMSには意味がありません。これらのフィールドを検索するのは非効率的です。インデックスを使うことも、結合することもできません。そして、imhoを開発するのは一般的に苦痛です。そのデータをPHPシリアライズされたBLOBに格納している場合、それを調べるにはすべての行を読み込む必要があります。誰かがその分野に他のデータを追加したいと思うならば、それは爆発するかもしれません)。
それでも、大量のデータがない限り、単純なクエリではウォールクロック秒の非効率性を「感じる」ことはおそらくないでしょうし、開発者の経験によっては、ユーザーメタフィールドを使用する方が簡単かもしれません。それはあなたがそれを配達した後にそれを担当するでしょう)データベースと一緒にあります。