跳到正文
Hacker News· berryhubapp·· 10 天前AI 评分23

BerryDB:用 Swift 和 AppKit 编写的开源 macOS 数据库客户端

Show HN: BerryDB – Open-source macOS database client written in Swift and AppKit

AI 导读

BerryDB 是一款用 Swift 6、SwiftUI 和 AppKit 原生构建的开源 macOS 数据库客户端,冷启动约 0.85 秒,流式读取 100 万行峰值内存约 5.5MB。

正文 · AI 翻译

📖 概述

BerryDB 是一款超快速、轻量且现代的数据库管理工具,专为 macOS 开发者、数据工程师和 DBA 打造。它使用 Swift 6、SwiftUI 和 AppKit 100% 原生构建,彻底消除了基于 Electron 的客户端的臃肿、卡顿和高内存占用。

无论你是在查询生产环境的 PostgreSQL 数据库、检查 Redis 缓存、管理 MongoDB 集合、探索 Qdrant 向量空间,还是在本地查询 SQLite 文件,BerryDB 都能凭借 Apple Keychain 安全隔区提供即时响应。


✨ 主要功能

⚡ 纯原生速度(零 Electron 臃肿)

  • 快速启动:冷启动后约 0.85 秒窗口即出现在屏幕上——没有 Chromium 运行时,没有 NodeJS 后端开销。
  • 内存不随数据增长:流式处理 1,000,000 行数据峰值内存约 5.5MB——与 200,000 行时相同。
  • AppKit 虚拟化数据网格:原生 NSTableView 引擎,可滚动和流式加载 1,000,000+ 行,而无需将它们全部保存在内存中。

在 Apple M1(16GB,macOS 26.6.2)上使用 release 构建测得。运行 scripts/measure-performance.sh 可在你自己的机器上复现这些数据——它会分别报告进程启动和首个窗口的时间,因为这两个数字并不相同。

🗄️ 多引擎数据库支持

在统一的原生工作区中连接 SQL、NoSQL、键值和向量数据库:

  • Relational / SQL:
    • PostgreSQL:原生线协议(PostgresNIO),通过 pg_cancel_backend 取消查询,SSL/TLS。
    • MySQL & MariaDB:原生驱动(MySQLNIO),完整支持 caching_sha2_password 和 mysql_native_password,SSL/TLS,KILL QUERY。
    • SQLite:通过 libsqlite3 直接嵌入式驱动,支持 WAL 模式,即时文件检查。
    • Microsoft SQL Server:通过动态链接的 FreeTDS(libsybdb)实现高兼容性 TDS 协议桥接。
  • In-Memory & Key-Value:
    • Redis & Valkey:高速 Valkey-Swift 驱动、键浏览器、实时 TTL 检查,以及针对 Strings、Hashes、Lists、Sets 和 Sorted Sets 的交互式查看器。
  • Document & Cloud NoSQL:
    • MongoDB:集合浏览器、JSON 文档编辑器、自定义过滤语法,以及副本集支持。
    • AWS DynamoDB:通过 PartiQL 语法查询、条目检查,以及 AWS SigV4 身份验证。
  • Vector & Full-Text Search:
    • Elasticsearch:集群健康监控、索引浏览器,以及搜索查询执行。
    • Qdrant:向量集合浏览器和距离度量检查器。

🔒 Apple Keychain 安全隔区与企业级安全

  • 硬件安全隔区:所有密码、令牌和 SSH 密钥都直接存储在 macOS Keychain 中。磁盘上无明文凭据。
  • 内置 SSH 隧道:由 Citadel(纯 Swift SSH 客户端)提供支持,无需依赖外部终端会话即可安全连接堡垒机跳板主机。
  • TLS/SSL 加密:完整加密支持,可自定义 CA、客户端证书和验证选项。

🤖 智能 AI SQL Copilot

  • 上下文感知 SQL 生成:通过自动注入数据库 schema,将自然语言转换为优化的 SQL 查询。
  • 查询解释与调优:即时 EXPLAIN 分析、瓶颈检测和索引建议。
  • 与你的数据库对话:直接在集成的 AI 面板中询问有关 schema、表和关系的问题。

📊 数据库智能与 ER 图

  • Mermaid.js ER 图:根据你的数据库 schema 自动生成可交互的实体关系可视化图。
  • 表分析与健康度:实时表大小、索引使用统计和行数估算。
  • 持久化查询历史:可搜索的查询日志,包含执行时长、行数和一键重新运行。

✏️ 专业查询编辑器与内联数据编辑

  • 原子内联编辑:直接在网格中编辑表格单元格,支持暂存差异审阅和原子提交。
  • 代码编辑器:SQL 语法高亮、关键字自动补全、行号和多个标签页会话。
  • 查询取消:安全取消长时间运行的查询,不会挂起或导致应用崩溃。

📊 数据库兼容性矩阵

数据库引擎 驱动 / 协议 直连 SSH 隧道 内联网格编辑 Schema / ERD
PostgreSQL(12–16+) 纯 Swift(PostgresNIO) ✅ ✅ ✅ ✅
MySQL / MariaDB(5.7、8.x) 纯 Swift(MySQLNIO) ✅ ✅ ✅ ✅
SQLite(3.x) 嵌入式(libsqlite3) ✅ 不适用 ✅ ✅
Microsoft SQL Server(2017+) FreeTDS(libsybdb) ✅ ✅ ✅ ✅
Redis / Valkey(6.x–8.x) 纯 Swift(valkey-swift) ✅ ✅ ✅(KV 编辑器) ✅(键空间)
MongoDB(5.x–7.x) 纯 Swift(MongoWireClient) ✅ ✅ ✅(JSON 编辑) ✅(集合)
AWS DynamoDB AWS REST + SigV4 ✅ ✅ ✅ ✅(表)
Elasticsearch(7.x–8.x) REST 客户端 ✅ ✅ 👁️(读取/搜索) ✅(索引)
Qdrant REST 客户端 ✅ ✅ 👁️(读取/搜索) ✅(集合)

🚀 安装与快速开始

方式 1:通过 Homebrew 安装(推荐)

使用官方 Homebrew tap,一条命令即可安装 BerryDB:

brew install --cask berry-apps/tap/berrydb

或者先添加 tap 再安装:

brew tap berry-apps/tap
brew install --cask berrydb

方式 2:下载预构建 DMG

  1. 从 download-db.berryhub.app/BerryDB-latest.dmg(或从 GitHub Releases)下载最新版本 .dmg。
  2. 打开 .dmg 文件,将 BerryDB.app 拖入你的 Applications 文件夹。
  3. 从 Spotlight(⌘Space)或 Launchpad 启动 BerryDB。

系统要求:macOS 15.0(Sequoia)或更高版本。仅支持 Apple Silicon(M1/M2/M3/M4)。

方式 3:从源码构建

BerryDB 使用标准的 Swift Package Manager(SPM)和 make。

前置条件

  • macOS 15.0 或更高版本
  • Xcode 16.0+(含 Swift 6 工具链)
  • FreeTDS 库:brew install freetds(FreeTDS / SQL Server C 头文件所需)

构建步骤

# 1. Clone repository
git clone https://github.com/berry-apps/berrydb-desktop.git
cd berrydb-desktop

# 2. Setup local development configuration
cp .env.example .env

# 3. Build debug bundle and launch application
make run

可用的 Make 命令

命令 说明
make run 构建调试版应用包,打包为 dist/BerryDB.app,并启动。
make watch 监听文件变更,自动重新构建并重新加载应用。
make test 运行完整的 Swift 单元测试和集成测试套件。
make app 在 dist/BerryDB.app 中构建优化后的发布版应用包。

🎯 用户指南

1. 添加数据库连接

  1. 点击 New Connection(⌘N),或选择侧边栏中的 + 按钮。
  2. 选择你的数据库类型(PostgreSQL、MySQL、SQLite、Redis、MongoDB、SQL Server 等)。
  3. Enter your connection credentials (Host, Port, User, Password, Database).
    • 可选:开启 SSH Tunnel,通过跳板服务器转发流量。
    • 可选:开启 SSL/TLS 以实现安全加密连接。
  4. 点击 Test Connection 验证连通性,然后点击 Save。密码会安全加密保存在你的 macOS 钥匙串中。

2. 浏览 Schema 与 ER 图

  • 使用侧边栏的 schema 树浏览表、视图、列、键和索引。
  • 右键点击任意表并选择 Show ER Diagram,查看通过 Mermaid.js 渲染的外键关系。

3. 编写查询与使用 AI Copilot

  • 按 ⌘T 打开新的查询编辑器标签页。
  • 输入 SQL 查询时会提供关键字补全,然后按 ⌘Return 执行。
  • Open the AI Assistant panel (or press ⌘J):
    • 输入自然语言提示,例如 "显示本月收入排名前 10 的客户" 或 "查找慢查询并建议索引优化"。
    • 查看生成的 SQL,然后点击 Run 或 Insert to Editor。

4. 直接在网格中编辑数据

  • 双击 NSTableView 数据网格中的任意单元格即可就地编辑值。
  • 已编辑的行会以琥珀色高亮显示。点击 Apply Changes 以原子方式提交,或点击 Discard 还原。

☕ 支持本项目(捐赠)

BerryDB 的所有本地数据库管理功能完全免费且开源。如果 BerryDB 为你节省了时间、提升了工作流程,或替代了昂贵的订阅工具,不妨请创作者喝杯咖啡:

Buy Me A Coffee on Ko-fi

👉 https://ko-fi.com/dautay

你的支持有助于支付 Apple Developer 计划费用、维护服务器基础设施,并推动功能的持续开发!


🤝 贡献

欢迎贡献、提交问题和功能请求!

  1. Fork 该仓库。
  2. 创建你的功能分支(git checkout -b feature/AmazingFeature)。
  3. 提交你的更改(git commit -m 'feat: add amazing feature')。
  4. 推送到该分支(git push origin feature/AmazingFeature)。
  5. 发起 Pull Request。

📄 许可证与第三方声明

BerryDB 是根据 Apache License 2.0 许可的开源软件——可免费用于个人和商业用途。

有关详细的第三方归属和合规信息(包括 FreeTDS 的 LGPL-2.1 动态链接合规),请参阅 THIRD-PARTY-NOTICES.md。

来源:Hacker News · github.com