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

相关推荐
电子科技圈2 小时前
赋能高端音频功能促进多样化设备创新——XMOS USB Audio平台实现四大功能升级
人工智能·mcu·音视频·智能家居·边缘计算·语音识别·智能硬件
2301_822703202 小时前
开源鸿蒙跨平台Flutter开发:跨端图形渲染引擎的类型边界与命名空间陷阱:以多维雷达图绘制中的 dart:ui 及 StrokeJoin 异常为例
算法·flutter·ui·开源·图形渲染·harmonyos·鸿蒙
2301_822703203 小时前
鸿蒙flutter框架Error: 00625004 SymLink Dir Failed解决方案
flutter·华为·开源·harmonyos·鸿蒙
LlNingyu3 小时前
什么是Go的接口(二)
golang
世人万千丶3 小时前
Flutter 框架跨平台鸿蒙开发 - 嫉妒分析器应用
学习·flutter·华为·开源·harmonyos·鸿蒙
不会写DN3 小时前
如何设计应用层 ACK 来补充 TCP 的不足?
开发语言·网络·数据库·网络协议·tcp/ip·golang
CC180253944863 小时前
智能家居与IoT设备如何选择无线模块?ESP32-C5 两大模块详解
物联网·智能家居
行走的小派4 小时前
本地跑模型+原生开源鸿蒙:拆解香橙派AI手机的12TOPS端侧硬核玩法
人工智能·开源·harmonyos
不会写DN4 小时前
如何给 Go 语言的 TCP 聊天服务加上 ACK 可靠送达机制
开发语言·tcp/ip·golang