Documentation
¶
Overview ¶
Package lily 数据库
存储结构 {dataDir}/data/{dataName}/{formName}/{formName}.dat/idx...
{dataDir}/ Lily 服务工作目录
{dataDir}/data/ Lily 服务数据目录,目录下为已创建数据库目录集合
{dataDir}/data/{dataName}.../ 数据库目录,目录下为已创建表目录集合
{dataDir}/data/{dataName}.../{formName}.../ 表目录,目录下为表头部Hash数组对应数据目录集合以及索引目录集合
{dataDir}/data/{dataName}.../{formName}.../{index}.../ 表头部Hash数组对应索引数据文件集合
{dataDir}/data/{dataName}.../{formName}.../[0, 1, ... , 15]/ 表头部Hash数组对应数据文件集合
索引格式:5位key + 16位md5后key + 5位起始seek + 4位持续seek
索引起始seek最大值为1073741824,即每一个索引文件最大1G,新增一条索引超过1G则新开新的索引文件
索引持续seek最大值为16777216,即每一条存储value对象允许最大存储16777216个字节
Index ¶
- Constants
- Variables
- func CreateDatabase(serverURL, name, comment string) error
- func CreateDoc(serverURL, dbName, name, comment string) error
- func CreateTable(serverURL, dbName, name, comment string) error
- func Delete(serverURL, databaseName, formName string, selector *api.Selector) (*api.Resp, error)
- func Execute()
- func FormatFormType(ft api.FormType) string
- func FormatFormType2API(ft string) api.FormType
- func Get(serverURL, databaseName, formName, key string) (*api.RespGet, error)
- func GetD(serverURL, key string) (*api.RespGetD, error)
- func ObtainDatabases(serverURL string) (*api.RespDatabases, error)
- func ObtainForms(serverURL, dbName string) (*api.RespForms, error)
- func Put(serverURL, databaseName, formName, key, value string) (*api.RespPut, error)
- func PutD(serverURL, key, value string) (*api.RespPutD, error)
- func Remove(serverURL, databaseName, formName, key string) (*api.Resp, error)
- func Select(serverURL, databaseName, formName string, selector *api.Selector) (*api.RespSelect, error)
- func ServerStart(conf *Conf)
- func Set(serverURL, databaseName, formName, key, value string) (*api.RespSet, error)
- func SetD(serverURL, key, value string) (*api.RespSetD, error)
- type API
- type APIServer
- func (l *APIServer) CreateDatabase(ctx context.Context, req *api.ReqCreateDatabase) (*api.RespDatabase, error)
- func (l *APIServer) CreateForm(ctx context.Context, req *api.ReqCreateForm) (*api.Resp, error)
- func (l *APIServer) CreateIndex(ctx context.Context, req *api.ReqCreateIndex) (*api.Resp, error)
- func (l *APIServer) CreateKey(ctx context.Context, req *api.ReqCreateKey) (*api.Resp, error)
- func (l *APIServer) Delete(ctx context.Context, req *api.ReqDelete) (*api.RespDelete, error)
- func (l *APIServer) Get(ctx context.Context, req *api.ReqGet) (*api.RespGet, error)
- func (l *APIServer) GetConf(ctx context.Context, req *api.ReqConf) (*api.RespConf, error)
- func (l *APIServer) GetD(ctx context.Context, req *api.ReqGetD) (*api.RespGetD, error)
- func (l *APIServer) ObtainDatabases(ctx context.Context, req *api.ReqDatabases) (*api.RespDatabases, error)
- func (l *APIServer) ObtainForms(ctx context.Context, req *api.ReqForms) (*api.RespForms, error)
- func (l *APIServer) Put(ctx context.Context, req *api.ReqPut) (*api.RespPut, error)
- func (l *APIServer) PutD(ctx context.Context, req *api.ReqPutD) (*api.RespPutD, error)
- func (l *APIServer) Remove(ctx context.Context, req *api.ReqRemove) (*api.Resp, error)
- func (l *APIServer) Select(ctx context.Context, req *api.ReqSelect) (*api.RespSelect, error)
- func (l *APIServer) Set(ctx context.Context, req *api.ReqSet) (*api.RespSet, error)
- func (l *APIServer) SetD(ctx context.Context, req *api.ReqSetD) (*api.RespSetD, error)
- type Conf
- type DTODatabase
- type DTOForm
- type Database
- type Form
- type Index
- type IndexBack
- type Leaf
- type Lily
- func (l *Lily) CreateDatabase(name, comment string) (Database, error)
- func (l *Lily) CreateForm(databaseName, formName, comment, formType string) error
- func (l *Lily) CreateIndex(databaseName, formName string, keyStructure string) error
- func (l *Lily) CreateKey(databaseName, formName string, keyStructure string) error
- func (l *Lily) Delete(databaseName, formName string, selector *Selector) (int32, error)
- func (l *Lily) Get(databaseName, formName, key string) (interface{}, error)
- func (l *Lily) GetD(key string) (interface{}, error)
- func (l *Lily) GetDatabase(name string) Database
- func (l *Lily) GetDatabases() []Database
- func (l *Lily) Put(databaseName, formName, key string, value interface{}) (uint64, error)
- func (l *Lily) PutD(key string, value interface{}) (uint64, error)
- func (l *Lily) Remove(databaseName, formName, key string) error
- func (l *Lily) Restart()
- func (l *Lily) Select(databaseName, formName string, selector *Selector) (int32, interface{}, error)
- func (l *Lily) Set(databaseName, formName, key string, value interface{}) (uint64, error)
- func (l *Lily) SetD(key string, value interface{}) (uint64, error)
- func (l *Lily) Start()
- func (l *Lily) Stop()
- type Link
- type Nodal
- type Selector
- type WriteLocker
- type YamlConf
Constants ¶
const ( // FormTypeSQL 关系型数据存储方式 FormTypeSQL = "FORM_TYPE_SQL" // FormTypeDoc 文档型数据存储方式 FormTypeDoc = "FORM_TYPE_DOC" )
Variables ¶
var ( // ErrDatabaseExist 自定义error信息 ErrDatabaseExist = errors.New("database already exist") // ErrFormExist 自定义error信息 ErrFormExist = errors.New("form already exist") // ErrKeyExist 自定义error信息 ErrKeyExist = errors.New("key already exist") // ErrIndexExist 自定义error信息 ErrIndexExist = errors.New("index already exist") // ErrDataIsNil 自定义error信息 ErrDataIsNil = errors.New("database had never been created") // ErrKeyIsNil 自定义error信息 ErrKeyIsNil = errors.New("put keyStructure can not be nil") )
var ( // ErrValueType value type error ErrValueType = errors.New("value type error") // ErrValueInvalid value is invalid ErrValueInvalid = errors.New("value is invalid") )
var (
// Version 版本号
Version = "1.0"
)
Functions ¶
func CreateDatabase ¶
CreateDatabase 创建数据库
func FormatFormType2API ¶
FormatFormType2API 通过数据库表类型获取api表类型
func ObtainDatabases ¶
func ObtainDatabases(serverURL string) (*api.RespDatabases, error)
ObtainDatabases 获取数据库集合
func ObtainForms ¶
ObtainForms 获取数据库表集合
func Select ¶
func Select(serverURL, databaseName, formName string, selector *api.Selector) (*api.RespSelect, error)
Select 获取数据
Types ¶
type API ¶
type API interface { // Start 启动lily Start() // Restart 重新启动lily Restart() // Stop 停止lily Stop() // GetDatabase 获取指定名称数据库 GetDatabase(name string) Database // GetDatabases 获取数据库集合 GetDatabases() []Database // CreateDatabase 新建数据库 // // 新建数据库会同时创建一个名为_default的表,未指定表明的情况下使用put/get等方法会操作该表 // // name 数据库名称 CreateDatabase(name, comment string) (Database, error) // CreateForm 创建表 // // databaseName 数据库名 // // 默认自增ID索引 // // name 表名称 // // comment 表描述 CreateForm(databaseName, formName, comment, formType string) error // CreateKey 新建主键 // // databaseName 数据库名 // // name 表名称 // // keyStructure 主键结构名,按照规范结构组成的主键字段名称,由对象结构层级字段通过'.'组成,如'i','in.s' CreateKey(databaseName, formName string, keyStructure string) error // createIndex 新建索引 // // databaseName 数据库名 // // name 表名称 // // keyStructure 索引结构名,按照规范结构组成的索引字段名称,由对象结构层级字段通过'.'组成,如'i','in.s' CreateIndex(databaseName, formName string, keyStructure string) error // PutD 新增数据 // // 向_default表中新增一条数据,key相同则返回一个Error // // keyStructure 插入数据唯一key // // value 插入数据对象 // // 返回 hashKey PutD(key string, value interface{}) (uint64, error) // SetD 设置数据,如果存在将被覆盖,如果不存在,则新建 // // 向_default表中新增或更新一条数据,key相同则覆盖 // // keyStructure 插入数据唯一key // // value 插入数据对象 // // 返回 hashKey SetD(key string, value interface{}) (uint64, error) // GetD 获取数据 // // 向_default表中查询一条数据并返回 // // keyStructure 插入数据唯一key GetD(key string) (interface{}, error) // Put 新增数据 // // 向指定表中新增一条数据,key相同则返回一个Error // // databaseName 数据库名 // // formName 表名 // // keyStructure 插入数据唯一key // // value 插入数据对象 // // 返回 hashKey Put(databaseName, formName, key string, value interface{}) (uint64, error) // Set 设置数据,如果存在将被覆盖,如果不存在,则新建 // // 向指定表中新增或更新一条数据,key相同则覆盖 // // databaseName 数据库名 // // formName 表名 // // keyStructure 插入数据唯一key // // value 插入数据对象 // // 返回 hashKey Set(databaseName, formName, key string, value interface{}) (uint64, error) // Get 获取数据 // // 向指定表中查询一条数据并返回 // // databaseName 数据库名 // // formName 表名 // // keyStructure 插入数据唯一key Get(databaseName, formName, key string) (interface{}, error) // Remove 删除数据 // // 向指定表中删除一条数据并返回 Remove(databaseName, formName, key string) error // Select 获取数据 // // 向指定表中查询一条数据并返回 // // databaseName 数据库名 // // formName 表名 // // selector 条件选择器 // // int 返回检索条目数量 Select(databaseName, formName string, selector *Selector) (int32, interface{}, error) // Delete 删除数据 // // 向指定表中删除一条数据并返回 // // databaseName 数据库名 // // formName 表名 // // selector 条件选择器 // // int 返回检索条目数量 Delete(databaseName, formName string, selector *Selector) (int32, error) }
API 暴露公共API接口
提供通用 k-v 方法,无需创建新的数据库和表等对象
在创建 Lily 服务的时候,会默认创建‘sysDatabase’库,同时在该库中创建‘defaultForm’表
该接口的数据默认在上表中进行操作
type APIServer ¶
type APIServer struct {
Conf *Conf
}
APIServer APIServer
func (*APIServer) CreateDatabase ¶
func (l *APIServer) CreateDatabase(ctx context.Context, req *api.ReqCreateDatabase) (*api.RespDatabase, error)
CreateDatabase 新建数据库
func (*APIServer) CreateForm ¶
CreateForm 创建表
func (*APIServer) CreateIndex ¶
CreateIndex 新建索引
func (*APIServer) ObtainDatabases ¶
func (l *APIServer) ObtainDatabases(ctx context.Context, req *api.ReqDatabases) (*api.RespDatabases, error)
ObtainDatabases 获取数据库集合
func (*APIServer) ObtainForms ¶
ObtainForms 获取数据库表集合
type Conf ¶
type Conf struct { Port string `yaml:"Port"` // Port 开放端口,便于其它应用访问 RootDir string `yaml:"RootDir"` // RootDir Lily服务默认存储路径 DataDir string `yaml:"DataDir"` // DataDir Lily服务数据默认存储路径 LimitOpenFile int32 `yaml:"LimitOpenFile"` // LimitOpenFile 限制打开文件描述符次数 TLS bool `yaml:"TLS"` // TLS 是否开启 TLS TLSServerKeyFile string `yaml:"TLSServerKeyFile"` // TLSServerKeyFile lily服务私钥 TLSServerCertFile string `yaml:"TLSServerCertFile"` // TLSServerCertFile lily服务数字证书 Limit bool `yaml:"Limit"` // Limit 是否启用服务限流策略 LimitMillisecond int32 `yaml:"LimitMillisecond"` // LimitMillisecond 请求限定的时间段(毫秒) LimitCount int32 `yaml:"LimitCount"` // LimitCount 请求限定的时间段内允许的请求次数 LimitIntervalMicrosecond int32 `yaml:"LimitIntervalMicrosecond"` // LimitIntervalMillisecond 请求允许的最小间隔时间(微秒),0表示不限 LogDir string `yaml:"LogDir"` // LogDir Lily服务默认日志存储路径 LogLevel string `yaml:"LogLevel"` // LogLevel 日志级别(debug/info/warn/Error/panic/fatal) LogFileMaxSize int `yaml:"LogFileMaxSize"` // LogFileMaxSize 每个日志文件保存的最大尺寸 单位:M LogFileMaxAge int `yaml:"LogFileMaxAge"` // LogFileMaxAge 文件最多保存多少天 LogUtc bool `yaml:"LogUtc"` // LogUtc CST & UTC 时间 Production bool `yaml:"Production"` // Production 是否生产环境,在生产环境下控制台不会输出任何日志 LilyLockFilePath string `yaml:"lily_lock_file_path"` // LilyLockFilePath Lily当前进程地址存储文件地址 LilyBootstrapFilePath string `yaml:"lily_bootstrap_file_path"` // LilyBootstrapFilePath Lily重启引导文件地址 }
Conf lily启动配置文件子项目
type DTODatabase ¶
DTODatabase 数据库对象
type DTOForm ¶
type DTOForm struct { Name string // Name 数据库名称,根据需求可以随时变化 Comment string // Comment 描述 Type string // Type 类型 }
DTOForm 数据库表对象
type Database ¶
type Database interface {
// contains filtered or unexported methods
}
Database 数据库接口
提供数据库基本操作方法
type Form ¶
type Form interface { WriteLocker // WriteLocker 读写锁接口 // contains filtered or unexported methods }
Form 表接口
提供表基本操作方法
type Index ¶
type Index interface { WriteLocker // WriteLocker 读写锁接口 // contains filtered or unexported methods }
Index 索引接口
type IndexBack ¶
type IndexBack interface {
// contains filtered or unexported methods
}
IndexBack 索引检索回调结果接口
type Lily ¶
type Lily struct {
// contains filtered or unexported fields
}
Lily 祖宗!
全库唯一常住内存对象,并持有所有库的句柄
API 入口 ¶
存储格式 {dataDir}/Data/{dataName}/{formName}/{formName}.dat/idx...
func ObtainLily ¶
func ObtainLily() *Lily
ObtainLily 获取 Lily 对象
会初始化一个空 Lily,如果是第一次调用的话
首次调用后需要执行 initialize() 初始化方法
或者通过外部调用 Start() 来执行初始化操作
调用 Restart() 会恢复 Lily 的索引,如果 Lily 索引存在,则 Restart() 什么也不会做
会返回一个已创建的 Lily,如果非第一次调用的话
func (*Lily) CreateDatabase ¶
CreateDatabase 新建数据库
新建数据库会同时创建一个名为_default的表,未指定表明的情况下使用put/get等方法会操作该表
name 数据库名称
comment 数据库描述
func (*Lily) CreateIndex ¶
CreateIndex 新建索引
databaseName 数据库名
name 表名称
keyStructure 索引结构名,按照规范结构组成的索引字段名称,由对象结构层级字段通过'.'组成,如'i','in.s'
func (*Lily) CreateKey ¶
CreateKey 新建主键
databaseName 数据库名
name 表名称
keyStructure 主键结构名,按照规范结构组成的主键字段名称,由对象结构层级字段通过'.'组成,如'i','in.s'
func (*Lily) Put ¶
Put 新增数据
向指定表中新增一条数据,key相同则返回一个Error
databaseName 数据库名
formName 表名
keyStructure 插入数据唯一key
value 插入数据对象
返回 hashKey
func (*Lily) PutD ¶
PutD 新增数据
向_default表中新增一条数据,key相同则返回一个Error
keyStructure 插入数据唯一key
value 插入数据对象
返回 hashKey
func (*Lily) Restart ¶
func (l *Lily) Restart()
Restart 重新启动lily
调用 Restart() 会恢复 Lily 的索引,如果 Lily 索引存在,则 Restart() 什么也不会做
func (*Lily) Select ¶
func (l *Lily) Select(databaseName, formName string, selector *Selector) (int32, interface{}, error)
Select 获取数据
向指定表中查询一条数据并返回
formName 表名
keyStructure 插入数据唯一key
func (*Lily) Set ¶
Set 新增数据
向指定表中新增一条数据,key相同则覆盖
databaseName 数据库名
formName 表名
keyStructure 插入数据唯一key
value 插入数据对象
返回 hashKey
type Link ¶
type Link interface { WriteLocker // WriteLocker 读写锁接口 // contains filtered or unexported methods }
Link 叶子节点下的链表对象接口
type Nodal ¶
type Nodal interface { WriteLocker // WriteLocker 读写锁接口 // contains filtered or unexported methods }
Nodal 节点对象接口
type Selector ¶
type Selector struct { Conditions []*condition `json:"conditions"` // Conditions 条件查询 Skip uint32 `json:"skip"` // Skip 结果集跳过数量 Sort *sort `json:"sort"` // Sort 排序方式 Limit uint32 `json:"limit"` // Limit 结果集顺序数量 // contains filtered or unexported fields }
Selector 检索选择器
查询顺序 scope -> match -> conditions -> skip -> sort -> limit
type WriteLocker ¶
type WriteLocker interface {
// contains filtered or unexported methods
}
WriteLocker 读写锁接口
Source Files
¶
Directories
¶
Path | Synopsis |
---|---|
Package bus 数据库全局管理器,包括数据库全局配置策略、接入安全认证、用户权限管理、数据备份、数据恢复、数据迁移以及数据库集群化部署策略等。
|
Package bus 数据库全局管理器,包括数据库全局配置策略、接入安全认证、用户权限管理、数据备份、数据恢复、数据迁移以及数据库集群化部署策略等。 |
Package cache 共享在内存中的完全一样的查询语句和对应的执行选择器。
|
Package cache 共享在内存中的完全一样的查询语句和对应的执行选择器。 |
Package connector 数据存储引擎标准化接口,对外提供服务的统一接口,是所有已实现或待实现存储引擎都遵从的接口策略。
|
Package connector 数据存储引擎标准化接口,对外提供服务的统一接口,是所有已实现或待实现存储引擎都遵从的接口策略。 |
Package engine 存储引擎
|
Package engine 存储引擎 |
class
Package class 数据库存储模型,如B+Tree等。
|
Package class 数据库存储模型,如B+Tree等。 |
index
Package index 数据库索引服务
|
Package index 数据库索引服务 |
storage
Package storage 数据真实存储操作
|
Package storage 数据真实存储操作 |
Package parse 解析SQL语法,将待执行的SQL语句解析成数据存储引擎可操作的执行选择器,并为该执行选择器分配一个ID。
|
Package parse 解析SQL语法,将待执行的SQL语句解析成数据存储引擎可操作的执行选择器,并为该执行选择器分配一个ID。 |
Package pool 负责监听对客户端的各种请求,接收请求,转发请求到目标模块。
|
Package pool 负责监听对客户端的各种请求,接收请求,转发请求到目标模块。 |