【问题标题】:writing a query for arangodb that filters data from a graph为 arangodb 编写一个从图表中过滤数据的查询
【发布时间】:2017-07-20 22:31:18
【问题描述】:

我有一个由两个集合组成的图,一个是 60,000 个服务和 10 个产品的集合,另一个是连接产品和服务的 100 万条边的集合。我们想在我们的图上找到所有连接到所有 10 个产品的服务顶点。基本上,我们希望在单个服务中找到所有十种产品的交集,并返回发生这种情况的所有服务。十种产品中的每一种都有一个不同的产品 ID。有没有人对如何编写一个返回这些产品交集的高效查询有任何建议? 下面是每个集合的一小部分的一些屏幕截图,采用 JSON 格式。

first screenshot

second screenshot

【问题讨论】:

    标签: graph arangodb aql


    【解决方案1】:

    以下查询使用两个集合productsedgeCol。它首先收集 prods 中的所有 10 个产品,然后遍历所有服务,并为每个服务搜索所有连接顶点(产品)并检查它们是否都包含在 prods 中。

    LET prods = (
      FOR product IN products
        FILTER product.ProductType == 'Product'
        RETURN product
    )
    
    FOR service IN products
      FILTER service.ProductType == 'Service'
      FILTER prods ALL IN (
        FOR v, e, p IN 1 OUTBOUND service edgeCol
          RETURN v
      )
      RETURN service
    

    只有 10 种产品和 60,000 多项服务,您应该考虑将您的集合 products 分成两个集合 productsservices,其中 products 仅包含您的 10 种产品。然后您可以删除字段ProductType。这允许更高性能的查询。

    LET prods = (
      FOR product IN products
        RETURN product
    )
    
    FOR service IN services
      FILTER prods ALL IN (
        FOR v, e, p IN 1 OUTBOUND service edgeCol
          RETURN v
      )
      RETURN service
    

    【讨论】:

      猜你喜欢
      • 2016-11-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 2020-03-02
      • 1970-01-01
      相关资源
      最近更新 更多