Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建按时间间隔分组且不降低RDB的KDB查询?_Kdb_Q Lang - Fatal编程技术网

如何创建按时间间隔分组且不降低RDB的KDB查询?

如何创建按时间间隔分组且不降低RDB的KDB查询?,kdb,q-lang,Kdb,Q Lang,我们从交易所收到报价,并将其储存在KDB股票报价机工厂。我们希望在RDB和HDB中分析卷,对这些数据库的性能影响最小,因为其他团队也使用它们 首先,我们如何创建一个函数,将一天划分为10分钟的间隔,并为每个间隔创建一个带有音量的统计?我们需要使用哪些KDB函数? 第二,如何安全地进行?我们应该在循环中一部分一部分地提取记录,还是一次查询一次提取记录?我们的数据库中每天大约有1.5亿条记录。 我将对表名和列名进行一些假设,我相信您可以推断这些假设 我们从交易所收到报价,并将其储存在KDB报价机工厂

我们从交易所收到报价,并将其储存在KDB股票报价机工厂。我们希望在RDB和HDB中分析卷,对这些数据库的性能影响最小,因为其他团队也使用它们

首先,我们如何创建一个函数,将一天划分为10分钟的间隔,并为每个间隔创建一个带有音量的统计?我们需要使用哪些KDB函数? 第二,如何安全地进行?我们应该在循环中一部分一部分地提取记录,还是一次查询一次提取记录?我们的数据库中每天大约有1.5亿条记录。
我将对表名和列名进行一些假设,我相信您可以推断这些假设

我们从交易所收到报价,并将其储存在KDB报价机工厂

根据定义,tickerplant只在很短的时间内存储数据,然后将其记录到文件中,并将数据发送给RDB和其他侦听器

对这些数据库的性能影响最小

这一切都取决于您的数据卷a最优化的where子句。这还取决于您的机器上是否有足够的RAM来处理查询。越接近关键点,操作系统分配内存就越困难,因此进行查询所需的时间就越长,尽管内存分配时间与从磁盘获取数据相比相形见绌,因此磁盘速度也是一个因素

首先,我们如何创建一个函数,将一天划分为10分钟的间隔,并为每个间隔创建一个带有音量的统计

您的朋友是xbar:

对于HDB,对于日期分开的数据库,最理想的查询是date,然后是sym,然后是time。就你而言,你没有要求时间,所以我省略了

getBy10MinsHDB:{[dt;instrument;mkt]
    select max volume, min volume, sum volume, avg volume by 10 xbar `minute$time from table where date=dt,sym=instrument, market=mkt
};
我们应该在循环中一部分一部分地提取记录,还是一次查询一次提取记录

不,这绝对是KDB中最糟糕的做法:-几乎总是有一个很好的解决方案

我们的数据库中每天大约有1.5亿条记录

因为KDB是一个列数据库,所以列的类型和记录的数量一样重要;因为这会影响记忆

因为它们也被其他团队使用


如果像上面那样的简单查询会引起问题,您需要考虑按市场划分表,以减少查询冲突和加载。如果内存不是问题,那么考虑一下HDB在多天内进行多线程查询的情况。考虑HDB上的多端口输入队列的负端口号,以尽量减少查询冲突,虽然它不一定使事情更快。

< P>我将对表和列名称进行一些假设,我确信您可以推断

我们从交易所收到报价,并将其储存在KDB报价机工厂

根据定义,tickerplant只在很短的时间内存储数据,然后将其记录到文件中,并将数据发送给RDB和其他侦听器

对这些数据库的性能影响最小

这一切都取决于您的数据卷a最优化的where子句。这还取决于您的机器上是否有足够的RAM来处理查询。越接近关键点,操作系统分配内存就越困难,因此进行查询所需的时间就越长,尽管内存分配时间与从磁盘获取数据相比相形见绌,因此磁盘速度也是一个因素

首先,我们如何创建一个函数,将一天划分为10分钟的间隔,并为每个间隔创建一个带有音量的统计

您的朋友是xbar:

对于HDB,对于日期分开的数据库,最理想的查询是date,然后是sym,然后是time。就你而言,你没有要求时间,所以我省略了

getBy10MinsHDB:{[dt;instrument;mkt]
    select max volume, min volume, sum volume, avg volume by 10 xbar `minute$time from table where date=dt,sym=instrument, market=mkt
};
我们应该在循环中一部分一部分地提取记录,还是一次查询一次提取记录

不,这绝对是KDB中最糟糕的做法:-几乎总是有一个很好的解决方案

我们的数据库中每天大约有1.5亿条记录

因为KDB是一个列数据库,所以列的类型和记录的数量一样重要;因为这会影响记忆

因为它们也被其他团队使用


如果像上面那样的简单查询会引起问题,您需要考虑按市场划分表,以减少查询冲突和加载。如果内存不是问题,那么考虑一下HDB在多天内进行多线程查询的情况。考虑HDB上的多端口输入队列的负端口号,以尽量减少查询冲突,虽然它不一定使事情更快。

谢谢,你还可以告诉我们什么是VYCH大量数据的矢量化解决方案?如果你从客户端应用程序java、C++等中做这些事情,并且你一直在KDB内存限制,那么你别无选择,只能每天做查询,或者你可以
将数据分割成可管理的数据块。谢谢,您还可以告诉我什么是减少大量数据的矢量化解决方案吗?任何select查询都是矢量化的,因为它可以动态地进行拉取和聚合。如果你从客户端应用程序java、C++等中做这件事,并且你一直在KDB中命中内存限制,那么你别无选择,只能每天做查询,但是你可以将数据分割成可管理的块。