第 1 章:概述与快速开始
1.1 sfsDb 简介
sfsDb 是一款专为工业物联网(IIoT)和边缘计算场景设计的纯 Go 语言嵌入式数据库。它基于 LevelDB 构建,提供了无锁事务系统、高效索引管理、时序数据处理和加密存储等功能。
核心特性
- 纯 Go 实现:无需 CGO,跨平台编译简单
- 创新性地将 NoSQL 的高并发写入能力与 SQL 的复杂查询能力融合在一个系统中
- 无锁事务:基于 OCC(乐观并发控制)的高性能事务系统
- 多种索引:支持主键、普通索引、复合索引和全文索引
- 时序数据优化:内置时间窗口计算和数据聚合功能
- 加密存储:支持 AES-256-GCM 加密
- 嵌入式设计:无需独立服务器进程
1.2 环境搭建
安装 sfsDb
bash
go get github.com/liaoran123/sfsDb
依赖要求
- Go 1.25+
- github.com/syndtr/goleveldb v1.0.0
1.3 完整的可运行示例
让我们通过一个完整的示例来演示 sfsDb 的基本使用:
go
package main
import (
"fmt"
"os"
"github.com/liaoran123/sfsDb/engine"
"github.com/liaoran123/sfsDb/storage"
)
func main() {
fmt.Println("=== sfsDb 数据库实战 - 第 1 章:Hello World 示例 ===")
fmt.Println()
dbPath := "./bible_examples_chapter01_db"
cleanup(dbPath)
fmt.Println("1. 初始化数据库")
_, err := storage.GetDBManager().OpenDB(dbPath)
if err != nil {
fmt.Printf("数据库打开失败: %v\n", err)
return
}
defer storage.GetDBManager().CloseDB()
fmt.Println(" ✓ 数据库打开成功")
fmt.Println()
fmt.Println("2. 创建用户表")
userTable, err := engine.TableNew("users")
if err != nil {
fmt.Printf("创建表失败: %v\n", err)
return
}
fmt.Println(" ✓ 表创建成功")
fmt.Println()
fmt.Println("3. 设置字段")
userFields := map[string]any{
"id": 0, // 用户ID
"name": "", // 用户名
"age": 0, // 年龄
"email": "", // 邮箱
"address": "", // 地址
}
err = userTable.SetFields(userFields)
if err != nil {
fmt.Printf("设置字段失败: %v\n", err)
return
}
fmt.Println(" ✓ 字段设置成功")
fmt.Println()
fmt.Println("4. 创建主键索引")
primaryKey, err := engine.DefaultPrimaryKeyNew("pk_id")
if err != nil {
fmt.Printf("创建主键索引失败: %v\n", err)
return
}
primaryKey.AddFields("id")
err = userTable.CreateIndex(primaryKey)
if err != nil {
fmt.Printf("创建索引失败: %v\n", err)
return
}
fmt.Println(" ✓ 主键索引创建成功")
fmt.Println()
fmt.Println("5. 插入测试数据")
testUser := map[string]any{
"id": 1,
"name": "张三",
"age": 28,
"email": "zhangsan@example.com",
"address": "北京市朝阳区",
}
_, err = userTable.Insert(&testUser)
if err != nil {
fmt.Printf("插入数据失败: %v\n", err)
return
}
fmt.Println(" ✓ 测试数据插入成功")
fmt.Println()
fmt.Println("6. 查询测试数据")
searchFields := map[string]any{"id": 1}
dataIter, _ := userTable.Search(&searchFields)
defer dataIter.Release()
records := dataIter.GetRecords(true)
defer records.Release()
if len(records) > 0 {
fmt.Println(" ✓ 查询成功!")
fmt.Printf(" 用户信息: %+v\n", records[0])
} else {
fmt.Println(" ✗ 查询失败,未找到记录")
}
fmt.Println()
fmt.Println("=== 恭喜!sfsDb 入门成功! ===")
fmt.Println()
fmt.Println("接下来,请继续阅读第 2 章,了解 sfsDb 的核心概念与架构。")
}
func cleanup(path string) {
os.RemoveAll(path)
}
这段代码展示了 sfsDb 的完整使用流程:
- 初始化数据库 :通过
storage.GetDBManager().OpenDB()打开数据库 - 创建表 :使用
engine.TableNew()创建表 - 设置字段 :通过
SetFields()定义表结构 - 创建索引 :使用
CreateIndex()创建主键索引 - 插入数据 :使用
Insert()插入测试数据 - 查询数据 :使用
Search()查询并验证结果
1.4 小结
本章我们了解了 sfsDb 的基本概念和特性,并通过项目中的实际代码完成了第一个示例。在下一章中,我们将深入了解 sfsDb 的核心架构和设计思想。
本书版本 :1.0.0
最后更新 :2026-03-11
sfsDb - 以工业物联网边缘计算为核心场景的高性能嵌入式数据库!🚀
技术栈 - Go、leveldb。纯golang实现。
项目地址 :GitHub
GitCode 镜像 :GitCode