-
DolphinDB
关于
DolphinDB
概况,参见《TSDB || DolphinDB || KDB+》DolphinDB
作为一个数据库以及一种分布式计算脚本语言,我用的是其高速的优点,然而现阶段很多人还意识不到Dol
的价值及必要性,反应在工作中就是同事不了解,因此不能直接在生产环境中体验Dol
的高速,现在有了Orca
,会pandas
的人都可以充分利用Dol
的高性能及并发,为生产环境中使用Dol
大大降低了门槛。 -
Orca设计理念
-
Pandas
易用但难处理TB级别
的含量数据、高内存占用 -
DolphinDB
同等条件下比pandas
快1-2数量级、内存占用小于pandas
的1/2 -
两者部署方式及代码差别较大,不方便直接移植,
Orca
解决这个问题
Orca
作为基于DolphinDB
引擎的pandas API
,结合两者优点:分布式存储和计算、低内存占用、pandas
编程风格 -
-
Orca设计架构
Orca的DataFrame中只存储对应的DolphinDB的表的元数据。
-
Orca如何储存数据
Orca对象
(Orca Dataframe
或Orca Series
),在DolphinDB
中以一个DolphinDB表
的形式储存。数据列和索引列储存在同一个表中。
- (一个
Orca DataFrame
所表示的)DolphinDB表
包含若干数据列,以及若干索引列。 - (一个
Orca Series
所表示的)DolphinDB表
包含一列数据列,以及若干索引列。
这使得索引对齐、表内各列计算、分组聚合等操作都能较容易地实现。
Orca
的DataFrame
中只存储对应的DolphinDB的表
的元数据,包括表名、数据的列名、索引的列名等。如果尝试访问一个
Orca DataFrame
的列,返回Series
时并不会创建一个新的表。返回的Series
和原有的DataFrame
使用同一个表,只是Orca对象
所记录的元数据产生了变化。 - (一个
-
Orca的接口限制
Orca
的DataFrame
中的每个列不能是混合类型;- 列名必须是合法
DolphinDB
变量名;列名不能重复; - 如果
DataFrame
对应的DolphinDB
表是一个分区表,数据存储并非连续,因此就没有RangeIndex
的概念- 无法将一整个
Series
赋值给一个DataFrame
的列; - 不能使用
iloc
访问相应的行;
- 无法将一整个
- 对于
DolphinDB
分区表,一部分没有分布式版本实现的函数,例如median
,Orca
暂不支持。 DolphinDB
的空值机制和pandas
不同,pandas
用float
类型的nan
作为空值,而DolphinDB
的空值是每个类型的最小值。DolphinDB
是列式存储的数据库。对于pandas
接口中,一些axis=columns
参数还没有支持,即不支持跨列操作,也不支持transpose
转置操作;- 目前无法解析
Python函数
,因此,例如DataFrame.apply
,DataFrame.agg
等函数无法接受一个Python
函数作为参数,但可以传入表示DolphinDB内置函数
的字符串;
接口限制的解决方案:
如果出现复杂场景,无法解决,可以先将
orca.DataFrame
转换(to_pandas()
)成pandas.DataFrame
,采用pandas
函数操作之后,再转(orca.DataFrame()
)成orca.DataFrame
。这样会有两个问题:- 造成不必要的通信;
- 新生成的orca.DataFrame对应的DolphinDB上的表不再是原来的那个;
-
Orca输出显示
pd.set_option("expand_frame_repr", False)
Orca
本质上是转换成Pandas
的DataFrame
之后输出,因此设置pandas
的输出格式,就能改变orca
的输出格式,就是说可以把Orca
理解成更高级的**Pandas
封装**。 -
Orca安装
Orca
集成在DolphinDB Python API
中,通过pip
安装DolphinDB Python API
就可以直接使用Orca
。pip install dolphindb
-
References
DolphinDB基础概念理解:Orca
最新推荐文章于 2024-05-28 14:35:41 发布