-
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
最新推荐文章于 2025-11-20 14:30:34 发布
Orca是基于DolphinDB的分布式Pandas接口,它结合了Pandas的易用性和DolphinDB的高性能,允许TB级别数据处理,内存占用低,且具备分布式存储和计算能力。Orca的DataFrame只存储DolphinDB表的元数据,数据在DolphinDB中以表形式存储。虽然存在接口限制,但通过转换为Pandas DataFrame可解决复杂场景。
1017

被折叠的 条评论
为什么被折叠?



