我们正在创建一个网站,用户可以在其中创建特定的个人资料。目前我们已经拥有大约662000个配置文件(我们数据库中的记录)。用户可以将某些关键字(分为5类)链接到他们的个人资料。他们可以链接每个类别大约1250个关键字(不,这不是废话,对于某些配置文件,这实际上是有意义的)。目前,我们将这些关键字保存到数组中,并将序列化数组插入数据库中的配置文件记录中。
当其他用户使用搜索功能并搜索其中一个关键字时,将使用“WHERE keyword LIKE%keyword%”执行SQL查询。这意味着必须转到相当多的记录并遍历每个记录的整个序列化数组。在关键字列中添加索引非常棘手,因为它们没有定义的最大长度(这可能是22000+个字符!)。
还有其他更明智和实用的方法吗?
谢谢!
答案 0 :(得分:4)
使用映射表
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'
答案 1 :(得分:0)
由于您正在处理大数据,您应该使用NoSQL数据库,例如Hadoop / Hbase,Cassandra等。您还应该看看Lucene / Solr ...