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

相关推荐
tachibana238 分钟前
使用for range 的时候,它的地址会发生变化吗?
开发语言·后端·golang·go·语法
王中阳Go1 小时前
Go 后端转 AI:非科班怎么补?一张 3 列路线表(可保存)
开发语言·人工智能·后端·python·golang·大语言模型
李永奉3 小时前
日常使用的锂电池上,新、旧锂电池的差异分析
单片机·嵌入式硬件·物联网·智能手机·电脑
程序员老赵4 小时前
Docker 部署 Portainer CE:轻松搭建容器管理平台
docker·容器·开源
TTATTC4 小时前
Gmail、Drive、日历共用一套命令:gws 如何在运行时把 Discovery 文档编译成 CLI
docker·开源
feasibility.5 小时前
“美版DeepSeek”等海外开放模型,能夺回生态入口吗?——中国开放权重领先下的2026全球AI分水岭
人工智能·开源·大模型·llm·minimax·deepseek·beam
缘友一世6 小时前
开源 Linux截图工具闪构(SnapForge)
linux·运维·ubuntu·开源·截图
iCxhust6 小时前
先想好如何测试:让测试驱动你的程序设计
运维·服务器·软件工程·编程的艺术
对讲机数码科普7 小时前
从电路原理到协议栈:模拟对讲机与数字对讲机的技术内核拆解
运维·网络·架构·软件工程
for_ever_love__8 小时前
LangChain Agentic RAG:让 Agent 自己决定要不要检索、检索几次
人工智能·golang·langchain·rag·langgraph·agentic·自适应检索