【问题标题】:Cache, Database, Over 400k Listing缓存、数据库、超过 400k 列表
【发布时间】:2018-12-03 22:04:45
【问题描述】:

在我的 MySQL 数据库中,我有一个包含近 625k 行的产品表。该表有 162 列。

现在我的主页上有一个搜索框,您可以在其中搜索任何内容,如果您的搜索词与我的任何产品标题匹配,它会为您提供 15 种产品的列表。这类似于亚马逊和其他电子商务网站。

到目前为止,我所做的是创建一个包含所有产品 ID 和标题名称的 JSON 文件。当用户在搜索字段中输入至少 3 个字符时,会发出 AJAX 请求并获取列表。但我的问题是 JSON 文件的大小几乎为 12MB,每当用户写入一个字符或删除一个字符时,ajax 都会调用它。在我使用本地机器之前它工作正常,现在一旦我让它上线,它就不适用于用户,互联网连接低于 5 MBPS。所以我正在寻找一些建议,我如何像亚马逊一样快速创建它。我的意思是搜索来自 625K 产品的自动建议。

【问题讨论】:

  • 请发布您已经拥有的示例,但听起来您在缓存方面存在问题(或缺少缓存)。在这种情况下,我建议您在这方面实施一些措施。或者,至少,您可能不会搜索所有 162 列的视图。
  • 我将 json 文件作为数组的对象,在用户输入时,我只是从该 json 中获取结果并将其过滤为字符串匹配,但这不是最好的解决方案。我想要实现的是亚马逊自动建议的工作原理,我想实现同样的事情。
  • 您的数据库结构错误。你对 JSON 所做的事情是错误的。

标签: mysql caching


【解决方案1】:

我真的很抱歉,但是这里没有什么可以作为建议的了,然后“去阅读一下数据库设计和模式规范化”。

如果您的表中有 162 列,您将永远无法进行有效的搜索。数据库(尤其是 MySQL)不会将表保存在内存中,索引也无济于事。是的,您可以将其全部放入 ElasticSearch 实例中,它会解决您的一些问题。但是,老实说,这个解决方案并不能清理你的烂摊子。

您应该有一列包含相关信息(标题、名称等)的表格(或者价格等的数字列)。此元数据应引用主表,该列应为全文索引。通过这种方式,您可以从主表中请求匹配、过滤结果和JOIN 相关行。这将在使用很少的资源的情况下快速运行。

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多