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 具有以下技术特点:
-
兼容性广泛: 支持多种数据库系统和文件存储服务,包括 RMDBS 关系型数据库和 NoSQL 数据库,并且兼容 MinIO 和 Flink 等大数据处理框架。
-
接口简明易用: 将复杂的技术细节封装在内部,对 RMDBS 而言,接口统一、简洁明了。
-
性能优化: ALcedo PDBC 使用了缓存及多线程等技术,以提高查询速度和资源利用率。通过减少不必要的网络通信和提升批处理能力,性能比传统连接器有显著的提升。
-
动态代码生成: ALcedo PDBC 可以在运行时动态生成优化的查询执行代码,这种做法既保留了灵活性,又保证了效率。
-
灵活配置: 允许用户自定义连接参数,满足不同环境和业务需求下的定制化要求。
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.响应时间 (越短越好)

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

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

