全局自定义表格
概述
Global Custom Table(全局自定义表格)是 Edge Admin 提供的强大功能,允许管理员创建和管理自定义数据表,用于存储和组织特定的业务数据。该功能提供了灵活的数据结构定义和管理能力,支持多种数据类型和查询方式。
注意
此功能下发的数据会占用 Edge Node 中 LMDB 数据库的空间,该空间默认大小为 8GB,所有配置共用,因此不建议存储大量数据。建议合理规划数据量,避免影响系统性能。创建全局自定义表格
步骤 1:访问管理界面
- 登录 Edge Admin 管理后台
- 导航至 全局配置 > 全局自定义表格
- 点击 新建自定义表格 按钮
步骤 2:配置表格基本信息
基本配置
- 表名称:输入表的名称(仅支持英文字母、数字和下划线,用于系统内部标识)
- 描述:添加表的用途描述,便于后续管理和维护
- 是否发送事件:当变更表格数据时,是否发送对应的事件通知到相关系统,通常需与 Edge Admin 的 Lua 插件配合使用。
数据字段配置
数据字段是存储业务数据的核心结构,每个字段包含以下属性:
属性 | 说明 | 备注 |
---|---|---|
字段名称 | 数据字段的名称 | 仅支持英文字母、数字和下划线 |
字段类型 | 数据字段的类型 | 详见下方支持的字段类型 |
字段描述 | 字段的用途描述 | 可选,便于理解字段含义 |
缺省值 | 字段的默认值 | 新增数据时的默认填充值 |
查询键 | 用于查询该行数据的主键 | |
不为 NULL | 是否允许字段值为空 | 必填字段请勾选此选项 |
同步 | 是否需要同步到边缘节点 | 影响数据在 Edge Node 的可用性 |
唯一 | 字段值是否必须唯一 | 用于确保数据完整性 |
支持的字段类型
类型 | 说明 | 使用场景 |
---|---|---|
文本 | 字符串类型 | 用户名、标题、描述等 |
数字 | 数值类型 | 年龄、计数、价格等 |
布尔值 | 真/假值 | 开关状态、是否启用等 |
IP 地址 | IPv4/IPv6 地址 | 网络配置、访问控制等 |
域名 | 域名格式 | 网站地址、服务端点等 |
数组 | 字符串数组 | 标签列表、分类等 |
IP 地址数组 | IP 地址列表 | 白名单、黑名单等 |
域名数组 | 域名列表 | 多域名配置等 |
使用示例
以下通过一个完整的用户信息管理示例,演示全局自定义表格的使用方法。
1. 创建用户信息表格
创建一个名为 example_users
的用户信息表,包含以下字段:
username
:用户名(文本类型,查询键,唯一)age
:年龄(数字类型)enable
:是否启用(布尔值类型)ip
:IP 地址(IP 地址类型)domain
:域名(域名类型)array
:标签数组(数组类型)ip_array
:IP 地址列表(IP 地址数组类型)domain_array
:域名列表(域名数组类型)
2. 添加测试数据
添加一条测试用户数据:
- 用户名:
oredge
- 年龄:
10
- 启用状态:
true
- IP 地址:
1.2.3.4
- 域名:
openresty.com
- 标签:
["openresty", "edge"]
- IP 列表:
["1.2.3.4", "2.3.4.5"]
- 域名列表:
["openresty.com", "doc.openresty.com"]
3. 创建 Lua 查询模块
创建一个名为 check_user
的 Lua 模块,用于查询用户信息:
local ct = require("custom_table")
local cjson_encode = require("cjson.safe").encode
local get_uri_args = ngx.req.get_uri_args
local ngx_say = ngx.say
local _M = {}
function _M.go()
-- 获取 URI 参数中的用户名
local uri_args = get_uri_args()
local username = uri_args.username
if not username then
ngx_say("Error: username parameter is required")
return
end
-- 查询用户信息
local res, err = ct.get("example_users", { username = username })
if not res then
ngx_say("Error: ", err or "User Not Found")
return
end
-- 返回用户信息
ngx_say("Hello ", res.username, ", your info: ", cjson_encode(res))
end
return _M
在 Lua 模块中,通过使用 custom_table
模块来获取自定义数据:
local ct = require("custom_table")
local res, err = ct.get("table_name", { field = "value" })
4. 在应用中引用 Lua 模块
在应用的 Edge Language 规则中调用 Lua 模块:
true =>
foreign-call(module: "check_user", func: "go");
5. 测试验证
配置发布完成后,进行功能测试:
测试 1:查询存在的用户
$ curl --resolve oredge-example.com:80:127.0.0.1 'http://oredge-example.com/?username=oredge'
Hello oredge, your info: {"enable":true,"domain_array":["openresty.com","doc.openresty.com"],"ip_array":["1.2.3.4","2.3.4.5"],"username":"oredge","domain":"openresty.com","ip":"1.2.3.4","age":10,"array":["openresty","edge"]}
测试 2:查询不存在的用户
$ curl --resolve oredge-example.com:80:127.0.0.1 'http://oredge-example.com/?username=notfound'
Error: User Not Found