目录
-
- 摘要
- 一、开发工具概览
-
- [1.1 DolphinDB工具生态](#1.1 DolphinDB工具生态)
- [1.2 工具选择指南](#1.2 工具选择指南)
- [二、Web GUI详解](#二、Web GUI详解)
-
- [2.1 界面介绍](#2.1 界面介绍)
- [2.2 核心功能](#2.2 核心功能)
-
- [2.2.1 脚本编辑器](#2.2.1 脚本编辑器)
- [2.2.2 数据浏览器](#2.2.2 数据浏览器)
- [2.2.3 可视化工具](#2.2.3 可视化工具)
- [2.3 实用技巧](#2.3 实用技巧)
-
- [2.3.1 代码片段管理](#2.3.1 代码片段管理)
- [2.3.2 结果导出](#2.3.2 结果导出)
- [2.3.3 任务管理](#2.3.3 任务管理)
- 三、VSCode插件
-
- [3.1 安装插件](#3.1 安装插件)
- [3.2 配置连接](#3.2 配置连接)
- [3.3 核心功能](#3.3 核心功能)
-
- [3.3.1 语法高亮](#3.3.1 语法高亮)
- [3.3.2 代码补全](#3.3.2 代码补全)
- [3.3.3 远程执行](#3.3.3 远程执行)
- [3.4 实用配置](#3.4 实用配置)
-
- [3.4.1 代码格式化](#3.4.1 代码格式化)
- [3.4.2 代码检查](#3.4.2 代码检查)
- [四、Python API详解](#四、Python API详解)
- [五、Java API详解](#五、Java API详解)
- [六、REST API](#六、REST API)
-
- [6.1 API概述](#6.1 API概述)
- [6.2 使用示例](#6.2 使用示例)
-
- 执行脚本
- [Python调用REST API](#Python调用REST API)
- 七、最佳实践
-
- [7.1 连接池管理](#7.1 连接池管理)
- [7.2 错误处理](#7.2 错误处理)
- [7.3 性能优化](#7.3 性能优化)
- 八、常见问题
-
- [8.1 连接问题](#8.1 连接问题)
- [8.2 性能问题](#8.2 性能问题)
- 九、总结
- 参考资料
摘要
本文全面介绍DolphinDB的开发工具生态,帮助开发者构建高效的开发环境。从官方Web GUI的功能详解,到VSCode插件的使用技巧,再到Python、Java、C++等多语言API的实战应用,逐步带领读者掌握DolphinDB的开发调试技巧。同时提供最佳实践建议和常见问题解决方案,帮助读者提升开发效率。本文适合需要在DolphinDB上进行应用开发的工程师阅读。
一、开发工具概览
1.1 DolphinDB工具生态
DolphinDB提供丰富的开发工具,满足不同场景需求:
开发工具
Web GUI
脚本编辑
数据浏览
可视化
VSCode插件
语法高亮
代码补全
远程执行
多语言API
Python
Java
C++
REST API
命令行工具
交互式Shell
脚本执行
1.2 工具选择指南
| 工具 | 适用场景 | 优势 | 学习成本 |
|---|---|---|---|
| Web GUI | 快速开发、数据分析 | 无需安装、功能完整 | ⭐ |
| VSCode插件 | 日常开发、代码管理 | IDE集成、版本控制 | ⭐⭐ |
| Python API | 数据分析、机器学习 | 生态丰富、灵活 | ⭐⭐ |
| Java API | 企业应用、后端服务 | 稳定可靠、高性能 | ⭐⭐⭐ |
| REST API | 跨语言集成 | 通用性强、易集成 | ⭐ |
二、Web GUI详解
2.1 界面介绍
DolphinDB Web GUI是官方提供的Web开发环境,访问地址:
http://localhost:8848
界面布局:
Web GUI界面
顶部导航栏
文件
编辑
视图
帮助
左侧面板
文件浏览器
数据库浏览器
函数库
中间编辑区
脚本编辑器
结果展示
右侧面板
变量监视
任务管理
2.2 核心功能
2.2.1 脚本编辑器
脚本编辑器支持以下功能:
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 执行脚本 | Ctrl+Enter | 执行当前脚本 |
| 执行选中 | Ctrl+Shift+Enter | 执行选中代码 |
| 格式化 | Ctrl+Shift+F | 格式化代码 |
| 注释 | Ctrl+/ | 注释/取消注释 |
| 查找替换 | Ctrl+F | 查找替换 |
2.2.2 数据浏览器
数据库浏览器
DFS数据库
内存表
流表
查看表结构
浏览数据
导出数据
查看变量
修改数据
2.2.3 可视化工具
Web GUI内置图表功能:
python
// 示例:绘制折线图
t = table(1..100 as x, sin(1..100) as y)
plot(t.y, t.x, "正弦曲线", LINE)
// 示例:绘制柱状图
t = table(`A`B`C`D as category, 10 20 15 25 as value)
plot(t.value, t.category, "分类统计", BAR)
// 示例:绘制散点图
t = table(rand(100.0, 100) as x, rand(100.0, 100) as y)
plot(t.y, t.x, "散点图", SCATTER)
2.3 实用技巧
2.3.1 代码片段管理
保存常用代码片段:
python
// 文件: snippets/connect.dos
// 数据库连接模板
def connectDB(host, port, user, pwd){
conn = xdb(host, port, user, pwd)
return conn
}
// 使用
run("/snippets/connect.dos")
conn = connectDB("localhost", 8848, "admin", "123456")
2.3.2 结果导出
python
// 导出查询结果为CSV
t = select * from loadTable("dfs://db", "table") limit 1000
saveText(t, "/data/export.csv")
// 导出为JSON
saveText(t, "/data/export.json", true)
2.3.3 任务管理
python
// 查看运行中的任务
getRecentJobs()
// 取消任务
cancelJob(jobId)
// 查看任务详情
getJobStatus(jobId)
三、VSCode插件
3.1 安装插件
在VSCode扩展市场搜索安装:
扩展名称:DolphinDB
发布者:DolphinDB
安装步骤:
打开VSCode
扩展市场
搜索DolphinDB
点击安装
重启VSCode
配置连接
3.2 配置连接
创建连接配置文件 .vscode/dolphindb.json:
json
{
"connections": [
{
"name": "本地开发",
"host": "localhost",
"port": 8848,
"user": "admin",
"password": "123456",
"default": true
},
{
"name": "测试环境",
"host": "192.168.1.100",
"port": 8848,
"user": "developer",
"password": "dev_password"
},
{
"name": "生产环境",
"host": "prod.dolphindb.com",
"port": 8848,
"user": "readonly",
"password": "prod_password"
}
]
}
3.3 核心功能
3.3.1 语法高亮
VSCode插件提供完整的语法高亮支持:
python
// 关键字高亮
select count(*) from table
where timestamp > now() - 3600000
group by device_id
// 函数高亮
t = table(1..10 as id, rand(100.0, 10) as value)
avg(t.value)
sum(t.value)
max(t.value)
// 内置变量高亮
now()
today()
version()
3.3.2 代码补全
| 补全类型 | 触发方式 | 示例 |
|---|---|---|
| 函数名 | 输入函数前缀 | sel → select |
| 表名 | 输入表前缀 | loadT → loadTable |
| 列名 | 输入列前缀 | t. → 列出所有列 |
| 参数提示 | 输入括号 | func( → 显示参数 |
3.3.3 远程执行
python
// 选中代码后按 Ctrl+Shift+E 执行
// 或右键选择"Execute in DolphinDB"
// 示例脚本
db = database("dfs://demo", VALUE, 2024.01.01..2024.12.31)
t = table(1:0, `timestamp`value, [TIMESTAMP, DOUBLE])
db.createPartitionedTable(t, `sensor_data, `timestamp)
// 执行结果在输出面板显示
3.4 实用配置
3.4.1 代码格式化
在 settings.json 中配置:
json
{
"dolphindb.format.enable": true,
"dolphindb.format.indentSize": 4,
"dolphindb.format.useTabs": false,
"dolphindb.format.alignKeywords": true
}
3.4.2 代码检查
json
{
"dolphindb.lint.enable": true,
"dolphindb.lint.checkSyntax": true,
"dolphindb.lint.checkVariables": true
}
四、Python API详解
4.1 安装与连接
安装
bash
pip install dolphindb
基本连接
python
import dolphindb as ddb
# 创建会话
session = ddb.session()
# 连接服务器
session.connect('localhost', 8848, 'admin', '123456')
# 测试连接
result = session.run('1 + 1')
print(result) # 输出: 2
# 关闭连接
session.close()
上述代码展示了Python API的基本用法。首先创建session对象,然后调用connect方法连接到DolphinDB服务器,使用run方法执行脚本,最后关闭连接。
4.2 数据操作
4.2.1 创建表
python
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# 创建DataFrame
num_records = 10000
timestamps = [datetime(2024, 1, 1) + timedelta(seconds=i) for i in range(num_records)]
df = pd.DataFrame({
'device_id': np.random.randint(1, 100, num_records),
'timestamp': timestamps,
'temperature': np.random.uniform(20, 30, num_records),
'humidity': np.random.uniform(40, 60, num_records),
'pressure': np.random.uniform(1000, 1020, num_records)
})
# 上传到DolphinDB
session.upload({'sensor_data': df})
# 创建分布式表
session.run('''
db = database("dfs://iot_demo", RANGE, 2024.01.01..2024.12.31)
schema = table(1:0, `device_id`timestamp`temperature`humidity`pressure,
[INT, TIMESTAMP, DOUBLE, DOUBLE, DOUBLE])
db.createPartitionedTable(schema, `sensor_data, `timestamp)
loadTable("dfs://iot_demo", "sensor_data").append!(sensor_data)
''')
print(f"成功插入 {num_records} 条数据")
上述代码展示了如何将Pandas DataFrame上传到DolphinDB并创建分布式表。首先创建包含设备ID、时间戳、温度、湿度和压力的DataFrame,然后使用upload方法上传,最后创建分布式表并插入数据。
4.2.2 查询数据
python
# 查询数据
result = session.run('''
t = loadTable("dfs://iot_demo", "sensor_data")
select device_id,
avg(temperature) as avg_temp,
max(temperature) as max_temp,
min(temperature) as min_temp,
count(*) as record_count
from t
group by device_id
order by avg_temp desc
limit 10
''')
print(result)
4.2.3 流式查询
python
# 流式查询大数据量
def process_batch(batch):
"""处理每批数据"""
print(f"处理 {len(batch)} 条数据")
# 在这里进行数据处理
return batch
# 使用流式查询
result = session.run('''
t = loadTable("dfs://iot_demo", "sensor_data")
select * from t
''', batchSize=1000, callback=process_batch)
4.3 高级功能
4.3.1 异步执行
python
import threading
# 异步执行脚本
def async_query():
result = session.run('''
// 长时间运行的查询
t = loadTable("dfs://iot_demo", "sensor_data")
select count(*) from t
''')
print(f"查询结果: {result}")
# 启动异步线程
thread = threading.Thread(target=async_query)
thread.start()
# 主线程继续执行其他任务
print("查询已提交,等待结果...")
# 等待结果
thread.join()
4.3.2 批量操作
python
# 批量插入数据
def batch_insert(session, table_name, dataframes):
"""批量插入多个DataFrame"""
for i, df in enumerate(dataframes):
session.upload({f'batch_{i}': df})
session.run(f'''
loadTable("dfs://iot_demo", "{table_name}").append!(batch_{i})
''')
print(f"已插入第 {i+1} 批数据")
# 示例:分批插入
batch_size = 1000
dataframes = [df[i:i+batch_size] for i in range(0, len(df), batch_size)]
batch_insert(session, "sensor_data", dataframes)
4.3.3 事务处理
python
# 使用事务
session.run('''
// 开始事务
beginTxn()
try {
// 执行操作
t = loadTable("dfs://iot_demo", "sensor_data")
t.append!(new_data)
// 提交事务
commitTxn()
} catch(ex) {
// 回滚事务
rollbackTxn()
throw ex
}
''')
五、Java API详解
5.1 环境配置
Maven依赖
xml
<dependency>
<groupId>com.dolphindb</groupId>
<artifactId>dolphindb-java-api</artifactId>
<version>2.00.11.1</version>
</dependency>
Gradle依赖
groovy
implementation 'com.dolphindb:dolphindb-java-api:2.00.11.1'
5.2 基本操作
连接与查询
java
import com.xxdb.DBConnection;
import com.xxdb.data.Entity;
import com.xxdb.data.BasicTable;
import com.xxdb.data.BasicInt;
import com.xxdb.data.BasicDouble;
public class DolphinDBExample {
public static void main(String[] args) throws Exception {
// 创建连接
DBConnection conn = new DBConnection();
conn.connect("localhost", 8848, "admin", "123456");
// 执行简单查询
Entity result = conn.run("1 + 1");
System.out.println("结果: " + result);
// 执行复杂查询
String script = """
t = table(1..10 as id, rand(100.0, 10) as value)
select * from t where id > 5
""";
BasicTable table = (BasicTable) conn.run(script);
System.out.println("查询结果:\n" + table);
// 关闭连接
conn.close();
}
}
上述Java代码展示了如何使用DolphinDB Java API连接数据库并执行查询。首先创建DBConnection对象,调用connect方法建立连接,然后使用run方法执行脚本,最后关闭连接。
5.3 数据操作
插入数据
java
import com.xxdb.data.BasicTable;
import com.xxdb.data.BasicIntVector;
import com.xxdb.data.BasicDoubleVector;
import com.xxdb.data.BasicTimestampVector;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
public class DataInsertExample {
public static void main(String[] args) throws Exception {
DBConnection conn = new DBConnection();
conn.connect("localhost", 8848, "admin", "123456");
// 准备数据
int size = 100;
int[] deviceIds = new int[size];
double[] temperatures = new double[size];
long[] timestamps = new long[size];
for (int i = 0; i < size; i++) {
deviceIds[i] = i % 10 + 1;
temperatures[i] = 20 + Math.random() * 10;
timestamps[i] = LocalDateTime.now().plusSeconds(i)
.toEpochSecond(ZoneOffset.UTC) * 1000;
}
// 创建向量
BasicIntVector deviceIdVec = new BasicIntVector(deviceIds);
BasicDoubleVector tempVec = new BasicDoubleVector(temperatures);
BasicTimestampVector tsVec = new BasicTimestampVector(timestamps);
// 创建表
List<String> colNames = Arrays.asList("device_id", "timestamp", "temperature");
List<Vector> cols = Arrays.asList(deviceIdVec, tsVec, tempVec);
BasicTable table = new BasicTable(colNames, cols);
// 上传并插入
conn.upload("sensor_data", table);
conn.run("loadTable(\"dfs://iot_demo\", \"sensor_data\").append!(sensor_data)");
System.out.println("成功插入 " + size + " 条数据");
conn.close();
}
}
六、REST API
6.1 API概述
DolphinDB提供REST API接口,支持HTTP访问:
| 接口 | 方法 | 说明 |
|---|---|---|
/api/run |
POST | 执行脚本 |
/api/login |
POST | 用户登录 |
/api/logout |
POST | 用户登出 |
/api/database |
GET | 获取数据库列表 |
/api/table |
GET | 获取表结构 |
6.2 使用示例
执行脚本
bash
# 执行简单脚本
curl -X POST "http://localhost:8848/api/run" \
-H "Content-Type: application/json" \
-d '{
"script": "1 + 1",
"sessionId": "test-session"
}'
# 执行查询
curl -X POST "http://localhost:8848/api/run" \
-H "Content-Type: application/json" \
-d '{
"script": "select count(*) from loadTable(\"dfs://iot_demo\", \"sensor_data\")",
"sessionId": "test-session"
}'
Python调用REST API
python
import requests
import json
class DolphinDBRestClient:
def __init__(self, host, port, user, password):
self.base_url = f"http://{host}:{port}/api"
self.session_id = None
self.login(user, password)
def login(self, user, password):
"""登录"""
response = requests.post(
f"{self.base_url}/login",
json={"userId": user, "password": password}
)
result = response.json()
self.session_id = result.get("sessionId")
return result
def run(self, script):
"""执行脚本"""
response = requests.post(
f"{self.base_url}/run",
json={
"script": script,
"sessionId": self.session_id
}
)
return response.json()
def logout(self):
"""登出"""
requests.post(
f"{self.base_url}/logout",
json={"sessionId": self.session_id}
)
# 使用示例
client = DolphinDBRestClient("localhost", 8848, "admin", "123456")
result = client.run("select count(*) from loadTable(\"dfs://iot_demo\", \"sensor_data\")")
print(result)
client.logout()
上述代码封装了DolphinDB REST API的调用。DolphinDBRestClient类提供了login、run、logout方法,可以方便地执行脚本和查询数据。
七、最佳实践
7.1 连接池管理
python
from dolphindb.session_pool import SessionPool
# 创建连接池
pool = SessionPool(
host='localhost',
port=8848,
user='admin',
password='123456',
pool_size=10
)
# 使用连接
def query_data():
session = pool.get_session()
try:
result = session.run('select * from loadTable("dfs://db", "table") limit 100')
return result
finally:
pool.return_session(session)
# 关闭连接池
pool.close()
7.2 错误处理
python
import dolphindb as ddb
from dolphindb.exceptions import DolphinDBException
session = ddb.session()
try:
session.connect('localhost', 8848, 'admin', '123456')
result = session.run('select * from non_existent_table')
except DolphinDBException as e:
print(f"DolphinDB错误: {e}")
except Exception as e:
print(f"其他错误: {e}")
finally:
session.close()
7.3 性能优化
| 优化项 | 建议 | 效果 |
|---|---|---|
| 批量写入 | 使用批量插入代替单条插入 | 提升10倍性能 |
| 连接复用 | 使用连接池管理连接 | 减少连接开销 |
| 异步执行 | 长时间查询使用异步 | 提升响应速度 |
| 数据压缩 | 启用数据压缩 | 减少网络传输 |
八、常见问题
8.1 连接问题
超时
认证失败
端口不通
连接失败
错误类型
检查网络/防火墙
检查用户名密码
检查端口配置
telnet host port
确认账户信息
netstat -tlnp
8.2 性能问题
| 问题 | 排查方法 | 解决方案 |
|---|---|---|
| 查询慢 | 查看执行计划 | 优化查询/添加索引 |
| 写入慢 | 检查分区策略 | 调整分区配置 |
| 内存高 | 监控内存使用 | 调整内存配置 |
九、总结
本文全面介绍了DolphinDB的开发工具生态。核心要点如下:
- Web GUI:功能完整的Web开发环境,适合快速开发和数据分析
- VSCode插件:IDE集成开发,支持语法高亮、代码补全、远程执行
- Python API:丰富的数据操作接口,适合数据分析和机器学习
- Java API:企业级应用开发,稳定可靠
- REST API:跨语言集成,通用性强
- 最佳实践:连接池管理、错误处理、性能优化
思考题:
- 你的开发场景适合使用哪种工具?
- 如何设计一个高效的DolphinDB数据访问层?
- 在生产环境中如何保证连接的稳定性和性能?