0

对于来自搜索引擎的每次新访问,我都会保存访问者在搜索引擎中搜索的关键字(例如“php 性能”)。

要计算关键字每天使用的频率,我需要检查其他人在特定日期是否已经搜索过该术语。

几个月后,表变得非常大,mysql 检查当天关键字是否存在的时间越来越长。所以我切换到一个额外的表,我只保存关键字并为每个关键字指定一个特定的 ID,以便只进行一次检查过程,而不是每个新的一天。这个特定的 ID 与我在表格中插入的关键字相关,并且每天都多样化。

这已经更好了,但这张桌子也变得越来越大......

有人对此有更好的解决方案来提高性能吗?

最好的,

弗雷迪

4

3 回答 3

1

在性能方面,可以采取一些“技巧”来提高:

  1. 建立缓存机制。这就是您已经通过制作第二张桌子所做的事情。您可以更进一步,将缓存表保存在内存或 memcached 中。
  2. 优化您的查询,并确保搜索字段上有索引。如果你这样做了,不舒尔。
  3. 尝试(去)规范化你的数据库。有时,从设计角度来看,不同的数据库结构并不是最佳的,而是针对速度进行了优化。不确定你是否这样做。
  4. 看看不同的搜索解决方案,也许看看Lucene
于 2012-09-18T10:27:20.343 回答
0

不要将用户输入的所有关键字都保存到数据库中。制作一个包含列的表格:关键字,计数器

每次访问者输入关键字时,您在数据库中搜索关键字并增加计数器,如果关键字不存在则创建一个计数器=1的新关键字。

还要在关键字列上使用索引,不要使用全文搜索,使用直接比较:

SELECT counter FROM keyword_table WHERE keyword="exact keyword" LIMIT 1;
于 2012-09-18T10:27:11.320 回答
0

我个人不会使用 MySQL 作为这些数据的主要后备存储,我会寻找更快、更高可用性的 NoSQL 解决方案,也许使用 MySQL 作为备份存储......

使用 APC 有内置的互斥锁,我认为您的号码不会损坏,如果您启动并运行 apc 并且对它的计数不满意,您需要直接访问互斥锁,以便没有服务进程可以写入同时,在我的 pthreads 项目中提供了互斥锁,可以在https://github.com/krakjoe/pthreads找到,需要更多帮助随时问...

于 2012-09-20T16:50:51.150 回答