【问题标题】:Laravel 5.1 querying a database with millions of recordsLaravel 5.1 查询具有数百万条记录的数据库
【发布时间】:2015-11-28 21:51:47
【问题描述】:

我有一个包含近 300 万条记录的产品数据库。我正在编写一个 web 服务来查询数据库。输出将分配给客户端中的一个数组进行字符串匹配(体验类似于你在google的搜索框中开始输入ipod)。关于如何优化查询或以仅在产品刷新时创建新缓存的方式缓存它的任何建议。产品数据库每周都会用新产品刷新,这意味着记录的数量会随着时间的推移而增长。

【问题讨论】:

  • 如果连查询都看不到,我们该如何提供帮助?您要求我们调整一级方程式赛车而不向我们展示其规格的赛车
  • 我不会为如此庞大的记录使用数据库。您是否尝试过类似 ElasticSearch 的方法

标签: php mysql memcached laravel-5.1


【解决方案1】:

如果您需要在字符串的任何部分(LIKE '%string%' 查询)中按产品描述进行搜索,我建议将唯一描述存储在另一个带有 FULL TEXT INDEX 的表中,每周更新一次(如果需要)。因此,当用户开始输入时,我们使用此表来输出建议。

当用户点击一个描述时,我们在产品表中搜索该描述 -> 所以我们需要在产品表的描述列上添加索引。

如果您只需要通过起始短语匹配(LIKE 'string%' 查询),您可以简单地将 INDEX 放在产品表的描述列上。

【讨论】:

  • Sam,完整索引不会仍然导致服务器负载吗?
  • @JotiBasi 它需要基准测试并取决于数据大小、硬件和负载。如果您的 mysql 缓存查询,那么它在开始时可能会很慢,而缓存中没有任何内容。如果您可以允许按键事件有一些延迟,那么每个按下的键都不会有查询,并且您每秒没有大量的请求,那么它会完全没问题
猜你喜欢
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 2015-05-13
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 2016-01-29
相关资源
最近更新 更多