1

我们正在创建一个网站,用户可以在其中创建特定的个人资料。目前,我们已经拥有大约 662000 个配置文件(我们数据库中的记录)。用户可以将某些关键字(分为 5 个类别)链接到他们的个人资料。他们最多可以为每个类别链接大约 1250 个关键字(不,这不是胡说八道,对于某些配置文件,这实际上是有意义的)。目前我们将这些关键字保存到一个数组中,并将序列化的数组插入到数据库中配置文件的记录中。

当其他用户使用搜索功能并搜索其中一个关键字时,将使用“WHERE keyword LIKE %keyword%”执行 SQL 查询。这意味着必须处理大量记录并遍历每个记录的整个序列化数组。为关键字列添加索引非常棘手,因为它们没有定义的最大长度(这可能是 22000+ 字符!)。

还有其他更明智和实用的方法来解决这个问题吗?

谢谢!

4

2 回答 2

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'
于 2013-10-04T08:48:20.453 回答
0

由于您正在处理大数据,您应该使用 NoSQL 数据库,例如 Hadoop/Hbase、Cassandra 等。您还应该看看 Lucene/Solr...

http://nosql-database.org/

于 2013-10-04T08:53:33.487 回答