对于来自搜索引擎的每次新访问,我保存访问者在搜索引擎中搜索的关键字(例如“php performance”)。
要计算关键字每天使用频率的数量,我需要检查其他人是否已经搜索了特定日期的字词。
几个月后,表变得非常大,并且mysql检查当天是否存在关键字需要更长时间。所以我切换到一个额外的表,我只保存关键字,并为每个关键字指定一个特定的ID,只有一次检查过程,而不是每个新的一天。这个特定的ID与我在表格中插入的关键字相关,每天都有多样化。
这已经更好了,但这张桌子也变得越来越大......
有人为此提供了更好的解决方案以获得更高的性能吗?
最佳,
弗雷迪
答案 0 :(得分:1)
在性能方面,有一些'技巧'可以改进:
答案 1 :(得分:0)
请勿将用户键入的所有关键字保存到DB。创建一个包含列的表:keyword,counter
每次访问者输入关键字时,您都会搜索数据库中的关键字并增加计数器,如果关键字不存在,则创建一个计数器= 1的新关键字。
同时在关键字列上使用索引并且不要使用FULLTEXT搜索,使用直接比较:
SELECT counter FROM keyword_table WHERE keyword="exact keyword" LIMIT 1;
答案 2 :(得分:0)
我个人不会使用MySQL作为这些数据的主要后备存储,我会寻找更快,更高可用的NoSQL解决方案,也许使用MySQL作为备份存储......
使用APC有内置的互斥锁,我不认为你的号码会被破坏,如果你启动并运行apc并且不满意它的数量,你需要直接访问Mutex以便不服务进程可能与另一个进程同时写入,Mutex在我的pthreads项目中提供,可以找到https://github.com/krakjoe/pthreads,需要更多的帮助随时问...