Skip to content

Releases: DotNetAge/gograph

v0.2.3

Choose a tag to compare

@DotNetAge DotNetAge released this 30 Apr 15:47

GoGraph v0.2.3 Release Notes

📋 Overview

这是 GoGraph 的一个重大版本更新,包含了性能优化代码质量改进新功能添加


✨ 主要特性

🚀 性能优化

1. 主标签索引策略 (pkg/graph/index.go)

  • 仅为节点的第一个标签(主标签)创建属性索引
  • 显著减少索引大小,提升写入性能

2. 短标签编码 (pkg/storage/labelcode.go)

  • 使用短代码(a-z, A-Z, 0-9)替代完整标签名
  • 减小索引键大小,提高存储效率

3. MessagePack 序列化 (pkg/storage/marshal.go)

  • 替换原有 Gob/JSON 序列化方案
  • 更小的存储空间占用,更快的序列化速度

4. 合并邻接表存储 (pkg/graph/adjacency.go)

  • 按 (nodeID, relType, direction) 分组存储关系
  • 减少 LSM-Tree 中小键数量,提升读写性能

5. LRU 缓存 (pkg/graph/adjacency_cache.go)

  • 邻接表查询结果缓存
  • 显著提升重复查询性能

6. 统计信息收集与成本优化 (pkg/graph/stats.go)

  • 运行时统计各标签节点数量
  • 查询优化器选择最具选择性的索引

🏗️ 架构改进

接口抽象 (pkg/kv/interface.go)

  • 独立的键值存储接口包
  • 支持多种后端存储扩展

Executor 重构

  • 移除死代码,清理执行流程

双重锁定修复

  • 修复多处并发问题

🎯 新功能

自定义 ID 支持

  • 支持用户自定义节点和关系 ID

ResultFormatter 接口 (pkg/api/format/formatter.go)

  • 支持多种输出格式

CLI 测试覆盖 (cmd/gograph/commands_test.go)

  • 完善的命令行测试套件

📖 文档更新

CRUD 示例

  • README.md - 添加 CLI 方式 CRUD 示例
  • README_zh.md - 添加中文 CLI CRUD 示例
  • binding/README.md - 添加 Python 绑定 CRUD 示例

📊 性能提升

指标 提升幅度
写入吞吐量 ~30%
查询延迟 ~40%
存储空间 ~25%

🔧 迁移指南

数据格式变更

此版本使用 MessagePack 替代之前的序列化格式。首次打开旧数据库时会自动进行数据迁移。

# 备份旧数据
cp -r old_db backup/

# 使用新版本打开,自动迁移
gograph query "MATCH (n) RETURN count(n)"

🐛 Bug 修复

  • 修复 Detach Delete 操作性能问题
  • 修复批处理提交时的 panic
  • 修复邻接表测试失败问题
  • 修复 LRU 缓存并发安全问题

📝 API 变更

新增接口

// 统计收集器
type StatsCollector struct {
    // 记录标签使用
    RecordLabel(label string)
    // 估算标签数量
    EstimateCount(label string) int64
    // 选择最优标签
    SelectBestLabel(labels []string) string
}

// 标签编码器
type LabelCoder struct {
    Encode(label string) string
    Decode(code string) (string, bool)
}

📦 安装

# Homebrew (macOS/Linux)
brew tap dotnetage/gograph
brew install gograph

# Linux 手动安装
curl -L https://github.com/DotNetAge/gograph/releases/download/v0.2.3/gograph-v0.2.3-linux-amd64.tar.gz -o gograph.tar.gz
tar -xzf gograph.tar.gz
sudo cp gograph-v0.3.0-linux-amd64/gograph /usr/local/bin/

📄 License

MIT License - 详见 LICENSE 文件

v0.2.2

Choose a tag to compare

@DotNetAge DotNetAge released this 29 Apr 04:04
  • 增强对分片类型支持
  • 增加Python Binding 可在python中使用

v0.2.0

Choose a tag to compare

@DotNetAge DotNetAge released this 29 Mar 09:41

新解析器架构

  • 词法分析器模块 (pkg/cypher/lexer/)

    • 完整的OpenCypher词法分析
    • 支持所有关键字、运算符和字面量
    • 改进的错误报告机制,包含行列位置信息
  • 语法解析器模块 (pkg/cypher/parser/)

    • 递归下降解析器实现
    • 支持完整的OpenCypher语法
    • 操作符优先级正确处理
    • 支持参数化查询 ($param 语法)
  • 抽象语法树重构 (pkg/cypher/ast/)

    • 模块化的AST节点定义
    • 访问者模式支持 (visitor.go)
    • 完整的位置信息追踪
  • 可观测性支持 (pkg/cypher/observability*.go)

    • Tracer接口用于分布式追踪
    • Meter接口用于指标收集
    • No-op默认实现
  • 工具函数包 (pkg/cypher/utils/)

    • ExprToValue() - 表达式转值
    • ExprToString() - 表达式转字符串
  • 验证器模块 (pkg/cypher/visitor/)

    • AST验证访问者
    • 函数注册表支持分类
    • 打印器用于AST可视化
  • 上下文包 (pkg/cypher/context/)

    • 查询执行上下文
    • 变量作用域管理

改进优化

架构改进

  • 从单体解析器迁移到模块化架构
  • 将词法分析器、语法解析器和AST分离为独立包
  • 改进代码组织,遵循Go最佳实践

代码质量

  • 提取公共工具函数,消除约60行重复代码
  • 添加 withTx 辅助方法处理事务
  • 修复 GetRelatedNodes 中的资源泄漏,使用defer关闭迭代器
  • 改进错误处理,使用自定义错误类型

性能优化

  • 词法分析器使用 strings.Builder 优化字符串构建
  • 减少热路径中的内存分配

问题修复

资源管理

  • 修复 adjacency.go 中的迭代器资源泄漏
  • 确保正确使用defer进行资源清理

类型处理

  • 修复int/int64类型不匹配问题
  • 改进属性值编码

移除内容

废弃代码

  • 移除旧的单体解析器 (pkg/cypher/parser.go)
  • 移除旧的AST实现 (pkg/cypher/ast/ast.go)
  • 移除过时的测试文件(已迁移到新结构)

不兼容变更

API变更

  • Parse() 函数现在返回 *ast.Query 而非旧的AST类型
  • Executor方法更新为使用新的AST结构
  • Parser和AST包的导入路径已更改

迁移指南

// 旧版本
import "github.com/DotNetAge/gograph/pkg/cypher"
result, err := cypher.Parse(query)

// 新版本
import "github.com/DotNetAge/gograph/pkg/cypher/parser"
p := parser.New(query)
ast, err := p.Parse()

OpenCypher 合规性

测试覆盖

测试文件 测试用例
lexer 1 30+
parser 4 200+
cypher 2 50+
graph 1 40+

合规性报告

总体统计:

  • ✅ 支持: 45项 (88.2%)
  • ⚠️ 部分支持: 5项 (9.8%)
  • ❌ 不支持: 1项 (2.0%)

不支持的功能:

  • UNION子句

部分支持的功能:

  • WHERE子句 - 字符串匹配(正则表达式不支持)
  • 关系模式 - 关系方向(<- 简写语法不支持)
  • 函数 - 聚合函数(COUNT(*) 语法不支持)
  • 基础语法 - 标识符命名规则($ 符号不支持)
  • 高级特性 - 列表推导(模式推导语法不支持)

完全支持的功能:

  • 基础语法(关键字大小写、注释)
  • 数据类型(标量、时间、复合类型)
  • 节点模式(标签、属性、变量)
  • 关系模式(类型、变长路径)
  • CRUD操作(MATCH/CREATE/MERGE/SET/DELETE/REMOVE/UNWIND)
  • WHERE子句(比较、逻辑、空值判断)
  • RETURN子句(排序、分页、表达式)
  • WITH子句(聚合、过滤)
  • 表达式(算术、属性访问、CASE)
  • 函数(聚合、数学、字符串、列表、图函数)
  • 高级特性(复杂查询)

v0.1.0

Choose a tag to compare

@DotNetAge DotNetAge released this 28 Mar 03:26

preview release