【Skript扩展】 skript-orm | 提供简便、高性能的数据库操作,告别手写 SQL

原创 开源 脚本 【Skript扩展】 skript-orm | 提供简便、高性能的数据库操作,告别手写 SQL 1.4.1

完成注册/登录后下载
版权类型
原创
插件中文名称
skript-orm
插件英文名称
skript-orm
原帖地址
https://github.com/heyhey123-git/skript-orm
支持的核心(服务端)
  1. Paper
语言支持
English
前置组件
Skript https://github.com/SkriptLang/Skript/
SkBee(Optional) https://github.com/ShaneBeee/SkBee
适配版本(Java)
  1. 最新版本
  2. 26.x
banner.webp


用 Skript 保存你的 Minecraft 服务器数据。 定义好表,就能用熟悉的 Skript 语法保存玩家档案、奖励记录和日志,开始使用不需要先学 SQL。

快速上手 · 完整示例 · 性能测试 · 源代码

为什么使用 skript-orm?​

  • 用 Skript 语法存数据。 插入、查询、更新、删除都有对应写法,查询结果直接存进普通 Skript 变量。
  • 直接保存 Minecraft 数据。 UUID、物品、位置、日期和时间段都有对应的列类型。安装 SkBee 后还可以保存 NBT 复合标签。
  • 统一检查输入。 结构化语句通过参数传值,并检查字段名和数据类型。玩家输入的名字或消息作为数据处理。自行执行原始语句时,也应正确传递输入值。
  • 适合批量保存。 插件跨 tick 分段读取列表变量,再把数据库工作交给后台线程。MySQL 使用带参数的多行插入语句。
  • 保存成功再继续。 当前触发器会等操作完成后继续执行,等待期间服务端仍能运行 tick。脚本可以检查操作结果,再告知玩家是否保存成功。
  • 按服务器需要选择数据库。 MySQL、MariaDB、PostgreSQL、SQLite 和 MongoDB 都有真实数据库及 Paper 测试。具名连接让同一脚本可以使用多个数据库。

安装​

使用 Paper 26.2、Skript 2.16.2、Java 25 或兼容的更新环境。SkBee 为可选依赖,只有 NBT 复合标签列需要。

  1. 下载本站附件中的插件 jar。
  2. 将 jar 和 Skript 一起放入 plugins/,重启服务端。
  3. 在 Skript 的脚本目录中添加脚本,填写数据库连接信息,再加载脚本。
连接和表都在脚本里定义,不需要额外修改插件配置文件。

创建连接时填写什么类型?
MySQL、MariaDB、PostgreSQL、MongoDB 使用与数据库同名的连接类型,需要准备数据库服务和账号。SQLite 使用 "JDBC" 类型,在服务端保存数据库文件,不需要单独运行数据库服务。

MySQL 和 SQLite 驱动由 Paper 提供,其他三个数据库的驱动由 Paper 在首次启动时下载。本插件尚未开放 MongoDB 事务。驱动下载方式和各数据库的操作限制,见 兼容性说明。

连接示例​

请将占位符替换为你自己的数据库连接信息。

代码:
on load:
    create a connection to database "MySQL" with properties:
        url: "<你的数据库连接串>"
        username: "<用户名>"
        password: "<密码>"

连接后,在脚本中声明表的列、类型和主键,就能开始保存和查询数据。注册表会创建缺失的表,但不会修改已有表的列。完整的玩家档案脚本见 玩家档案示例,其他常见用法见 完整示例。

真实服务端上的性能​

随附测试图展示五种数据库完成相同批量读写任务的表现。在图中这次测试里,所有数据库的写入都在不到一秒内完成,读取约需十分之一秒。具体数据量、耗时和测试条件均列在图中。
minebbs-benchmark.webp


总耗时表示脚本等待操作完成的时间;最大 tick 间隔表示观察到的服务端 tick 延迟。把两者放在一起,是为了区分“脚本等了多久”和“服务器运行是否受到影响”。例如,图中的 MySQL 批量写入持续了多个 tick,但最大的 tick 间隔仍接近正常水平。

数据库操作在后台执行,大列表的输入分散到多个 tick 读取。保存查询结果、转换单个值等工作仍会用到主线程,因此依然可能出现 tick 延迟。共享测试主机和不同 CPU 会影响耗时,不能按这一次结果给数据库做普遍排名。

测试来源见 本次测试记录。其他数据量、重复运行、原始语句对照和测量限制,见 基准与压力测试。

使用时的限制:单次读取有行数上限,超出时拒绝整个结果,不会只保存一部分;较大的数据集请使用 分页查询。大批量写入会按绑定值和数据包限制拆成多条语句。批量保存完成前,请保持源变量不变。如果一组写入需要一起成功或撤销,请使用 事务。

与 skript-db 有什么区别?​

skript-db 有多个同名项目。btk5h 原版和 Limework 分支主要让脚本执行 SQL 查询。skript-orm 则先声明列,再用结构化 Skript 语法完成常见读写,内置 Minecraft 类型和结果变量处理,减少自行维护的查询拼接与类型转换代码。上述 JDBC 插件处理 SQL 数据库,skript-orm 还提供 MongoDB 的结构化操作。

原版和 Limework 项目也提供安全传值的接口。skript-orm 的结构化语句除了通过参数传值,还会检查声明的字段和数据类型;自行编写原始查询时,仍须正确处理输入。4w3 分支仍在维护,也支持参数绑定、批量操作和事务。安装前应确认具体分支和环境要求,不能把所有同名项目都视为已经停更。

skript-orm 提供跨 tick 读取批量输入和 MySQL 多行插入;skript-db 的批量执行方式取决于分支、查询写法和驱动。我们尚未与这些插件在同一服务端进行性能对照,图中的数据不能证明比它们快多少。希望沿用写 Skript 的方式存数据、保存 Minecraft 对象或导入列表时,skript-orm 能减少要自己处理的细节;依赖复杂联表或数据库专属查询的脚本,也可以选择直接使用 SQL 的插件。

文档与反馈​

快速上手 · 写入行 · 读取行 · 类型 · 错误与等待 · 故障排查

项目按 MIT 许可开源。反馈问题时,请附上服务端、Skript 和数据库版本,以及出错脚本和相关日志。
作者
heyhey123
下载
2
查看
208
首次发布
最后更新

评分

0.00 星 0 次评分

资源团队

heyhey123 的其他资源

最新更新

  1. v1.4.1

    1.4.1:包含此前未在本站发布的 1.4.0 更新。下载本站附件即可使用。 新增 MariaDB 专属连接,使用对应驱动。 批量保存提速:跨 tick...
  2. v1.3.0

    1.3.0 更新说明 新增 原始语句:直接写 SQL 或命令文档。 execute query 存查询结果,execute update 存影响行数,execute command 用于...
  3. v1.2.0

    1.2.0 —— 脚本能看到的东西变多了 新增:写入可以报出影响的行数。语句末尾写 and store affected rows in {_rows},0...
后退
顶部 底部