MySQL&;Memcached用于大型数据集?

MySQL&;Memcached用于大型数据集?,mysql,sql,dataset,memcached,Mysql,Sql,Dataset,Memcached,对于一位客户,我目前正在调查其数据库结构的改进 我的客户在他们的网站上提供假日租赁服务。 在他们的首页上有一个搜索功能,它向MySQL数据库体系结构(主设置)发送一个查询,该数据库体系结构用客户感兴趣的所有假日租金回答该查询 由于公司的发展和服务器负载的增加,搜索查询的运行时间目前已超过10秒。主要是因为查询的结束顺序导致MySQL创建一个临时表并对所有数据进行排序,一个平均搜索查询最多可以返回20k个度假屋。 当然,我们正在做的一件事是调查查询,重写它们,并在需要的地方放置索引。不幸的是,在这

对于一位客户,我目前正在调查其数据库结构的改进

我的客户在他们的网站上提供假日租赁服务。 在他们的首页上有一个搜索功能,它向MySQL数据库体系结构(主设置)发送一个查询,该数据库体系结构用客户感兴趣的所有假日租金回答该查询

由于公司的发展和服务器负载的增加,搜索查询的运行时间目前已超过10秒。主要是因为查询的结束顺序导致MySQL创建一个临时表并对所有数据进行排序,一个平均搜索查询最多可以返回20k个度假屋。 当然,我们正在做的一件事是调查查询,重写它们,并在需要的地方放置索引。不幸的是,在这种情况下,我们无法获得更多的表现。 这就是为什么我们正在考虑在MySQL之上实现Memcached,以便将这些大型数据集缓存在内存中,以便更快地检索。不幸的是,查询返回的数据集非常大,这使得Memcached在这一点上没有那么有效。MySQL返回的数组当前大约有15k行,每行大约有60个值。 Memcached之所以有趣,是因为我们希望大幅改进搜索功能,并降低MySQL平台上的负载。这将使它更具可伸缩性

我想知道是否有人熟悉(长期)在Memcached中缓存MySQL数据并使其对大型数据集更有效


非常感谢

Memcache用于存储键值对,而不是用于存储大型数据集。行吗?对当然会的。但考虑到你们将要向它抛出多少数据,很快就会耗尽内存,并最终以搜索结果可能更改的频率访问数据库。记住,仅仅因为它是memcache,并不意味着它不需要通过web套接字(很可能)到不同的机器。您的问题似乎是,您正在使用MySQL来完成一些它从未设计好的任务,这就是它作为搜索引擎的用途。不管你优化了多少东西,你所做的就是一次把天花板抬高一英寸

我可以把这篇文章放在“你需要优化MySQL参数,这样它就不必创建那些临时表”的方向上,但我假设你已经研究过了,并继续下去

我的建议是在MySQL之上实现一些东西来处理搜索。在我自己对快速搜索的追求中,以下是我最重视的解决方案:

斯芬克斯:
索尔:
弹性搜索:


您可以在StackOverflow上找到大量资源,其中哪些更好、更快,哪些不更好。出于我们的目的,我们选择Elasticsearch作为一个项目,选择Solr作为另一个项目。

您是否考虑过使用Solr作为数据库索引和更快的搜索?Memcache在这里不是一个真正的选项。很可能你收到的80%的搜索请求都是唯一的,所以缓存它们不会有任何结果。嗨,维克,谢谢你的回答。我们确实研究了如何提高MySQL服务器和数据库的性能。虽然我们能够获得更好的绩效,但随着他们公司的发展,这个问题会出现。我一定会研究你的建议。谢谢