- 版权类型
- 转载
- 插件中文名称
- NDatabase
- 插件英文名称
- NDatabase
- 支持的核心(服务端)
- Spigot
- Paper
- Purpur
- Leaves
- 其他核心
- 语言支持
- English
- 适配版本(Java)
- 1.21
- 1.20
- 1.19
- 1.18
- 1.17
- 1.16
- 1.15
- 1.14
- 1.13
- 1.12
- 1.11
- 1.10
- 1.9
- 1.8
- 1.7
什么是 NDatabase API ?
- NDatabase 是一个轻量级、易于使用的索引键值存储数据库框架,主要面向 Minecraft 服务器,并且支持多平台(当前支持 Bukkit / Spigot 服务器)。它可以作为插件使用,您只需安装一次,就可以在多个插件中复用,无需每次开发新插件时配置数据库和重复建立连接池。
- 该 API 提供了一种流畅的方式来处理异步数据获取和服务器主线程回调,采用异步到同步的机制。NDatabase 支持多个数据库(目前支持 MySQL、SQLite 和 MongoDB 实现)。NDatabase 可以支持 Java 8 及以上版本,并兼容所有 Minecraft 服务器版本(已测试版本从 1.8 到 1.19+)。
使用 NDatabase 的优点
- 使用简单:您无需编写任何 Repository 类或 SQL 语句。该框架的设计方式使得您只需创建数据模型对象(DTO),系统会自动生成一个完全可用的 Repository。请参考 NDatabase 安装与快速入门指南了解更多信息。
- 一次安装,随处使用:显而易见,Minecraft 服务器通常有很多插件,其中大多数需要数据库。每个插件都需要重新实现并配置数据库,连接池的重复创建也消耗大量资源。而使用 NDatabase,您只需安装一次插件,就可以在每个插件中使用该 API,无需额外配置。
- 索引键值存储:按设计,键值存储非常易于操作且速度快,但通常没有索引。在某些情况下,我们确实需要按字段值检索数据。NDatabase 为您提供了一个非常简单的方法来为某些字段创建索引,并进行数据查询。有关如何对键值存储进行索引的更多信息,请参见文档。
- 流畅的异步到同步 API:您可能知道,绝对不应在 Minecraft 主线程中进行数据库和 I/O 操作。NDatabase 原生提供了一个 API,可以用来异步获取数据,并在同步中进行使用。
- 数据库类型无关:您只需使用 NDatabase 开发一次插件,通过相同的 API 即可支持多种数据库类型。如果您是插件开发者且出售插件,这非常方便,因为您无需关心您的客户使用的是 MongoDB、MySQL 等等。
创建一个 Repository
- 当 NDatabase 在您的服务器上运行时,创建存储库非常简单,实际上只需一行代码即可完成。
Java:
Repository < UUID ,PlayerStatsDTO > storage = NDatabase.api ( ) . getOrCreateRepository ( PlayerStatsDTO.class ) ;
异步/同步使用您的 Repository
- 您绝不应该在 Minecraft 主线程中进行 I/O 和数据库操作,这就是为什么 Repository 提供了一个流畅的 API,可以异步获取数据,并在需要时在主线程中执行回调。
Java:
// 异步到同步(异步获取数据并在主线程中使用它)
blockRepository.getAsync("id")
.thenSync((bloc) -> {
placeBlockInWorld(bloc);
});
// 完全异步(异步获取数据并在同一个异步线程中使用它)
playerRepository.getAsync(joinedPlayer.getUUID())
.thenAsync((playerDTO) -> {
loadPlayer(playerDTO);
});
- 查询示例:积分大于等于 100 或特定 discord id 的玩家。
Java:
List<PlayerData> bestPlayers = repository.find(NQuery.predicate(
"$.statistics.score >= 100 || $.discordId == 3432487284963298"
));
想试试吗?
- 您可以使用 gradle 或 maven 来进行尝试。
- 我们还建议您查看 github 页面来获取更多详细内容。
代码:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependency>
<groupId>com.github.NivixX.NDatabase</groupId>
<artifactId>ndatabase-api</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>