【问题标题】:What is the right way to iterate through a kdb partitioned table in an client application?在客户端应用程序中迭代 kdb 分区表的正确方法是什么?
【发布时间】:2013-06-07 19:15:06
【问题描述】:

我想在 R 程序中处理 kdb 表的所有行(我使用 qserver.R)。一种方法是初始化内存处理程序,然后一次遍历所有行,如 here 所述:

t: select from mytable where ts>12:30:00,ts<15:00:00,price,msg="A"
t[0]
t[1]
t[2]
...

我想限制 R 中客户端/服务器调用的数量以尽可能快地循环。 如何为每个调用获取多行?

【问题讨论】:

    标签: kdb


    【解决方案1】:

    注意:我在下面的回答假设 mytable 是分区数据库,但您现在在内存中有 t

    另一个使用 cut 的选项(根据您之前的帖子,使用 1,000,000 的“块”)

      (`int$1e6) cut t
    

    现在您有了所需大小的表“块”列表,您可以相应地使用。

    我经常将它用于某些功能(特别是与 peach 结合使用)。

    我发现一个有用的模式是:

     f:`function that does something useful on chunks`
     fa:`function that reaggregates up to final results`
     r:fa raze f peach (`int$`size`)cut t
    

    如果您的 t 真的很大(垂直/水平),出于内存原因,您可能希望避免将 cut 直接放在桌子上,但可以改为将 cut 表格的索引列表放入适当的大小,然后将索引提供给您的 f 并将该索引提供给 t 并获取您想要的内容。

    下面是这两种方法的快速比较(注意这里的f 毫无意义,只是为了证明t 上的cut 与索引的意义)

       q)t:flip (`$"c",/:string til 100)!{(`int$1e7)?100} each til 100
       q)\ts a:raze {select c1,c99 from x}each 1000 cut t
       3827 4108103072j
       q)\ts b:raze {select c1,c99 from t[x]}each 1000 cut til count t
       3057 217623200j
       q)4108103072j%217623200j
       18.87714
       q)a~b
       1b
    

    【讨论】:

      【解决方案2】:
      1. 根据您之前的问题,我假设这是一个 1 人系统,那么您从 kdb 获得什么好处?为什么不完全在 R 中工作而直接在那里使用平面内存映射文件?避免不必要的复杂性和开销。如果您只想通过 R 流式传输数据,那么这应该很简单。

      2. 比“ts>12:30:00,ts

      3. 您处理的块的大小越大,它的效率可能就越高。 100 似乎很小。

      问候, 瑞恩·汉密尔顿

      【讨论】:

      • 这是我们对 db 的众多用途之一,是的,查询中的块大小很小。我将其设置为 100 以简化问题。我当时发现 1,000,000 行对我的系统来说是一个很好的步骤。
      【解决方案3】:

      整理一下,这样每次返回100行:

      \l /data/mydb
      t: select from mytable where ts>12:30:00,ts<15:00:00,price,msg="A"
      select [0 100] from t
      select [100 100] from t
      select [200 100] from t
      ..
      

      【讨论】:

        猜你喜欢
        • 2015-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多