
kdb+/q可以将数据以单文件、分列表、分区表等形式保存在磁盘中,为了节省磁盘空间,可以先对数据进行压缩再写入磁盘。kdb+读取压缩文件时会自动进行解压,解压过程对用户是透明的。
值得一提的是,kdb+的压缩效果是很明显的,一般文件压缩后的大小为压缩前大小的十分之一左右,当然这与选择的压缩算法有关。
把内存变量var保存为磁盘文件`:file的函数如下(文件读写详见《kdb+中文教程》第七章):
`:file set var
如果要改为以压缩格式保存,只需要把`:file改为一个list,如:
(`:file; blockSize; algo; level) set var
其中,
(1)blockSize是压缩逻辑块大小,通过为17。
(2)algo是压缩算法,可能是0、1、2、3、4。其中,
(3)level是压缩水平。对于algo=0、1、3,level为0;对于algo=2(gzip),level为0-9;对于algo=4(lz4),level为1-12。
例如,我们要将100万个`a`b`c的随机值 1000000?`a`b`c 保存为`:d:/kdb/data/t文件,采用lz4压缩算法(blockSize=17,level=6)。
首先,从https://github.com/lz4/lz4/releases下载最新版lz4_win64_v1_9_3.zip(32位kdb+则下载lz4_win32_v1_9_3.zip),解压后将msys-lz4-1.dll改名为liblz4.dll并复制到w64目录下。
然后,执行:
(`:d:/kdb/data/t;17;4;6) set 1000000?`a`b`c
我们可以用-21! ... 查看文件压缩情况,即:
q)-21!`:d:/kdb/data/t
compressedLength | 570067 (压缩后长度)
uncompressedLength| 2000008 (压缩前长度)
algorithm | 4i
logicalBlockSize | 17i
zipLevel | 6i
要读取压缩文件,直接用get读取,即:
get `:d:/kdb/data/t /读取方法与读取非压缩文件无异,q自动解压。
上面是对单文件进行压缩,如果要对分列表、分区表中的文件进行压缩,只需要将`file改为目录即可,如:
(`:d:/kdb/hdb/T/; 17;4;6) set .Q.en[`:d:/kdb/hdb] ([]a:1000000?`a`b`c;b:1000000?1 2 3) /保存为分列表
(`:d:/kdb/hdb/2020.12.19/T/;17;4;6) set .Q.en[`:d:/kdb/hdb] ([]a:1000000?`a`b`c;b:1000000?1 2 3) /保存为分区表
《kdb+中文教程》
全文链接

《kdb+中文教程》
主要内容

kdb+号称是世界上最快的内存数据库,q是kdb+的内置语言。事实上kdb+/q不只是内存数据库,更是一款高性能大数据平台,它使用统一的数据库处理实时数据和历史数据,同时具备CEP(复杂事件处理)引擎、内存数据库、磁盘数据库等功能。与传统关系数据库及现代大数据平台相比,kdb+/q具有更快的速度和更低的总拥有成本,非常适合海量数据的快速采集、存储、分析、处理和检索等。kdb+/q最初主要被用于金融机构海量数据分析和高频交易,目前被广泛用于人工智能、机器学习、物联网、智能电网、航天等领域。
《kdb+中文教程》是一本关于kdb+/q的中文入门书籍,内容分为三大部分:
第一部分(第一章)为kdb+/q简介,主要介绍kdb+/q的优势及不同许可类型,同时介绍了kdb+/q的下载、安装、基本操作及数据表操作等。通过学习本章,读者可以快速了解kdb+/q的特性,同时对kdb+/q的独特、简洁等有一个初步直观感受。
第二章至第八章为第二部分,是本书的核心内容,分别为数据类型、数组、函数、字典、表与qSQL、I/O操作及数据库。首先介绍了kdb+/q的基本数据类型,然后介绍了kdb+/q的数组(列表)、函数、字典、表,最后介绍了文件I/O操作、进程间通讯、数据库构建等。通过这部分内容的学习,读者可以掌握kdb+/q的基础知识,为kdb+/q的运用打下坚实基础,逐步将kdb+应用于实际场景,同时能进一步感受kdb+/q的简洁、灵活与强大等。
第三部分包括第九章和第十章。第九章通过实例介绍kdb+在股票期货数据处理方面的常见应用,包括历史行情数据库构建、策略回测与优化、实时行情处理等,并简单介绍了企业级开源证券期货交易平台Tx。第十章把一些可能有用的知识点以问答形式列出来,方便读者需要时查找。通过这部分内容的学习,读者可以参考常见应用实例,举一反三。





