数据库后端

基本信息

属性 值
工厂 DynmapCore.java:430-449
抽象基类 org.dynmap.storage.MapStorage
配置位置 configuration.txt:22-35 的 storage: 段
后端实现类数 6(其中 5 个可由工厂分派)

各后端连接方式

每个后端在 checkDriver() 中拼装 JDBC 连接串并反射加载驱动:

后端 连接串 驱动类 源码行
MySQL jdbc:mysql://<hostname>:<port>/<database><flags> Class.forName(classname)(变量) MySQLMapStorage.java:290、:331
MariaDB jdbc:mariadb://<hostname>:<port>/<database><flags> org.mariadb.jdbc.Driver MariaDBMapStorage.java:14、:17
PostgreSQL jdbc:postgresql://<hostname>:<port>/<database><flags> org.dynmap.org.postgresql.Driver(重定位后的内置驱动) PostgreSQLMapStorage.java:309、:312
Microsoft SQL jdbc:sqlserver://<hostname>:<port>;databaseName=<database><flags> Class.forName(classname)(变量) MicrosoftSQLMapStorage.java:281、:322
SQLite jdbc:sqlite:<databaseFile> org.sqlite.JDBC SQLiteMapStorage.java:291、:294
filetree 无 JDBC(直接文件树) — FileTreeMapStorage.java

PostgreSQLMapStorage.java:312 的注释原文为 “Use shaded name for our bundled driver”——PostgreSQL 驱动被 shade 重定位进 mod jar,与 gradle.properties 的 relocateShadowedDependencies = true 一致。

继承关系

MariaDBMapStorage(24 行)继承 MySQLMapStorage(1274 行),只覆写 checkDriver() 一处(MariaDBMapStorage.java:12-23):换用 jdbc:mariadb:// 连接串前缀,并检测 org.mariadb.jdbc.Driver;找不到时记录 MariaDB-JDBC classes not found - MariaDB data source not usable 并返回 false(:19-20)。这解释了它为何远小于 MySQL 实现。

MicrosoftSQLMapStorage(1133 行)则直接 extends MapStorage(MicrosoftSQLMapStorage.java:34),是独立实现。

未注册的后端

MicrosoftSQLMapStorage 在全仓范围内除自身文件外无任何引用:grep -rn 'MicrosoftSQLMapStorage\|mssql' --include=*.java src/main/java 的全部命中都落在 storage/mssql/MicrosoftSQLMapStorage.java 内部。工厂 DynmapCore.java:430-449 没有 mssql 分支,configuration.txt:18-21 的可选值注释也只列出 filetree / sqlite / mysql。

因此该后端无法通过配置启用。仓库中未找到注释说明保留原因,此处仅记录"存在但无注册路径"这一事实,不判定为缺陷。

数值

数值名 值
后端实现类数 6
工厂可分派后端数 5
最大实现(MySQL) 1274 行
次大(PostgreSQL) 1195 行
Microsoft SQL 1133 行(不可启用)
SQLite 1088 行
filetree 691 行
MariaDB 24 行(继承 MySQL)

配置

configuration.txt:22-35 的 storage: 段提供三组示例,仅 filetree 生效:

段 生效 键
configuration.txt:25-26 是 type: filetree
configuration.txt:27-28 否(注释) #type: sqlite、#dbfile: dynmap.db
configuration.txt:29-36 否(注释) #type: mysql + hostname / port / database / userid / password / prefix

configuration.txt:20 对 sqlite 的注释原文为 “single SQLite database file (this can get VERY BIG)”。

仓库 README.md “Other tips” 一节另提示:文件开头被注释的 port 键用于数据库引擎存储场景。

PHP 侧的直连实现

extracted/web/standalone/ 下另有一套绕过 Java 服务端、直接连数据库的 PHP 实现(详见 网页前端资源):MySQL_access.php / MySQL_tiles.php / MySQL_markers.php 等 9 个 MySQL 文件、9 个 PostgreSQL 文件,以及 SQLite_markers.php / SQLite_tiles.php。

相关条目