Categorygithub.com/AlexiaAshford/jsonDB
repositorypackage
0.0.0-20240807145241-81d908bb0733
Repository: https://github.com/alexiaashford/jsondb.git
Documentation: pkg.go.dev

# Packages

No description provided by the author

# README

jsonDB: 一个轻量级的JSON文档数据库

目录

  1. 简介
  2. 主要特性
  3. 包结构
  4. 核心组件
  5. 基本操作
  6. 索引管理
  7. 查询操作
  8. 并发控制
  9. 持久化和恢复
  10. 日志系统
  11. 性能优化
  12. 使用示例
  13. 注意事项和限制
  14. 未来改进方向

简介

jsonDB 是一个用 Go 语言编写的轻量级 JSON 文档数据库。它提供了简单而高效的方式来存储、检索和管理 JSON 格式的数据。这个数据库设计用于嵌入式应用程序,支持基本的 CRUD 操作、索引、并发访问以及持久化存储。

主要特性

  • 支持 JSON 文档的存储和检索
  • 提供单字段和复合字段索引
  • 支持基本查询、范围查询和模糊查询
  • 并发安全的操作
  • 支持持久化存储和从崩溃中恢复
  • 使用 Write-Ahead Logging (WAL) 确保数据一致性
  • 可配置的日志系统
  • 高性能的内存中操作

包结构

jsonDB 包含以下主要文件:

  • db.go: 定义了 Database 结构体和核心数据库操作
  • document.go: 实现了文档的 CRUD 操作
  • indexs.go: 处理索引相关的功能
  • query.go: 实现查询操作
  • complexquery.go: 实现高级查询功能(如范围查询和模糊查询)
  • write.go: 处理数据持久化和 WAL
  • utils.go: 包含常量和工具函数
  • logger.go: 实现可配置的日志系统
  • trie.go: 实现支持模糊查询的 Trie 结构

核心组件

主要的结构体包括 DatabaseDocumentIndexCompositeIndex。这些组件共同构成了 jsonDB 的核心架构。

基本操作

jsonDB 支持以下基本操作:

  • 创建数据库
  • 插入文档
  • 更新文档
  • 删除文档
  • 查询文档

每个操作都有详细的使用说明和代码示例。

索引管理

jsonDB 支持创建单字段索引和复合索引,以加速查询操作。

查询操作

jsonDB 提供了多种查询方式:

  1. 基本查询:使用 Query 方法进行单字段精确匹配查询。
  2. 复合查询:使用 QueryComposite 方法进行多字段组合查询。
  3. 范围查询:使用 RangeQuery 方法进行范围查询,支持数值和时间类型。
  4. 模糊查询:使用 FuzzyQuery 方法进行模糊匹配,支持通配符 *

模糊查询示例

// 查询名字以"John"开头的所有文档
results := db.FuzzyQuery("name", "John*")

// 查询邮箱包含"example"的所有文档
results := db.FuzzyQuery("email", "*example*")

范围查询示例

// 查询年龄在25到30之间的文档
results := db.RangeQuery("age", 25, 30)

// 查询特定日期范围内的文档
startDate := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
endDate := time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)
results := db.RangeQuery("date", startDate, endDate)

并发控制

jsonDB 使用多种机制确保并发安全,包括使用 sync.Map、读写锁、原子操作等。

持久化和恢复

数据持久化通过数据文件和 WAL (Write-Ahead Log) 实现,确保数据的一致性和可恢复性。

日志系统

jsonDB 提供了可配置的日志系统,支持不同的日志级别和自定义输出。

性能优化

jsonDB 采用了多种性能优化策略,包括使用 MessagePack 进行序列化、实现索引加速查询、使用工作池控制并发等。

使用示例

test.go提供了一个完整的使用示例,展示了如何创建数据库、插入文档、查询数据等操作。

注意事项和限制

  1. jsonDB 主要设计用于嵌入式应用和中小型数据集。
  2. 所有数据都存储在内存中,因此数据库大小受到可用内存的限制。
  3. 不支持复杂的查询操作,如范围查询或全文搜索。
  4. 不支持事务操作。
  5. 恢复大型数据库可能需要较长时间。

未来改进方向

  1. 实现更复杂的查询功能。
  2. 添加事务支持。
  3. 实现数据压缩以减少磁盘使用。
  4. 支持分布式部署和数据分片。
  5. 添加数据备份和恢复功能。
  6. 实现更高效的索引结构,如B树或LSM树。
  7. 提供HTTP API接口,便于其他语言调用。