PythonAPI 指定不同的传输协议的区别

我的脚本包含有 delete 语句, 返回一个 DataFrame,  之前一直可以正常运行并返回 DataFrame.
但今天在另一个脚本中编写了类似的代码, 发现只要包含 delete 语句就抛出异常 IO Error Type 1.
根据文档我把 protocol 修改为 PROTOCOL_DDB 就正常了。

根据 Python API 文档,关于 PROTOCOL_DDB, PROTOCOL_PICKLE, PROTOCOL_ARROW 这几个协议,有以下几点疑问,麻烦解答一下,谢谢!

  1. 三者的使用场景 有什么具体 区别吗?

  2. 为什么 默认 PROTOCOL_PICKLE?

请先 登录 后评论

1 个回答

Polly
  1. ROTOCOL_ARROW 协议是使用了apache arrow 的方案,是通用的序列化方案,从使用场景来看,ROTOCOL_ARROW 最适用于从上游数据库到下游消费,全部使用 arrow 格式作为中间格式的场景,可以方便地在各个组件之间传递,只需要付出从数据库取出数据这一次序列化开销,后续不需要序列化和反序列化。
  2. PROTOCOL_DDB是我们最常用的通信时使用的序列化/反序列化协议,其他API,例如JAVA API 、C++ API都是用的PROTOCOL_DDB。
  3. PROTOCOL_PICKLE 则是源自python 原生的pickle协议,可以参考python pickle模块的文档,我们是基于4.0的pickle协议,又做了部分适配dolphindb的修改。

从数据类型的角度,PROTOCOL_PICKLE PROTOCOL_DDB 之间,在某些类型的性能上各有优劣。从使用场景来看,ROTOCOL_ARROW 最适用于 从上游数据库到下游消费,全部使用 arrow 格式作为中间格式的场景。如果场景中使用 pandas.DataFrame 较多,则更适合使用 PROTOCOL_PICKLE PROTOCOL_DDB,一般的数据类型, PROTOCOL_PICKLE 会相对快一点,所以默认是开启 PROTOCOL_PICKLE

请先 登录 后评论