DolphinDB基础概念理解:Orca

  • DolphinDB

    关于DolphinDB概况,参见《TSDB || DolphinDB || KDB+》

    DolphinDB作为一个数据库以及一种分布式计算脚本语言,我用的是其高速的优点,然而现阶段很多人还意识不到Dol的价值及必要性,反应在工作中就是同事不了解,因此不能直接在生产环境中体验Dol的高速,现在有了Orca,会pandas的人都可以充分利用Dol的高性能及并发,为生产环境中使用Dol大大降低了门槛。

  • Orca设计理念

    1. Pandas易用但难处理TB级别的含量数据、高内存占用
    2. DolphinDB同等条件下比pandas快1-2数量级、内存占用小于pandas的1/2
    3. 两者部署方式及代码差别较大,不方便直接移植,Orca解决这个问题

    Orca作为基于DolphinDB引擎的pandas API,结合两者优点:分布式存储和计算低内存占用pandas编程风格

  • Orca设计架构

    DolphinDB基础概念理解:Orca_第1张图片

    Orca的DataFrame中只存储对应的DolphinDB的表的元数据。

  • Orca如何储存数据

    Orca对象Orca DataframeOrca Series),在DolphinDB中以一个DolphinDB表的形式储存。

    数据列和索引列储存在同一个表中。

    • (一个Orca DataFrame所表示的)DolphinDB表包含若干数据列,以及若干索引列
    • (一个Orca Series所表示的)DolphinDB表包含一列数据列,以及若干索引列

    这使得索引对齐、表内各列计算、分组聚合等操作都能较容易地实现。

    OrcaDataFrame中只存储对应的DolphinDB的表元数据,包括表名数据的列名索引的列名等。

    如果尝试访问一个Orca DataFrame的列,返回Series时并不会创建一个新的表。返回的Series和原有的DataFrame使用同一个表,只是Orca对象所记录的元数据产生了变化。

  • Orca的接口限制

    • OrcaDataFrame中的每个列不能是混合类型
    • 列名必须是合法DolphinDB变量名;列名不能重复;
    • 如果DataFrame对应的DolphinDB表是一个分区表,数据存储并非连续,因此就没有RangeIndex的概念
      • 无法将一整个Series赋值给一个DataFrame的列;
      • 不能使用iloc访问相应的行;
    • 对于DolphinDB分区表,一部分没有分布式版本实现的函数,例如medianOrca暂不支持。
    • DolphinDB空值机制pandas不同,pandasfloat类型的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。这样会有两个问题:

    1. 造成不必要的通信;
    2. 新生成的orca.DataFrame对应的DolphinDB上的表不再是原来的那个;
  • Orca输出显示

    pd.set_option("expand_frame_repr", False)
    

    Orca本质上是转换成PandasDataFrame之后输出,因此设置pandas的输出格式,就能改变orca的输出格式,就是说可以把Orca理解成更高级的**Pandas封装**。

  • Orca安装

    Orca集成在DolphinDB Python API中,通过pip安装DolphinDB Python API就可以直接使用Orca

    pip install dolphindb
    
  • References

  1. Orca: 基于DolphinDB的分布式pandas接口

你可能感兴趣的:(TSDB,DolphinDB,KDB+)