首页 > 解决方案 > 缓存、数据库、超过 400k 列表

问题描述

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

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

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

标签: mysqlcaching

解决方案


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

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

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


推荐阅读