1

ユーザーが特定のプロファイルを作成できる Web サイトを作成しています。現時点で、すでに約 662000 のプロファイルがあります (データベースのレコード)。ユーザーは特定のキーワード (5 つのカテゴリに分けられます) を自分のプロフィールにリンクできます。カテゴリごとに最大約 1250 のキーワードをリンクできます (いいえ、これはナンセンスではありません。特定のプロファイルでは、これは実際に理にかなっています)。現時点では、これらのキーワードを配列に保存し、シリアル化された配列をデータベース内のプロファイルのレコードに挿入します。

別のユーザーが検索機能を使用してキーワードの 1 つを検索すると、「WHERE キーワード LIKE %keyword%」で SQL クエリが実行されます。これは、かなり多数のレコードに移動し、各レコードのシリアル化された配列全体を通過する必要があることを意味します。キーワード列には最大長が定義されていないため (これは 22000 文字以上になる可能性があります!)、キーワード列にインデックスを追加するのは非常に注意が必要です。

これについてもっと賢明で実用的な方法は他にありますか?

ありがとう!

4

2 に答える 2

4

複数の値を 1 つの列に格納しないでください。

マッピング テーブルを使用する

user_keywords TABLE
--------------------
user_id       INT
keyword_id    INT


users         TABLE
---------------------
id            INT
name          VARCHAR
...


keywords      TABLE
---------------------
id            INT
name          VARCHAR
...

次に、このようにプロファイルに特定のキーワードを持つすべてのユーザーを返すことができます

select u.* 
from users u
inner join user_keywords uk on uk.user_id = u.id
inner join keywords k on uk.keyword_id = k.id 
where k.name = 'keyword_name'
于 2013-10-04T08:48:20.453 に答える
0

大規模なデータを扱っているため、Hadoop/Hbase、Cassandra などの NoSQL データベースを使用する必要があります。また、Lucene/Solr も検討する必要があります...

http://nosql-database.org/

于 2013-10-04T08:53:33.487 に答える