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文档数据库
目录
简介
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
: 处理数据持久化和 WALutils.go
: 包含常量和工具函数logger.go
: 实现可配置的日志系统trie.go
: 实现支持模糊查询的 Trie 结构
核心组件
主要的结构体包括 Database
、Document
、Index
和 CompositeIndex
。这些组件共同构成了 jsonDB 的核心架构。
基本操作
jsonDB 支持以下基本操作:
- 创建数据库
- 插入文档
- 更新文档
- 删除文档
- 查询文档
每个操作都有详细的使用说明和代码示例。
索引管理
jsonDB 支持创建单字段索引和复合索引,以加速查询操作。
查询操作
jsonDB 提供了多种查询方式:
- 基本查询:使用
Query
方法进行单字段精确匹配查询。 - 复合查询:使用
QueryComposite
方法进行多字段组合查询。 - 范围查询:使用
RangeQuery
方法进行范围查询,支持数值和时间类型。 - 模糊查询:使用
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提供了一个完整的使用示例,展示了如何创建数据库、插入文档、查询数据等操作。
注意事项和限制
- jsonDB 主要设计用于嵌入式应用和中小型数据集。
- 所有数据都存储在内存中,因此数据库大小受到可用内存的限制。
- 不支持复杂的查询操作,如范围查询或全文搜索。
- 不支持事务操作。
- 恢复大型数据库可能需要较长时间。
未来改进方向
- 实现更复杂的查询功能。
- 添加事务支持。
- 实现数据压缩以减少磁盘使用。
- 支持分布式部署和数据分片。
- 添加数据备份和恢复功能。
- 实现更高效的索引结构,如B树或LSM树。
- 提供HTTP API接口,便于其他语言调用。