第 1 章:概述与快速开始


1.1 sfsDb 简介

sfsDb 是一款专为工业物联网(IIoT)和边缘计算场景设计的纯 Go 语言嵌入式数据库。它基于 LevelDB 构建,提供了无锁事务系统、高效索引管理、时序数据处理和加密存储等功能。

核心特性

  • 纯 Go 实现:无需 CGO,跨平台编译简单
  • 创新性地将 NoSQL 的高并发写入能力与 SQL 的复杂查询能力融合在一个系统中
  • 无锁事务:基于 OCC(乐观并发控制)的高性能事务系统
  • 多种索引:支持主键、普通索引、复合索引和全文索引
  • 时序数据优化:内置时间窗口计算和数据聚合功能
  • 加密存储:支持 AES-256-GCM 加密
  • 嵌入式设计:无需独立服务器进程

1.2 环境搭建

安装 sfsDb

go get github.com/liaoran123/sfsDb

依赖要求

  • Go 1.25+
  • github.com/syndtr/goleveldb v1.0.0

1.3 完整的可运行示例

让我们通过一个完整的示例来演示 sfsDb 的基本使用:

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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐