与Spark SQL共同使用1.5亿元人的同步服务的最佳方法



i有一个mongodb实例中的 150m文档 mongodb集合。每个文档都是产品。产品具有价格和类别。即:

{
  category: "shoes",
  price: 20,
  .
  .
  .
} 

我想揭露一种REST API方法,以对此集合进行同步查询。即:给定类别X。

的所有产品的平均价格是多少

到目前为止,我试图以两种不同的方式实施它 - 两者似乎都太慢了,无法公开同步服务(客户必须等待太久):

  1. 使用本机MongoDB聚合器:使用本机MongoDB聚合器时,当要汇总的产品数确实很大时,似乎太慢了。

  2. mongodb Spark SQL :使用过滤向下按下以获取给定类别的产品并处理Spark群集节点内的平均价格。这种方法需要太长时间加载到产品集合集群中。(在AWS EMR群集中,带有1个主人和2个奴隶的AWS EMR群集花了13分钟的时间)

所以我的问题是

a)应该处理#2工作吗?这种方法应该足够快,所以我做错了什么?

b)实现这一目标的最佳方法是什么?从架构的角度来看,最佳解决方案是什么?

c)您将如何做?

非常感谢!

查询坐在单个服务器上的150m文档集合期望高速似乎是我的卑微意见。

关于选项A),将在集合的所有碎片上执行聚合管道(除非$match在碎片键上)。然后,每个节点都会照顾自己的碎片中找到这些节点,从而分发工作量。这应该提供更快的响应时间(以及其他并发查询的CPU时间,如果有)。

关于选项b),如果我正确理解,您最终将通过Spark流式传输150m的记录。我不确定您从这种方法中看到的优势在哪里。

因此,关于c),tl; dr是 sharded Collection

的聚合

相关内容

  • 没有找到相关文章

最新更新