0

我将为线程标题中出现的每个单词刮取一个论坛新线程页面,以形成一种流行趋势(如谷歌趋势)。我找到了一种抓取它的方法,但我不知道应该如何将它存储在数据库中以获得最佳性能。我想到了两种不同的方法。

  1. 将每个新单词存储在一行中,如果该单词不是新单词,则在“出现次数”字段中添加一个计数。

  2. 无论如何,将每个单词存储在自己的行中。

这个问题还有其他解决方案吗?

4

2 回答 2

1

想法 #1 是最紧凑的,通常应该是最快的。查看 INSERT/ON DUPLICATE KEY,在单词和日期上使用唯一键。

如果您存储的数据不仅仅是单词,例如论坛线程的 id 等,那么想法 #2 就变得很重要。

祝你好运。

于 2012-09-06T17:36:57.790 回答
1

如果您遇到了抓取的麻烦,您应该保留多个级别的信息。

首先,跟踪您遇到的每个论坛标题,以及发布日期(以及您找到它的日期)以及其他信息。您可以在论坛标题上放置全文索引,这将为您提供查找相同单词(“database”和“databases”)的相似版本的强大功能。

其次,将每个单词以及发布(或您找到它的)的日期和时间以及返回发布表的链接单独存储在一个表中。谷歌趋势的价值不在于它一直保持总字数。这是你可以随着时间的推移分解它。

然后,在查询中进行聚合。如果遇到性能问题,可以按日期对数据进行分区,因此大多数查询只会读取数据的子集。如果摘要被高度使用,那么您可以考虑批量进行摘要,例如每晚一次。

最后,您将如何处理随着时间的推移出现的不同版本的单词?有拼写错误?同一个词在一个标题中有哪些多次出现?

于 2012-09-06T17:51:18.063 回答