web-dev-qa-db-ja.com

どちらがより効率的ですか? usermetaを使うのか、それとも新しいMySQLテーブルを作るのか?

ブックマーク機能を構築しています。これにより、ユーザーはブログ投稿内にマーカーを配置できます。データはデータベースに保存され、そのブログ投稿を開いたときに取得されます。

これまでのところ私はこれらの機能のために新しいMySQLテーブル(アプローチ2)を作成してきましたが、今は2度目の推測です。

アプローチの2つの選択肢:

1.ネイティブのwp_usermetaテーブルを使う

これには、投稿IDとマーカー位置のリストをシリアル化してから、それらを文字列としてwp_usermetaテーブル内に格納する必要があります。この方法を使用するのが最も簡単なようですが、これがwp_usermetaテーブルのパフォーマンスにどのように影響するかはわかりません。特にシリアル化されたデータを考慮すると、潜在的に大きい可能性があります。

2.新しいテーブルを作成する

このオプションを使えば、データをシリアル化する必要はありませんが、新しいマーカーはそれぞれ独自の行を取得するため、user_id、post_id、およびおそらくタイムスタンプを含める必要があります。

最も効率的なアプローチは何ですか?

パフォーマンス、スケーラビリティ、互換性、使いやすさなどを考慮して、これらの方法のどれが望ましいかを知りたいです。それとも、これら二つより良い方法がありますか?

1
Swen

データの正規化はより効率的で、DBレベルで検索/処理したいテーブルフィールドにシリアル化されたデータを保存することはMySQL/MariaDBのようなNon-Nosql RDBMSには意味がありません。これらのフィールドを検索するのは非効率的です。インデックスを使うことも、結合することもできません。そして、imhoを開発するのは一般的に苦痛です。そのデータをPHPシリアライズされたBLOBに格納している場合、それを調べるにはすべての行を読み込む必要があります。誰かがその分野に他のデータを追加したいと思うならば、それは爆発するかもしれません)。

それでも、大量のデータがない限り、単純なクエリではウォールクロック秒の非効率性を「感じる」ことはおそらくないでしょうし、開発者の経験によっては、ユーザーメタフィールドを使用する方が簡単かもしれません。それはあなたがそれを配達した後にそれを担当するでしょう)データベースと一緒にあります。

3
janh