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

相关推荐
冬奇Lab4 小时前
每日一个开源项目(第148篇):obsidian-skills - Obsidian CEO 亲写的 AI Agent 格式规范,让 Agent 不再破坏你的 Vault
人工智能·开源·资讯
apocelipes6 小时前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
程序员老赵10 小时前
Docker 部署 Redmine:老牌开源项目管理部署实测记录
docker·开源·团队管理
colir011 小时前
被粉丝夸爆的超级 ai 个人工作站,原来这么多福利
开源·agent·claude
程序员老赵12 小时前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
饼干哥哥12 小时前
我把GPT-image-2生成PSD的能力打包成了Skill,免费开源
gpt·开源·ai编程
老梁agent16 小时前
企业生产级 AI Agent 系统设计:能力、架构与演进路径
物联网·agent
inhere16 小时前
eget:不用等中央仓库,直接安装 GitHub 和任意下载站的工具
程序员·开源·github
redreamSo17 小时前
团队 AI 资产总烂在本地?先分清哪些该装、哪些只能连
人工智能·架构·开源
老梁agent17 小时前
当 Agent 要动手了:工业实时控制的三层安全护栏设计
物联网·agent