代码之家  ›  专栏  ›  技术社区  ›  Alexander Tsepkov

内部数据库逻辑/分组操作/压缩结果

  •  0
  • Alexander Tsepkov  · 技术社区  · 7 年前

    我有一个CrateDB表,用于存储zipcodes的各种信息。它包含大约3万个zipcodes,我需要查询一次返回所有zipcodes的某些分析信息。我知道这通常是不可行的,但是因为我只需要大概的信息,而且许多zipcode是连续的,所以我认为优化是可能的。

    例如,如果我想分析总体情况,这样的分组结果将对我有效:

    group 1 (0-1000): 00000-02000,02004-02010,02012
    group 2 (1001-3000): ...
    ...
    

    上面的人口和群体都是假的,但这个想法应该成立。基本上,将已分析的类别分组到bucket中,为正确的bucket分配zipcodes,并使用范围表示进一步减小大小。我可以满足预定义的组数,也可以让请求/查询本身定义组存储桶。这将有望将响应从单个查询所需的太大的响应减少到可管理的响应。

    是否可以编写一个cratedb函数来执行类似的操作,以避免在不同的服务/容器/vm上执行此分组带来的带宽问题?

    0 回复  |  直到 7 年前
        1
  •  0
  •   metase    7 年前

    如果您希望使用regex,您可以动态地或以列的形式装箱组,我已经在23M行表上完成了这项工作,并按此分组。

    在我的例子中 regex 分组和 AVG 花了大约30秒,但这是 非常主观 到我的硬件 .

    像这样的东西可能可以作为一个通用指针

    SELECT avg (--yourColumn--), regexp_matches(--yourColumn--, '--your regex--','i')[1]
    FROM "doc"."--yourTable--" 
    group by regexp_matches(postcode, '--your regex--','i')[1]
    order by regexp_matches(postcode, '--your regex--','i')[1]
    

    你可以用 over 窗口化的函数,但它还没有完全的SQL支持分区等。

    推荐文章