时序数据存储数据库比对:设计货币交易平台的技术选型实践

工业AI安全实战:轻量模型、时序建模与人机协同的落地方法论 工业网络安全中的AI应用,本质是面向物理系统约束的智能增强,而非通用大模型的简单迁移。其核心在于理解OT数据的稀疏性、强时序性与无标签特性,依托轻量级可解释模型(如One-Class SVM、XGBoost)构建动态行为基线,并深度融合协议解析、特征工程与物理知识。技术价值体现在毫秒级异常识别、预测性维护决策支持及自动化策略优化,广泛应用于电力、化工、轨交等关键基础设施的等保合规建设与零信任架构演进。本文聚焦真实产线中AI模型部署的‘矮胖’设计、数据健康度治理与人机协同闭环,直击工业AI落地中最常被忽视的时 阅读详情

作者:旷野说 tikrok.cc 网站作品开源作者
场景:设计 · 基于真实行情的轻量级货币(贵金属/外汇)交易平台原型
目标:在有限资源(mac studio m1 max 64G开发机)下,构建高性能、可扩展的时序数据处理管道


引言:为什么时序数据库是量化系统的核心?

本人之前在前东家研发量化系统时,大量使用 mongodb和 mysql,虽然容易上手,但是真的慢。固而有了此篇内容。
在构建一个支持 实时行情接入、技术指标计算、回测验证 的货币交易平台原型时,我们很快意识到:数据存储引擎的选择,直接决定了系统的性能上限与开发效率。

传统关系型数据库(如 MySQL)在高频写入下容易成为瓶颈;文档数据库(如 MongoDB)虽灵活,却缺乏对时间窗口、滑动聚合等操作的原生支持;而通用分析引擎又难以兼顾写入吞吐与低延迟查询。

于是,我们将目光投向四款主流时序/分析型数据库:

  • TDengine(国产高性能时序数据库)
  • TimescaleDB(PostgreSQL 时序扩展)
  • DuckDB(嵌入式向量化分析引擎)
  • MongoDB(作为对比项)

本文将从 macOS Apple Silicon 开发环境适配、时序指标生成能力、资源消耗、与量化栈集成度 四个维度,分享我们在设计中的实测对比与最终选型逻辑。


一、测试环境与数据模型

硬件与软件

  • 设备:mac studio m1 max (64GB RAM)
  • 系统:macOS Sonoma(ARM64)
  • 数据规模:模拟 XAUUSD(黄金/美元)1 分钟 K 线,共 50 万条(覆盖 1 年)
  • 指标需求:SMA(20)、波动率(20)、RSI(14)

数据模型

-- 结构化时序表(所有数据库均按此逻辑建模)
timestamp: DATETIME  -- 时间戳
symbol:    VARCHAR   -- 品种(如 'XAUUSD')
open:      DOUBLE
high:      DOUBLE
low:       DOUBLE
close:     DOUBLE
volume:    BIGINT

二、四大数据库深度对比

1. macOS ARM 支持与安装体验

数据库安装方式启动复杂度是否原生 ARM
TDenginebrew install tdengine⭐(一键启动)✅
TimescaleDBbrew install timescaledb⭐⭐(需配置 PG)✅
DuckDBpip install duckdb⭐(无服务)✅✅
MongoDBbrew install mongodb-community⭐⭐✅

💡 DuckDB 和 TDengine 对 Apple Silicon 开发者最友好——无需后台服务,零配置即可运行。


2. 时序指标生成能力实测

我们以 计算 20 日 SMA 与滚动波动率 为例,对比 SQL 表达力与执行效率:

✅ TDengine(简洁高效)
SELECT 
  ts,
  close,
  MOVING_AVG(close, 20) AS sma_20,
  STDDEV(close) OVER (ORDER BY ts INTERVAL '20' ROWS) AS vol_20
FROM xauusd;
  • 耗时:152 ms
  • 优势:专用函数 + 列式存储,I/O 极小
✅ TimescaleDB(标准 SQL + 扩展)
SELECT 
  time,
  close,
  AVG(close) OVER (ORDER BY time ROWS 19 PRECEDING) AS sma_20,
  STDDEV(close) OVER (ORDER BY time ROWS 19 PRECEDING) AS vol_20
FROM ticks;
  • 耗时:298 ms
  • 优势:兼容 PostgreSQL 生态,timescaledb_toolkit 提供 RSI/MACD
✅ DuckDB(向量化之王)
-- 与上述 TimescaleDB 语法完全一致
SELECT ... FROM read_parquet('xauusd.parquet');
  • 耗时:78 ms(最快!)
  • 优势:自动启用 ARM NEON 指令,内存计算无网络开销
❌ MongoDB(冗长低效)
db.ticks.aggregate([
  { $sort: { ts: 1 } },
  {
    $setWindowFields: {
      output: {
        prices: { $push: "$close", window: { documents: [-19, 0] } }
      }
    }
  },
  { $addFields: { vol_20: { $stdDevPop: "$prices" } } }
])
  • 耗时:2150 ms
  • 劣势:非向量化、内存拷贝频繁、表达复杂

📊 性能排序(快 → 慢):DuckDB > TDengine > TimescaleDB >> MongoDB


3. 写入吞吐与存储效率

数据库写入 50 万条耗时压缩后磁盘占用适合场景
TDengine3.2 秒12 MB高频行情写入
TimescaleDB8.7 秒45 MB中低频 + 复杂查询
DuckDBN/A(只读分析)28 MB(Parquet)离线回测
MongoDB6.1 秒68 MB非结构化事件

🔑 TDengine 凭借列式存储 + 自动分片,在写入与压缩上全面领先。


4. 与 Python 量化栈集成

数据库Python 驱动Pandas 集成示例代码简洁度
TDenginetaospy✅(read_sql)⭐⭐
TimescaleDBpsycopg2✅⭐⭐
DuckDB内置✅✅(原生)⭐
MongoDBpymongo⚠️(需转 dict)⭐⭐⭐
# DuckDB:一行读取 Parquet 并计算
import duckdb
df = duckdb.sql("""
    SELECT *, AVG(close) OVER (ROWS 19 PRECEDING) AS sma_20
    FROM 'xauusd.parquet'
""").df()

💡 DuckDB 的嵌入式特性使其成为 Jupyter Notebook 回测的首选。


三、设计架构:混合数据库方案

基于以上对比,我们采用 “分层存储 + 专用引擎” 架构:

Node.js 采集

每日导出

OANDA/MT5 行情 API

TDengine

Parquet 文件

DuckDB

Pandas 因子计算

回测引擎

交易信号

为什么这样设计?

  • TDengine:承担 7×24 小时高频写入,利用其高吞吐、高压缩特性;
  • DuckDB:负责 离线回测与因子挖掘,发挥其向量化计算优势;
  • 避免单一数据库妥协:既不牺牲写入性能,也不降低分析速度。

🎓 该方案成本极低:全程开源免费,仅需一台云服务器(约 ¥300/月)部署 TDengine,本地 Mac 完成分析。如果使用 mongodb 200gb的金融时序数据,在TDengine上存储则只需要 50gb 左右,那在数据恢复和迁移上完胜 mongodb,且存储成本极低,不知是否会选择此技术方案呢!!


四、避坑指南:给后来者的建议

  1. 不要用 MongoDB 存储结构化行情
    → 灵活 schema 在 OHLC 场景中毫无价值,反而拖慢分析。

  2. DuckDB 不适合实时写入
    → 它是分析引擎,不是存储引擎。用 Parquet 作为中间格式桥接。

  3. TDengine 的“超级表”是关键

    CREATE STABLE ticks (...) TAGS (symbol BINARY(10)); -- 按品种自动分表
    

    → 避免手动管理多张表,提升查询效率。

  4. macOS ARM 用户优先选择 Homebrew 安装
    → 确保获得原生 ARM64 二进制,避免 Rosetta 2 性能损失。


结语:选对工具,事半功倍

在毕业设计中,我们曾尝试用单一数据库解决所有问题,结果要么写入卡顿,要么回测缓慢。直到采用 TDengine + DuckDB 混合架构,才真正实现:

  • 行情写入:10万点/秒,CPU 占用 <20%
  • 因子回测:1年数据 SMA 计算 <100ms
  • 开发体验:Python 脚本 50 行完成端到端 pipeline

时序数据库没有“最好”,只有“最合适”。希望本文能为你的量化系统或毕业设计提供有价值的参考。


附录:

  • 测试数据集:XAUUSD 1分钟 K 线(2023–2024)
  • 环境配置脚本:一键安装 ARM 兼容版数据库

本文所有测试均在 macOS Sonoma + M1 Max 环境下完成,代码已适配国内镜像源。
点赞超 1 万,给出评测源码。

【信息科学与工程学】计算机科学与自动化-——第十五篇云计算 11 算法篇 在百万级虚拟机、百万级租户的超大规模云环境中,核心算法挑战包括:挑战维度具体问题算法需求技术复杂度规模性​百万级对象并发管理分布式算法、分区算法极高(NP-hard问题)多租户​租户间隔离与资源共享公平性算法、隔离算法高(多目标优化)动态性​资源需求实时变化自适应算法、在线算法高(实时决策)异构性​硬件/负载/需求差异分类算法、匹配算法中高(多维度优化)经济性​资源利用率与成本平衡优化算法、博弈论算法高(多目标博弈)以下是按领域分类的详细算法列表:算法名称数学建模表达核心思想时间复杂度适用场景推理步骤首次适 阅读详情

相关推荐

图谱后端选型:Memgraph vs Neo4j vs 嵌入式 SQLite,什么时候该切换?

本文通过脚本自动探测代码图谱规模,对比SQLite、Memgraph与Neo4j在不同节点量级下的性能表现。实测表明:10万节点内嵌入式SQLite凭借低延迟和轻量部署仍具竞争力;超15万节点后,Memgraph适合低延迟、高并发场景;而Neo4j仅在百万级图谱且需复杂查询时才具备优势。配套提供一键测试延迟与平滑迁移后端的Python工具链,实现按需选型与无缝切换。

xianyinsuifeng的博客 40

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 476

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档)

本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。

招风的黑耳优快云 294

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 432

告别米级误差:手把手教你用Nordic nRF52840实现厘米级蓝牙测距(Channel Sounding实战)

本文详细介绍了如何利用Nordic nRF52840开发板和蓝牙信道探测(Channel Sounding)技术实现厘米级高精度测距。通过硬件配置、软件优化和实战案例,帮助开发者快速掌握低功耗蓝牙测距技术,适用于工业自动化、智能仓储等场景。

weixin_42741930的博客 479

保姆级教程:手把手教你用CANoe/CANalyzer读取汽车故障码(UDS 0x19服务实战)

本文提供了一份详细的CANoe/CANalyzer使用教程,指导如何通过UDS 0x19服务读取汽车故障码。从硬件配置到报文构建,再到故障码解析,手把手教你完成汽车诊断全流程,特别适合汽车电子工程师和诊断开发人员。

weixin_42524945的博客 262

【基于 WebSocket 的多用户网页五子棋】—— 数据管理模块

但行好事,莫问前程

qq_42996461的博客 250

ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)解决办法

问题:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO) 很久没用这台电脑的mysql了,今天需要连接数据库,启动数据库报错: ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO) 解决方法: 查阅资料后知道了,应该使用已知的用户名和密码登陆 mysql -u root -p 然而密

一个超会写Bug的程序猿的博客 43万+

C++算法(七)

C++ stack算法题和一些客观题

2503_94479566的博客 378

STM32 IAP+APP合并Hex文件全自动脚本(Keil5一键生成)

本文详细介绍了一种基于Keil5开发环境的STM32 IAP与APP程序Hex文件全自动合并方案。通过编写批处理或Python脚本,并将其集成到Keil的编译后流程中,实现一键编译、自动合并,彻底解决手动操作繁琐易错的问题,极大提升STM32固件开发与远程升级的效率。

weixin_29191761的博客 307

让 OData V4 界面更聪明:SAP UI5 中的 Side Effects 全解析

摘要:在OData V4应用中,字段修改常触发联动更新(Side Effects)。SAP UI5支持通过后端PATCH响应隐式返回或前端显式请求(requestSideEffects)两种方式处理。最佳实践包括:在validateFieldGroup事件中触发同批次请求,使用$$patchWithoutSideEffects避免重复刷新,并在草稿场景优化响应体。注解定义触发规则,而前端负责执行时机,二者配合可减少网络开销并保证数据一致性。Fiori elements进一步扩展了Side Effects在批

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 179

OpenClaw 深度调查:把 AI 助手做成你自己的控制平面

对 openclaw/openclaw 的完整技术尽调:Gateway 架构、Agent 运行时、工具与沙箱、30 个消息通道、181 个插件、安全信任边界、工程代价与采用建议。17 章 / 10 张图,全部数字标注口径,数据截至 2026-10-31。

厚积薄发 293

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

baidu_35680696的博客 972

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 176

数据分享|2023年OSM道路数据(全国,分省,分市)

首先这个工作非常有必要的,因为我们正常使用的道路的分类都是基于包括城市快速路、城市主干路、城市次干路这个体系的,大家对于这个分类体系应该更熟悉,但是OSM地图的道路分类又不是完全按这个来的,所以非常有必要重新分类;搞清楚道路类型是我们使用道路数据做很多工作的基础,比如我们在使用道路数据的时候,经常需要预估道路的行车速度,而这个速度一般就是根据道路类型来的,比如高架路的车速肯定就比城市支路快很多!下载分为两种情况,第一种是下载小区域的数据,比如下载一个街区的数据,第二种为下载整个中国范围的。

JData_Engineer的博客 4307

基于 C# 实现 RTSP 摄像头监控分屏系统:从流媒体获取到多画面显示

通过本文的讲解,我们介绍了如何在 C# 中实现 RTSP 摄像头监控分屏系统。我们使用了FFmpeg和VLC两种不同的方法来获取和解码 RTSP 流,并通过PictureBox控件和控件实现了分屏布局。两种解码方案都非常强大,可以根据实际需求选择最适合的方案。通过这种方式,您可以轻松地在 C# 中集成 RTSP 流,并将多个摄像头的视频流实时显示在同一屏幕上,进行监控和分析。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2309

TransactionInactiveError:await 之后事务已经不活跃了

TransactionInactiveError 出现于 IndexedDB 事务已结束(非 active 状态)时调用 put、get 等操作。常见于 await 后或 setTimeout 中执行请求,因任务已完成,事务已提交或进入 finished 状态。请求必须在创建事务的同一任务中挂起,否则无效。解决方法:在 onsuccess 回调内同步发起后续操作,或提前将所有请求挂入事务。避免在异步上下文中使用事务操作,确保请求在事务活跃期内完成。

qq_40822000的博客 159

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

云计算课程小组PPT汇报任务书

36人分为6组,每组6人;形式:生活案例调研 + 理论解读;汇报时长7‑9min;PPT建议10‑14页。

Michelle8023的博客 207

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

大表 ALTER TABLE 怎么做?NineData OnlineDDL 配置与执行实践

介绍NineData OnlineDDL大表变更实践,涵盖执行策略、切表控制、拷贝批次与可视化进度追踪。

dbasenewbie的博客 295

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

软件项目交付时,源代码之外还应该交付哪些技术资料?

软件项目交付时,除可运行程序外,还应核对源代码、数据库结构、接口文档、部署运维、测试验收和账号资产。本文从实际交付环节拆解完整资料清单,并说明合同如何约定交付范围、知识产权与维护边界。

chengduyoushu的博客 305

Axum 初步入门学习笔记

)自定义错误实现后,可以直接作为Result的ErrAxum 是一个构建在 Tokio、Tower、Hyper 之上的 Rust Web 框架,核心能力是:Router 路由、Extractor 提取器、Tower 中间件、IntoResponse 响应机制、State 共享状态。那张分层架构图是“地图”不是“说明书”:它帮你建立全局观,但 Service、Repository、数据库、Redis、MQ 都是你自己在 Handler 内部调用的业务/基础设施层,不是 Axum 自带的。

weixin_43219667的博客 175

MySQL报Too many open files?句柄耗尽的排查与参数配置

文章讲清 max_connections 与 open_files_limit 两个额度、句柄被谁占走、分区表为什么最容易踩,给出从 error log 到 /proc/pid/limits 的定位顺序与句柄预算算法。

「一个在数据库赛道上边学边分享的学妹」——聚焦国产数据库/信创方向、分享学习笔记、踩坑经验和行业观察。 336

SQL Server 数据库双备份:简化配置,兼顾本地留存与异机归档

本文针对中小企业SQLServer数据库备份难题,提出简化配置与本地+异机双副本方案。传统原生备份依赖手动脚本,存在配置复杂、传输易中断、日志分散、静默失败等问题。推荐使用图形化工具实现备份、本地留存与异机同步一体化管理,支持断点续传、加密传输、自动清理与版本控制,降低运维负担。双副本策略提升数据安全性,本地快速恢复,异地防硬件故障。建议定期验证恢复流程,确保备份可用性。

2501_93776716的博客 287

Redis 入门详解:核心特性、重要文件与全局命令实战

本文系统介绍了Redis的核心特性、重要文件及全局命令。Redis凭借内存存储、C语言实现和单线程设计,具备极高的读写性能;支持持久化(RDB/AOF)、主从复制与集群架构,适用于缓存、排行榜、计数器等场景,但不适合存储海量冷数据。文中还解析了常见面试题,如为何快速、单线程原理、持久化机制、KEYS *禁用原因及过期键处理策略,强调其在高并发场景下的优势与局限。

2303_77004089的博客 205

Agent 安全实战:间接提示注入的四个攻击面与防御体系

当 Agent 从 "生成内容" 走向 "执行动作",安全边界就从内容合规变成了权限越界。本文拆解间接提示注入在网页抓取、工具返回值、MCP 连接器、长期记忆四个位置的真实攻击路径,对照 Claude、GPT、Gemini 在工具调用权限模型上的设计差异,给出可直接落地的五层防御体系。

阡陌数智,专注大模型网关与 LLM 工程落地 281

【FDE前沿部署工程师实战教程】第62章:Enterprise AI Developer Platform——企业级 AI 开发者平台与低代码 AI 应用工厂

企业从AI能力平台迈向AI应用生产平台,需构建统一的企业级AI开发者平台,将模型、RAG、Agent、Workflow等能力封装为可视化、可复用的开发工具。通过PromptIDE、AgentBuilder、WorkflowBuilder等模块,实现低代码与专业代码协同,降低开发门槛。平台覆盖应用全生命周期管理,集成测试评估、安全治理与CI/CD发布体系,推动AI应用规模化、标准化交付。最终形成“需求→设计→开发→测试→发布→运营”的企业AI应用工厂模式,助力制造等行业的智能化转型。

IT古董 314
上一篇: 下线 MyBatis 二级缓存后,如何用 Spring Cache + Redis 构建安全可靠的缓存体系?
下一篇: zsh 底层解密:如何用原生能力打造“少加班”的开发终端
旷野说
博客等级 码龄9年 361粉丝 86原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值