01-第1章-概述与快速开始

第 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

依赖要求


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 的完整使用流程:

  1. 初始化数据库 :通过 storage.GetDBManager().OpenDB() 打开数据库
  2. 创建表 :使用 engine.TableNew() 创建表
  3. 设置字段 :通过 SetFields() 定义表结构
  4. 创建索引 :使用 CreateIndex() 创建主键索引
  5. 插入数据 :使用 Insert() 插入测试数据
  6. 查询数据 :使用 Search() 查询并验证结果

1.4 小结

本章我们了解了 sfsDb 的基本概念和特性,并通过项目中的实际代码完成了第一个示例。在下一章中,我们将深入了解 sfsDb 的核心架构和设计思想。


本书版本 :1.0.0
最后更新 :2026-03-11
sfsDb - 以工业物联网边缘计算为核心场景的高性能嵌入式数据库!🚀
技术栈 - Go、leveldb。纯golang实现。
项目地址GitHub
GitCode 镜像GitCode

相关推荐
stormzhangV2 小时前
AI 视频迎来了奇点时刻
开源·ai编程
ovO4 小时前
DeepSeek Harness 源码解读(五):工具明明并发执行,结果为什么还按顺序写入
开源·agent·deepseek
dong_junshuai4 小时前
每天一个开源项目#86 ECC:245K星的 Agent 工程操作层
开源·github·agent
狂师5 小时前
阿里开源:skill-up,一款Agent Skill 评测工具!
人工智能·开源·agent
老孙讲技术5 小时前
把工地遮挡和掉线接进项目部:setMessageCallback 订 alarm 与 deviceStatus
后端·物联网·音视频开发
老孙讲技术5 小时前
关店后有人进门,监控值班群却没响:用 setMessageCallback 订 human,再用 aiHuman 打开人形
后端·物联网·音视频开发
老孙讲技术5 小时前
把园区几百路摄像头收进值班台账:bindDevice 入账与 listDeviceDetailsByPage 翻页
后端·物联网·音视频开发
老孙讲技术5 小时前
把没网没电的户外点位接进出画值班台:unBindDeviceInfo 核 SIMCard 与 bindDeviceLive
后端·物联网·音视频开发
Erishen9 小时前
🚀 用 React Three Fiber 造一个会说话的 3D 数字人:从密钥安全到 Serverless 10 秒极限的踩坑全记录
架构·开源·agent
苏灿烤鱼14 小时前
当 AI Agent 遇见真实科学环境:深度拆解 Scientific Agent Skills,把"聊天机器人"变成"AI 科学家"
python·开源·agent