PHP / MySQL批量插入(4000条记录)和多面搜索的性能

时间:2018-07-06 09:09:19

标签: php mysql database performance

我正在尝试构建以下多面搜索解决方案:

  • 从不同的文件中读取4000个产品价格。每个价格都有30个住宿
  • 从这4000行中获取多面搜索计数
  • 从这4000行中读取许多不同的选择(通过过滤)

在繁忙的时刻,我们的应用程序必须能够在一小时内处理2000个这些动作。 挑战在于如何尽可能快地读取行和计数。 另外,必须通过多个PHP进程来进行读写。

作为一种解决方案,到目前为止,我选择将这4000种产品价格插入数据库中,并使用查询来获取行数/行的选择:

  • MySQL内存:插入行大约需要250毫秒,读取和计数非常快(每个SELECT查询大约需要2毫秒)
  • MySQL InnoDB:插入行大约需要600毫秒,读取和计数会比较慢(每个SELECT查询大约需要5毫秒)
  • Elasticsearch:插入行大约需要250毫秒,但是必须通过批量插入(HTTP请求)来完成。等待索引就绪大约需要250毫秒。 (共500个)。读取和计数的工作方式不同(通过聚合),但是速度很快。

这种比较并不完全公平,因为对于MySQL,我一直在使用准备好的语句而不是批量插入。 (同样,因为批量插入是一个缺点,并且仅与弹性插入一起使用,可以防止4000个缓慢的HTTP请求。)

即使存储中有400万条记录,MySQL Memory表的性能也似乎不错并且可以接受。但是我对此解决方案的可扩展性和稳定性感到担心。

其他探索的选项是:

  • Apache ignite(但无法使其与PHP 7一起使用)
  • MemSQL(太贵了)
  • VoltDB(仅PHP 5.3,而非PHP 7)
  • MongoDB(性能类似于elasticsearch)

我也考虑过不使用数据库的解决方案(PHP中有很多计算/循环),但这远非理想,因为读取和插入4000种产品价格的过程必须在多个PHP过程中完成(用于速度)。

还有什么其他(数据库)解决方案更适合这里?这是关于尽可能快地写入和读取数据的组合。

0 个答案:

没有答案