当前位置: 首页 > 知识库问答 >
问题:

java - 网站热门搜索实现思路,不知道这样对不对,大佬指点一下?

程振濂
2024-09-15

数据库有一个搜记录表 t_searche, 字段:id, user_id, title, label, created_time, ip, deleting

说明:
id:mysql 自增ID
user_id:如果用户登录,添加用户ID,如果没登录,就是0
title:搜索的关键词
label:记录 title 的第一个字母,如果是中文,就是第一个汉字拼音第一个字母,归类用
created_time:搜索的时间
ip:搜索的用户IP
deleting:是否删除

每次搜索都是都记录一次,不管是不是同一个人还是同一个IP,这样对不对

这样就可以统计 title 的条数来排序热门

还是说单独再建一个表来记录 title 的数量,如果数据不是很大的时候没必要吧,后期数量大了,再增加一个统计表感觉也简单。

共有2个答案

田博超
2024-09-15

这个搜索记录表,有什么其他的用处吗?如果没有的话,个人感觉利用价值不大;
你可以新建一个title搜索次数表,title_id + 搜索次数
每次搜索返回的结果,都会有title_id,批量操作相关的title_id搜素次数加1

阎雪峰
2024-09-15

你的思路在初步阶段是可行的,但确实有几个方面可以优化或考虑,以便更好地处理性能、存储和扩展性。以下是一些建议:

1. 实时统计 vs 离线统计

  • 实时统计:如果你的应用需要即时显示热门搜索(如每分钟或每小时更新),那么直接在每次搜索时更新统计可能不是最高效的方法,因为这将涉及频繁的写操作和可能的锁竞争。
  • 离线统计:一个更常见且高效的方法是使用定时任务(如cron job)或消息队列来异步处理搜索统计。这样,每次搜索只记录到t_searche表,而统计则在后台进行,不会影响到主搜索流程的性能。

2. 使用缓存

  • 对于热门搜索的展示,可以使用缓存来存储统计结果,减少对数据库的查询。例如,Redis等内存数据库非常适合此类场景。

3. 数据表设计

  • 当前设计:你的设计在数据量不大时足够使用,但随着数据量的增加,直接基于title进行排序和统计可能会变得低效。
  • 优化方案

    • 统计表:当数据量增长到一定程度时,可以引入一个统计表来存储每个title的搜索次数和最后搜索时间等信息。这个表可以通过定时任务定期更新。
    • 索引优化:确保titlelabelcreated_time等字段上有适当的索引,以加快查询速度。

4. 性能考虑

  • 数据分区:对于非常大的数据集,可以考虑使用数据库分区技术来提高查询性能。
  • 读写分离:在高并发场景下,可以配置数据库读写分离来分担读压力。

5. 安全性

  • IP记录:记录IP时需要注意隐私保护,确保符合相关法律法规。
  • 删除标志:使用deleting字段标记删除记录是一种软删除策略,有助于保留历史数据但避免在查询中显示。确保查询时正确过滤这些记录。

结论

你的基本思路是正确的,但在实现时需要考虑上述优化点。特别是当数据量增长到一定程度时,引入统计表、使用缓存和优化数据库性能将变得非常重要。同时,注意保护用户隐私和数据安全。

希望这些建议对你有所帮助!

 类似资料:
  • 三角形上面的图片也需要根据百分比,去渐变,动态变化 貌似Ui设计渐变的左右搞反了

  • 有没有大神知道这样的分段器效果如何实现? 有没有大神知道这样的分段器效果如何实现? 点击左侧按钮时右侧边框变为45度曲线,点击右侧反之,这个咋整?

  • Drupal允许搜索您网站上的特定内容。 您可以在网站上搜索用户和文字。 我们将在以下步骤中指定如何在Drupal中设置站点搜索 - Step 1 - 转到“ Configuration ,然后单击“ SEARCH AND METADATA部分下的“ Search settings链接。 Step 2 - 搜索引擎维护您网站内容中的字词索引。 您可以调整索引行为,如以下屏幕所示。 Indexing

  • 当我使用MS Graph API并调用时,我会得到这个响应 {“@odata.context”:https://graph.microsoft.com/v1.0/$metadata#sites”,“value”:[]} 请求ID→cfb68a16-eb50-42ab-950c-fbfeec4Def5c 但是我可以使用有响应 {“@odata.context”:https://graph.micro

  • 请教一个动画效果,如图chatgpt的语音对话的这个思考动画是如何实现的,有没有大佬知道呀?还望不吝赐教

  • 本文向大家介绍不能不知道的10个angularjs英文学习网站,包括了不能不知道的10个angularjs英文学习网站的使用技巧和注意事项,需要的朋友参考一下 AngularJS 是非常棒的JS框架,能够创建功能强大,动态功能的Web app。AngularJS自2009发布以来,已经广泛应用于Web 开发中。但是对想要学习Angular JS 的人而言,只有官方文档,那是万万不够的。大多数人更愿