【问题标题】:500 Search engine indexes, each need to be computed. how to scale?500个搜索引擎索引,每个都需要计算。如何扩展?
【发布时间】:2016-08-09 18:28:14
【问题描述】:

我正在设计一个具有 500 个索引的系统,每个索引都是基于具有数百万行的表的计算,并且我在表之间连接并执行各种相当复杂的逻辑,因此单个查询通常需要 10分钟左右。我目前正在 mysql 中执行此操作,并且我没有并行执行任何操作。所以第一个指数计算10分钟,下一个10分钟,第三个10分钟,……第500个10分钟……这需要很长时间!

人们通常如何基于对许多表和行的复杂计算来建立许多索引?他们只是并行执行吗?他们会投入更多的硬件吗?有没有我可以遵循的最佳实践?

【问题讨论】:

  • 请给我们更多关于你在做什么的线索。
  • 我有数亿个对象,每个对象都有很多属性。我正在根据每个属性的值对人进行大量计算。有时一个属性决定了算法,有时是属性的组合决定了算法。无论哪种方式,目前一切都是串行完成的,而且需要很长时间。自从我发布这篇文章以来,我尝试并行做一些事情,并且在 oracle 上使用 16 个线程,我能够减少时间,但它仍然很慢。人们通常如何更快地进行此类计算?
  • 哪个花时间?获取数据还是计算?
  • 既然是甲骨文,我不能 100% 确定。我猜是数据的获取,因为在解释计划中加入和扫描需要很长时间。计算相当简单:使用过滤器将数据从一个表移动到另一个表,然后执行 avg、sum、min、max。

标签: mysql elasticsearch indexing


【解决方案1】:

Google 的 Big Query 旨在解决这类问题。 https://cloud.google.com/bigquery/what-is-bigquery

【讨论】:

  • 也许我应该说它需要全部在内部。我无权将此数据分发到我网络之外的系统。
【解决方案2】:

Shard-Query 是并行执行 MySQL 查询的代码。

【讨论】:

  • 是否可以进行 shard-query 并将其放入 mysql 服务器集群中?目前使用 oracle 和 16 个线程仍需要 24 小时以上。我想不到一个小时。人们如何实现这种数据计算时间?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多