跳转至

ALcedo PDBC 项目简介

一、概述

ALcedo-PDBC ® (Python DataBase Connectivity) 是数智教育发展(山东)有限公司 AI Lab 100 团队开发的高效、灵活的数据接口( API) ,它能够使您以最快、最节省内存的方式将数据从数据库加载到 Python 中,它旨在简化大数据访问和处理,提供一种统一的方式来与各种数据源进行交互,加速 ML 和 ETL 开发过程。

JDBC (Java DataBase Connectivity standard) 是为Java应用程序提供访问数据库的编程接口,即 API 。 JDBC 是建立在 ODBC 的基础上的, 帮助基于 Java 的应用程序访问不同类型的关系数据库。JDBC的最大特点是它独立于具体的关系数据库。

ODBC (Open Database Connectivity,开放数据库互连) 是微软公司开放服务结构(WOSA,Windows Open Services Architecture) 中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

ALcedo PDBC ®与 JDBC、ODBC 类似,PDBC专注于为Python应用程序、AI模型提供访问数据的编程接口。它支持主流的 RMDBS (关系型数据库)、NoSQL ( 非结构化数据库)、DataLake (数据湖) 和 Data Warehouse (数据仓库) ,包括但不限于 MySQL、SQL SERVER、SQLite、ORACLE、MariaDB 、PostgreSQL、MongoDB、Redis、Elasticsearch、MinIO、Amazon S3、Google Cloud Storage (GCS)等。

二、技术特点及应用场景

ALcedo PDBC 具有以下技术特点:

  1. 兼容性广泛: 支持多种数据库系统和文件存储服务,包括 RMDBS 关系型数据库和 NoSQL 数据库,并且兼容 MinIO 和 Flink 等大数据处理框架。

  2. 接口简明易用: 将复杂的技术细节封装在内部,对 RMDBS 而言,接口统一、简洁明了。

  3. 性能优化: ALcedo PDBC 使用了缓存及多线程等技术,以提高查询速度和资源利用率。通过减少不必要的网络通信和提升批处理能力,性能比传统连接器有显著的提升。

  4. 动态代码生成: ALcedo PDBC 可以在运行时动态生成优化的查询执行代码,这种做法既保留了灵活性,又保证了效率。

  5. 灵活配置: 允许用户自定义连接参数,满足不同环境和业务需求下的定制化要求。

ALcedo PDBC的应用场景包括不限于以下:

  • 大数据分析: 在Python中进行大规模数据处理和分析,利用ALcedo PDBC可大大提升查询速度。

  • AI模型开发: 在Python中进行AI模型开发过程中,利用ALcedo PDBC可快速的实现多源数据读取,为AI模型提供实时的数据流处理;

  • 数据集成: 可实现跨数据库迁移数据,或者将不同来源的数据集成到同一个处理平台。

  • 云存储访问: 方便地读写云存储上的文件,如azure S3,提升云计算场景下的数据操作效率。

三、数据源及输出

ALcedo PDBC 模块中通过mysql、nosql、datalake、datawarehouse 类的封装,实现了不同数据源接口的支持;

数据源:

  • [x] Mysql
  • [x] SQL Server
  • [x] PostgreSQL
  • [x] Oracle
  • [x] MariaDB
  • [x] SQLite
  • [x] MongoDB
  • [x] Elasticsearch
  • [x] Redis
  • [x] DynamoDB
  • [x] MinIO
  • [x] Amazon S3
  • [x] Google Cloud Storage (GCS)
  • [x] Microsoft AzureBlob
  • [x] Doris
  • [x] SnowFlake
  • [x] BigQuery
  • [x] Redshift
  • [x] StarRocks
  • [ ] ...

输出 DataFrame:

  • [x] Pandas
  • [x] Polars
  • [x] Dask

输出 File:

  • [x] CSV
  • [x] Excel
  • [x] JSON
  • [x] HTML
  • [x] HDF5
  • [x] Feather
  • [x] Parquet
  • [x] Apache Avro
类型 数据源 DataFrame数据框 File文件 备注
Pandas Polars Dask
结构化SQL MySQL ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
SQL SERVER ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
PostgreSQL ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
Oracle ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
MariaDB ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
SQLite ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
非结构化noSQL MongoDB ✅ read
✅ write
✅ read
✅ write
✅ CSV ✅ Excel
✖ JSON ✅ HTML
✖ HDF5 ✖ Feather
✖ Parquet ✖ Apache Avro
ElasticSearch ✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
Redis ✅ read ✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
DynamoDB ✅ read
✅ write
✅ read
✅ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
datalake MinIO ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
✅ read
✖ write
S3 ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
✅ read
✖ write
GCS ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
✅ read
✖ write
AzureBlob ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
✅ read
✖ write
dataware house Doris ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
✅ read
✖ write
SnowFlake ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
✅ read
✖ write
BigQuery ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
✅ read
✖ write
Redshift ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
✅ read
✖ write
StarRocks ✅ read
✅ write
✅ read
✅ write
✅ read
✖ write
✅ CSV ✅ Excel
✅ JSON ✅ HTML
✅ HDF5 ✅ Feather
✅ Parquet ✖ Apache Avro
✅ read
✖ write

备注:导出xlsx需要openpyxl ;Parquet列式存储数据文件 ; Feather压缩二进制文件。

四、快速启动

以MySQL为例,您仅需要几行代码:

from ailab100.alcedo_pdbc.sql import MySQL

# 等同于
# from alcedo_pdbc.sql import MySQL


db_mysql = MySQL()
df = db_mysql.read_as_dataframe(table_name="public_rent_price_forecast_data",
                                params={"houseFloor":"低","totalFloor":2},
                                return_type='polars'
                                )

或者,您可以通过多线程加速数据加载。

from ailab100.alcedo_pdbc.datalake import MinIO

# 等同于
# from alcedo_pdbc.datalake import MinIO
minio_client = MinIO('127.0.0.1:9000',
                     access_key='Q3AM3UQ867SPQQA43P2F',
                     secret_key='zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG'
                     )
minio_client.download_file(minio_path="s3://datalake/datasets/3财务困境研究数据集/ST财务预警.csv",num_threads=4)

该函数将通过将指定的线程数平均拆分为分区数来对查询进行分区,并为每个分区分配一个线程来并行加载和写入数据。

五、性能

实验室通过比较 Python 中的不同解决方案,采用 4 个线程并行处理,读取 MySQL 中一个 10,981,106 行的数据表 (1,092,616,192 字节,1.02 GB) 加载到 DataFrame 中,实验结果如下:

  • 1.响应时间 (越短越好)

pg-time.png

  • 2.内存消耗 (越低越好)

pg-time.png

总之,ALcedo PDBC 使用的内存减少了 1/3 ,与 Pandas 相比响应时间减少了近 1 倍(与 Polars 相比,响应时间相差无几 )。

六、生态系统

polars

pandas