小编典典

简单但繁重的应用程序消耗大量资源。如何优化?

sql

目前,我在生产中有一个监视器应用程序。该监视器的工作是收集社交网络上的特定条目,如Facebook,Twitter,YouTube等。

这是一个来自Twitter的API调用的简单示例:

http://search.twitter.com/search?q=Stackoverflow&format=json

基本上,这就是系统的作用:

  1. 给定特定顺序,从数据库中选择搜索词
  2. 调用API
  3. 从当前搜索中收集所有推文状态ID和用户ID
  4. 检查数据库是否存在
  5. 运行推文插入,消除现有的推文和用户,并防止重复的输入错误。

我们完成了两个表,一个表用于用户,另一个表用于tweet。

问题

在MySql数据库达到tweets表上的200.000条目之后(在最初的几个月中),可视化该数据的应用程序在对现有tweet执行选择查询时开始消耗太多资源。

为什么?

该系统具有独立的帐户,每个帐户都有与其特定业务相关的某些搜索词。执行选择时,我们只需要选择与我们的帐户条款相关联的内容。我们看不到与我们无关的推文。但是一条推文可能涉及多个帐户。

实际查询(伤了我的眼睛)

SELECT * 
   FROM tweets 
 WHERE 
   content LIKE '%searchterm1%' 
     OR LIKE '%searchterm2%' 
     OR LIKE '%searchterm3%' 
     OR LIKE '%searchterm4%' 
     OR LIKE '%searchterm5%' 
     OR LIKE '%searchterm6%' 
     OR LIKE '%searchterm7%' 
     OR LIKE '%searchterm8%' 
   (and son on...)

两种可能的解决方案

a)创建一个tweets_searches表,该表将具有两个外键:tweet_id和search_id。这样tweets表上的每个tweet都可以与一个特定的搜索词相关。

因此,我们将搜索这些表,而不是搜索特定的字符串。

b)继续搜索,但是使用进行全文搜索MATCH () AGAISNT ()

主要问题

这足以减少CPU和RAM等资源消耗吗?有什么我可以做的更好的吗?


阅读 293

收藏
2021-03-23

共1个答案

小编典典

免责声明 :这是我对此问题的评论之一,可能是答案:


我认为这match ... against是合适的。这就是所谓的“全文搜索”。对于更复杂的搜索,我会使用Sphinx-它自己对数据库建立索引(具有自己的机制),并且执行查询的速度比MySQL快

2021-03-23