DolphinDB开发环境:GUI与API工具

目录

    • 摘要
    • 一、开发工具概览
      • [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详解)
      • [4.1 安装与连接](#4.1 安装与连接)
      • [4.2 数据操作](#4.2 数据操作)
        • [4.2.1 创建表](#4.2.1 创建表)
        • [4.2.2 查询数据](#4.2.2 查询数据)
        • [4.2.3 流式查询](#4.2.3 流式查询)
      • [4.3 高级功能](#4.3 高级功能)
        • [4.3.1 异步执行](#4.3.1 异步执行)
        • [4.3.2 批量操作](#4.3.2 批量操作)
        • [4.3.3 事务处理](#4.3.3 事务处理)
    • [五、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 代码补全
补全类型 触发方式 示例
函数名 输入函数前缀 selselect
表名 输入表前缀 loadTloadTable
列名 输入列前缀 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的开发工具生态。核心要点如下:

  1. Web GUI:功能完整的Web开发环境,适合快速开发和数据分析
  2. VSCode插件:IDE集成开发,支持语法高亮、代码补全、远程执行
  3. Python API:丰富的数据操作接口,适合数据分析和机器学习
  4. Java API:企业级应用开发,稳定可靠
  5. REST API:跨语言集成,通用性强
  6. 最佳实践:连接池管理、错误处理、性能优化

思考题

  1. 你的开发场景适合使用哪种工具?
  2. 如何设计一个高效的DolphinDB数据访问层?
  3. 在生产环境中如何保证连接的稳定性和性能?

参考资料

相关推荐
曲幽19 小时前
我用fastapi-scaff搭了个项目,两天工期缩到两小时,老板以为我开挂了
python·api·fastapi·web·celery·cli·db·alembic·fastapi-scaff
weixin_4080996721 小时前
【实战案例】电商自动化:如何用 OCR API 批量识别商品图片文字?(完整方案 + 代码示例)
人工智能·ocr·api·文字识别·电商ocr·商品图片文字识别·ocr 批量识别
天空属于哈夫克31 天前
企业微信 API 选型指南:内部开发、代开发还是第三方?
自动化·企业微信·api
向量引擎1 天前
我把多模型联调拆成一条流水线 向量引擎 api key中转站 实测手记
人工智能·aigc·api·key·api调用
七夜zippoe1 天前
DolphinDB集群部署:从单机到分布式
分布式·wpf·单机·dolphindb·分集群
七夜zippoe2 天前
DolphinDB安装部署:单机版快速上手
docker·安装部署·dolphindb·单机版·web gui
xifangge20252 天前
【2026终极解法】彻底解决“由于找不到 msvcp140.dll,无法继续执行代码”报错(附微软运行库一键修复包)
windows·mysql·microsoft·报错·开发环境
weixin_408099672 天前
【实战教程】EasyClick 调用 OCR 文字识别 API(自动识别屏幕文字 + 完整示例代码)
前端·人工智能·后端·ocr·api·安卓·easyclick
handsomestWei3 天前
Docker引擎API接入配置
运维·http·docker·容器·api