MySQL& Memcached用于大型数据集?

时间:2012-08-04 14:07:54

标签: mysql sql dataset memcached

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

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

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

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

非常感谢!

1 个答案:

答案 0 :(得分:1)

Memcache用于存储键值对,而不是用于存储大型数据集。它会起作用吗?是。当然会的。但是,随着你们将要投入多少数据,你很快就会耗尽内存并最终以搜索结果可能发生变化的频率命中数据库。请记住,仅仅因为它的内存缓存并不意味着它不必通过Web套接字到(很可能)不同的机器。你的问题似乎是你正在使用MySQL从未设计好的东西,这是它作为搜索引擎的用途。无论你优化了多少东西,你所做的只是一次将天花板提升一英寸。

我可以在“你需要优化MySQL参数以便它不必创建那些临时表”的方向上发表这篇文章,但我会假设你已经研究过并继续前进。

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

狮身人面像:http://sphinxsearch.com
Solr:http://lucene.apache.org/solr
Elasticsearch:http://www.elasticsearch.org

你会在StackOverflow上找到大量资源,其中哪些更好,更快,哪些更好。出于我们的目的,我们为我们的一个项目选择了Elasticsearch,为另一个项目选择了Solr。

相关问题