MySQL 和 Memcached 用于大型数据集?

标签 mysql sql dataset memcached

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

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

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

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

非常感谢!

最佳答案

Memcache 用于存储键值对,而不是用于存储大量数据。它会起作用吗?是的。当然会。但是,随着您要向其投入多少数据,您很快就会耗尽内存,并且最终会根据搜索结果更改的频率而最终访问数据库。请记住,仅仅因为它是内存缓存并不意味着它不必通过网络套接字连接到(很可能)不同的机器。你的问题似乎是你使用MySQL来做一些它从来没有设计好的事情,那就是它作为搜索引擎的用途。无论您优化了多少东西,您所做的只是一次将上限提高一英寸。

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

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

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

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

关于MySQL 和 Memcached 用于大型数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11809266/

相关文章:

python - Django 1.7 长期迁移永无止境

mysql - 从表中选择记录,其中字段不在 MySql 中不同表的左连接中

python - 每个用户每个产品的 session 持续时间

C# (Visual studio) : Correlation between database, 数据集,绑定(bind)源

重新排列数据集以创建具有滞后性的数据集(过去的观察)

PHP 下拉按钮,MySQL 更新

使用子选择运行插入时出现 MySQL 错误?

SQL Server将相同类别的数据放在一起

mysql - 在Mysql中输入date default sysdate

php - MYSQL:带有 LIKE 的子查询