Arthur Whitney is a computer scientist most notable for developing the APL-inspired programming languages A+ and K. He also wrote the initial prototype of J, a terse and macro-heavy single page of code in one afternoon, which then served as the model for J implementor Roger Hui.
He studied at the University of Toronto and Stanford and is the CEO and co-founder of Kx Systems.
至快、至简、至强: Arthur Whitney的kdb+编辑本段回目录
March 1st, 2009 kdb+是一个可驻留内存、基于列的数据库产品(in-memory、column-based database)。Arthur Whitney的Kx公司于2003年推出kdb+。
kdb+目的单纯而明确:一切为了以最快速度分析最海量金融数据。Arthur Whitney深谙机构投资者对海量数据处理的需要,将kdb+铸造成至快、至简、至强的终极武器。
至快
kdb+可以在1秒钟内处理百万条记录。
将kdb+数据库部署在局域网的时候,如果网速没有千兆,很容易成为kdb+的拖累。
至简
1、语言简洁:kdb+源自最早的数组语言APL,继承了APL至简的编程风格。
2、使用简单:kdb+支持SQL标准。Arthur Whitney将APL的简洁与SQL的易懂融为一体,形成Q语言。大大降低新手入门的难度。
3、程序精简:下载的kdb+压缩文件只有183K。解压缩即可使用。(也是绿色软件:)
至强
1、历史数据与即时数据无缝结合。可轻松支持数G、数T的数据。
2、纯正数组语言,操作时间序列得心应手。
3、Arthur Whitney与APL的发明者共事多年、又亲手帮助Morgan Stanley和UBS原创相关定量系统,千锤百炼之后建立自己的公司。Arthur对定量投资的需求理解至深。kdb+可谓其巅峰之作。
学习kdb+的Q语言,不由联想到文艺复兴时期安格尔历经二十六年、终于在七十六岁高龄才完成的少女画作。清水芙蓉,纯然没有雕饰。(经网友提醒,删除安格尔画作,以免被当作河蟹一锅炖了。)
又或者象东方的禅宗。不立文字、直指人心。
谨以此文祝贺zwz大侠的QDataStore(kdb+/Q Datastore plugin for RightEdge 2)发布。
Q语言初学者开门篇 编辑本段回目录
声明:本系列文章全部参考自官方教程,由于缺乏中文资料而且本人E文实在太菜,对于E文较好的朋友可以直接通过下面的链接访问官方网站提供的教程,
欢迎大家一起学习讨论。
hhttps://code.kx.com/trac/wiki/QforMortals2/contents
用户名跟密码为anonymous
历史背景:
Q语言跟它的数据库kdb+是由同个作者Arthur Whitney开发的,发布于 2003年。Q语言天生地具体处理大数理量的能力,同时它也是kdb+数据库的查询语言,类似于SQL。
KDB+介绍:
KDB+ 是一种适合用于处理大数量的数据库服务器,和kdb一样被设计于用来高速地抓取、分析和存储数据。主要应用于金融软件的开发,区别于传统的关系型数据库,主要优势是挖掘快速发展的硬件的潜力,我想缺点是对硬件性能要求比较苛刻。
刚刚接触KDB+数据库,google了半天没找到一丁点中文资料,加上英文太菜,或许对它的理解有误,不过暂时先这样定义,等有了更好的答案了再来Update.
打开地址 http://www.kx.com/developers/software.php, 然后选择点击"Personal Developer kdb+ Software License Agreement"获取一个免费的32位版本,才100多K的东西。
特点:
◇内存数据库(In Memory Database)
把数据全部放置于内存中,好在现在内存是越来越白菜价了。
◇解释型语言(Interpreted)
◇有序列表(Ordered Lists)
实现高速处理数据的关键,区别于传统数据库。
◇赋值顺序(Evaluation Order)
◇面向表编程(Table Oriented)
放弃了经典的OO,取而代之的是一种更加复杂的思想,基于表得字典的编程。
◇面向列编程(Column Oriented)
◇强类型(Types):
强类型,动态检测 (Q is a strongly typed, dynamically checked language)
◇空值(Null Values):
每种类型都有自己的空值 (Types have separate null values. )
开始:
安装Kdb+ 数据库服务器,直接解压到C盘根目录下就OK了,如果希望放到其它目录下需要添加环境变量QHOME到q目录;
进入到程序目录通过"q"命令启动一个q会话。
变量:
Q语言声明变量只需要使用一个变量名跟一个值,格式为“变量名:值”,解释器会根据值的类型给变量赋予相应的类型,需要注意的是赋值符号是":"而不像大多数语言所使用的"=".
e.g.q)a:20
变量的命名规范基本与匈牙利命名规范差不多,但有一点需要注意的是禁止使用下划线,就算是非使用不可的情况下也不应该把下划线放在最后一个字符
可能使用一个斜杆(/)给程序添加注释,当然使用两杆(//)也是不会报错的
程序的执行顺序是从右到左
e.g. q)b:1+a:42
q)b
43
今天的开门篇就介绍到这里,由于文中一些概念还没完全理解清楚,有很多表达不到位的地方经过后期的学习我会尽量补上。
下一节将介绍Q语言的基本数据类型。
KDB+ database介绍收藏
注:这里的很多内容是参考kx system公司的资料翻译过来的,所以我放在翻译栏.(小弟英语也不是太好,请不要笑话我,其中有些我实在无法组织出正确的语句就把原文贴上来了)
1:有关q的发展
Q编程语言和kdb+数据库是由Arthur Whitney开发出来的,在2003年由Kx Systems公司发布,q的设计目标为展示,速度,及效率.此设计的折衷考虑是简洁,精练例如,C++ Java, or C#,结合SQL.While the q programming gods revel in programs resembling an ASCII core dump, this manual is for the rest of us.
Q 从APL语言发展而来,APL是由Kenneth Iverson于1950年在哈佛发明,第一个面向数学符号的语言,APL成为计算机语言是当它被IBM介绍为向量编程语言,意味着它可以在一次单独的操作中处理一个列表的数据.它在金融及其它需要大批量数据处理的工业取得成功.
自从q语言作为向量处理语言出现以来,它在复杂的计算及大的数据列上表现出很好的性能,q语言的新表现在其处理出现在关系范例的的大列数据效率很高.它的语法允许select表达式,这各SQL92标准相像,its collection of built-in functions forms a rich superset of those in SQL 92.
在q语言中也存在一此LISP的影子.事实上,q的基础数据结构是list.它的符号和术语是不同的,但the functionality is there and is arguably simpler,For those so inclined, writing compilers is a snap in q.
Q的DNA序列也表现出了其作为功能编程语言的影响. While q is not purely functional, it is arguably as functional as C++, Java and C# are object-oriented.
2:体系结构
一个精通q语言的开发员的编程思想与传统的面各关系型数据库的开发员不一样,在下文中"冗长的编程(高级语言)"指C++,Java 和 C#.为了将你带入到正确的思想轨道,我们总结了一些潜在的,While q is not purely functional, it is arguably as functional as C++, Java and C# are object-oriented.给q 的初学者.
在高级数据库程序语言中主要有以下几类:
业务对象必须映射为一个完全不同的表现形式,例如,表,为了持久化.它在对象-关系的正确转移了做出了很大的努力.如EJB
业务对象为了传输必须映射到另一个表现形式,通常为一些二进制字节码,或者是XML格式
履行数据的操作如选择和集合最好是在数据库据服务器的存储过程中完成.复杂的数字计算最好是在应用服务器而不是在数据库服务器上.
很多的高级语言是用来得到正确的不同的表现形式,同时很多高级语言的代码是用来排列资源和同步不同的表现形式.这些问题在q语言中不会出现.
内存数据库:一种看KDB+数据库的形式为它是一个内存数据库并且持久备份的.实体格式被保存在内存实质上和存储在硬盘或者是传输中的一样.当数据被q在内存中操作的时候,没有分开存储过程的语言.这有一点类似ADO.NET中不连贯的记录集,但是在建造表对象和用来在硬盘上操作表的数据之间没有分离.
解释型语言:q是解释型语言而不是编译型语言.在执行中,数据和函数存活于内存的工作站中.Iterations of the development cycle tend to be quick because all information needed to debug is available in the workspace.q程序将作为一个脚本存储及执行.一般地,q函数能当做一个字符串创建出来,也可以动态地执行,所以它能编写出自修改的代码.
顺序的Lists:因为经典的SQL为建立在无序集上的,在表中的行顺序是没有定义的.在q中,顺序的lists是所有non-trivial数据结构的基础,所有表中的行有顺序.因此这使得处理大量的时间序列的数据非常容易也非常地快.
执行顺序:当q是从左到右写的时候,表达式将会从右到左执行,ad the q gods prefer,右的左边,意味着左边的函数或者是操作符将执行其右边的.没有操作符优先的说法,所以很少需要圆括号是解决操作优先级的问题.
面向表的:放弃那些"进来"的对象,为了和上面提到的几种语言对比,q语言没有实现像面向对象编程的类一样,也没有继承,虚函数.取而代之的是,q语言建立了一个复杂的通过建造和映射顺序lists,实际上在数学里也叫序列或者是向量.在q语言中higher-lever数据的建造操作为字典和表.一个函数可以在一个工作区内声明为全局的,或者在另一个函数中匿名定义,对于函数来说变量可以是全局也可以是局部的.
面向列的:SQL表存储数据在行同时操作的是行或是行的某一个域为单位的数据,q语言存储数据到表的时候是采取列的形式,操作的时候也是操作整个列向量.
类型:q是强类型的,动态的,检查性的语言,但它的类型比他们类型语言来说少些麻烦,每一个变量都有一个很好定义类型的值,同时类型促使其操作的动态性.一个变量的类型是没有明确定义的,变量类型的名反射出了指派到它上面的值.一个存储了同类型的lists是不允许转换到其它类型的.
空值:在经典SQL中,空值指示丢失的数据或者是任何类型.在q语言中,不同类型有不同的空值.无穷值或者是空值能参与数学计算和其他有合理结果的运算.
完整的I/O:I/O是通过句柄来作为功能窗口与外界通讯的.一旦一个句柄被建立读可以得到句柄的值,通过句柄也可以写值.