数据库的存储方式可以分为行式(row-oriented)和列式(column-oriented)。列式意味着列中的所有值都存储在一起。这与行式存储的相反,后者将一行的所有值存储在一起。哪种存储方式更好取决于您的应用程序的访问方式。一般来说,行式数据库擅长随机读操作不适合用于大数据,像SQL Server、Oracle、mySQL等属于行式数据库范畴。列式数据库从一开始就是面向大数据环境下数据仓库的数据分析而产生的。
使用列式存储方式,许多操作会更高效。特别是,需要访问指定列的一系列值的操作要快得多。如果列中的所有值都具有相同的大小,那么情况会更好。这种访问模式是使用kdb+应用程序的典型代表。
为便于理解,我们看一列64位浮点数:
q).Q.w[] `used
696768
q)t: ([] f: 1000000 ? 1.0)
q).Q.w[] `used
9085488
复制
可以看出,保存一百万个8字节float型数值所需的内存仅略超过8MB。那是因为数据是按顺序存储在数组中的。为进一步确认,我们创建另一个表:
q)u: update g: 1000000 ? 5.0 from t
q).Q.w[] `used
17474272
复制
t和u共享f列,内存只增加了8MB多。如果kdb+是行式存储的,则内存使用量将再增加8MB。
接下来我们看看将表写入磁盘时会发生什么:
q)`:d:/t set t
`:d:/t
q)hcount `:d:/t
8000025
复制
25字节的开销。显然,所有数值都按顺序存储在磁盘上。效率是要避免不必要的工作,在这里我们看到kdb+确实完成了读取和写入列时需要做的事情——不多也不少。因此这种方法节省空间。那么,这种数据存储方式如何转化为速度?如果我们要求kdb+对所有100万个数值求和,那么将整个数组以列式组织相对于行式组织来说是一个巨大的优势,具体原因涉及到高速缓存命中和页面错误等技术问题,就不展开了。
参考:https://www.jianshu.com/p/ad2533e5cfaa,
https://kdbfaq.com/what-exactly-does-column-oriented-mean
《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。第十章把一些可能有用的知识点以问答形式列出来,方便读者需要时查找。通过这部分内容的学习,读者可以参考常见应用实例,举一反三。