是否无法将数据库/目录导出到 HSQLDB 中的单个文件
Posted
技术标签:
【中文标题】是否无法将数据库/目录导出到 HSQLDB 中的单个文件【英文标题】:Is it not possible to export a database/catalog to a single file in HSQLDB 【发布时间】:2014-01-09 16:03:57 【问题描述】:我正在刷新/重写我几年前编写的数据分析应用程序。我想要实现的目标如下:
我需要一个轻量级数据库来进行查询,我决定使用 HSQLDB。 我将有 2 个申请;一个用于创建数据库,一个用于分析(将被其他人使用)。我的意图是分析软件(多线程)将以只读方式使用数据库 DB 可能会通过 FTP 分发,并且最好为分析软件的用户(其中大多数技术不熟练)的用户提供最少的麻烦。我不太了解 SQL,但我设法将信息放入表中并尝试了简单的查询。因此,为了完成“数据库创建者”应用程序,我只需要弄清楚如何“打包”数据库。
当我生成数据库时,我已经对 mem 和 file “目录”as described in the HSQLDB user guide 进行了试验。在我看来,对于 mem 目录,我无法将它们写入磁盘(以便稍后分发),对于 file 目录,我有几个文件需要处理:
一个文件:目录由 2 到 6 个文件组成,所有文件名称相同 但具有不同的扩展名,位于同一目录中。为了 例如,名为“test”的数据库包含以下文件:
• 测试属性
• 测试脚本
• 测试日志
• 测试数据
• 测试备份
• 测试.lobs
属性文件包含一些关于数据库的设置。脚本文件包含表和其他数据库对象的定义,以及非缓存表的数据。日志文件包含 最近对数据库的更改。数据文件包含以下数据 缓存表和备份文件是最后一个压缩备份 已知一致状态 的数据文件。所有这些文件都是必不可少的,永远不应删除。对于某些目录,test.data 和 test.backup 文件 不会出现。除了这些文件之外,还有一个 HyperSQL 数据库 可以链接到任何格式化的文本文件,例如 CSV 列表,位于任何地方 磁盘。
问题:
我认为*.script
和*.properties
文件是最重要的文件,但指南特别指出所有文件都是必不可少的,不应删除。由于在我的情况下没有*.data
文件,并且生成我的数据库的所有数据都存储在*.script
文件中(以明文形式),这让我认为当我“打开”该文件时,JVM 会重新创建整个数据库重新来过。它是否正确?这不是非常低效的数据表示吗?
如果我在 (1) 中的理解是正确的,为什么其他文件是必不可少的?我必须全部分发吗?
如果 (1) 和 (2) 没有偏离轨道,那么我有哪些选择来实现我的目标?例如,压缩所有文件并以这种方式传输它们是否可行?然后我的分析软件需要将它们解包到一个合理的位置,并在它“拥挤”时不时进行清理......
【问题讨论】:
可以使用script
命令:hsqldb.org/doc/2.0/guide/management-chapt.html#N1482D
@a_horse_with_no_name 不确定我是否理解,脚本命令显然创建了一个包含 SQL 语句的脚本以重新创建数据库。这不是我已经拥有的.script
文件吗?用户手册 (HSQLDB) 的第 3 页指出:“A res: catalog 由小型只读数据库的文件组成,该数据库可以存储在 Java 资源(如 ZIP 或 JAR 存档)中并作为一部分分发Java 应用程序。”,这就是我希望实现的目标
【参考方案1】:
如果没有 *.data 或 *.lobs 文件,则 .script 文件包含所有数据以及表定义。在这种情况下,JVM 通过读取 .script 文件来重新创建数据库。
如果存在,其他文件是必不可少的。如果您不使用 LOB,则不会有 .lobs 文件。如果不磁盘表(CACHED表),就没有.data文件。
您只能分发 .script 文件。每次打开此文件时,如果不存在,将创建一个 .properties 文件。
如果您的数据库没有更改,您可以使用 res: 选项。对于更改并需要重新加载的数据库,请使用 file: 选项。
【讨论】:
以上是关于是否无法将数据库/目录导出到 HSQLDB 中的单个文件的主要内容,如果未能解决你的问题,请参考以下文章