Tcl StarKit 与 SQLite 数据库作为一个程序?

Tcl StarKit versus SQLite database as a program?

我正在阅读 Hipp 博士 2004 年的 this paper,我对标题为 Database as Program 的部分很感兴趣。但是,我对这与 Tcl StarKits 的关系感到困惑。我在问这个问题时写的远远超出了我的技能水平;因此,条款可能不完全准确。

如果我没理解错的话,StarKits是打包在一起的,这样Tcl解释器就包含在StarKit中了;并且未在其计算机上安装 Tcl 的用户仍然可以 运行 将 StarKit 包作为单个可执行文件。

问题在于,至少就我而言,StarKit 中包含的 SQLite 数据库必须从中提取才能使用;它不能在 VFS 中使用。

因此,将数据库作为程序的想法看起来很有趣,但我不明白几件事。

一个。一个是数据库似乎不是完整的程序,因为必须包含一个单独的 Tcl 脚本来从数据库中检索主脚本以获取东西 运行ning,尽管它可能很小脚本。

乙。另一个是似乎不能在数据库本身中包含 Tcl 解释器,因为 运行 初始 Tcl 脚本需要它。因此,用户必须在他们的计算机上安装 Tcl 才能 运行 数据库程序。

C。另一个问题是该程序是要与其余数据包含在同一个数据库中还是单独包含?如果不分开,数据又很多,那岂不是更难更新了。

我的程序实际上只是一个信息数据库,Tcl 主要通过充当一个非常简单的本地服务器来搜索和显示这些信息。

1.我对这两个的理解正确吗?

2。在确定选择哪个选项时最重要的决策点是什么?

3。还有其他选择吗?

我还没到将它打包在一起的时候,但我想在考虑打包的情况下构建它的其余部分。感谢您提供的任何指导。

我不确定我是否完全理解这些问题,但我可以对 TCL 和 SQLite 发表评论。

我在工作中编写图形实用程序 (Windows) 并且作为业余爱好几乎完全使用 TCL,因为它很简单而且我不是专业人士。大多数这些实用程序都保留一个 SQLite 数据库。 SQLite 实际上只是一种格式,运行较少的服务器。所有 SQLite 命令以及与实际 dB 文件的交互都可以在 TCL 脚本中完成。 (需要 package sqlite3)创建可执行文件后,最终用户的计算机上既不需要 TCL/Wish 也不需要 sqlite3。

我希望我在这里没有偏离基地,其中一些可能有所帮助。

Starkits 基于比 SQLite Metakit 更简单的数据库技术,它实际上是一个键值存储。它也有点旧,并且早期关注如何制作单文件应用程序(通过有效地将一个小文件系统附加到一个 Tcl 可执行文件,它可以从中提取脚本和其他资源)。唯一真正棘手的一点是它需要一段特殊的代码 (sdx) 来构建,这意味着它适合构建应用程序但不适用于 Tcl/Tk 核心库本身。

SQLite 是一个几乎完全可嵌入的数据库引擎,它是从 go to work with Tcl 这个词开始设计的;它的绝大部分被认为很奇怪的方面实际上从 Tcl 进入它时非常不奇怪。

将 SQLite 数据库安装为文件系统的技术(好吧,我想它必须是特定的模式)与众所周知的 Starkits 完全不同。


  1. Am I understanding these two correctly?
  2. What would be the most important decision points in determining which option to choose?

您缺少的主要是一个选项并没有真正锁定另一个选项。特别是,您可以构建包含 SQLite 库和静态构建的启动脚本的 Tcl(短脚本成为嵌入式 C 字符串)。

如果你想要一个 运行时间可修改的 数据库,你必须将其与至少一个主要平台上的可执行文件分开(Windows ) 因为 OS 将执行文件锁定为只读。您可以通过在嵌入式文件系统中包含数据库文件的只读副本并在应用程序首次 运行 时将其复制出来来解决此问题。然后可以通过 sqlite3 包正常打开复制出的 DB 文件。 (SQLite 引擎不能直接与嵌入式文件系统中的数据库一起工作;它需要太多的低级文件系统访问才能处理与事务有关的事情。)

我不会选择 Metakit 作为我的数据库选项。选择 Starkit 更明智,至少在 Tcl 8.7 或 9.0 出来之前(它们目前处于适度高级的 alpha 中);那些内置了可嵌入文件系统(基于 ZIP 档案,使引导问题更容易)。

请注意,Tcl 的嵌入式文件系统不仅适用于 opensource,还适用于 load;您可以包含本机 C 代码并期望一切正常。 (当 C 代码构建为存根库时,它们往往会工作得更好,因此它可以使用 C API 配置文件而不是绑定到依赖项的特定修订版。)

  1. Are there other options?

最简单的方法是不要太担心转向单文件分发。一个小的文件存档几乎同样易于使用,特别是如果它们被设计为来自任何位置的 运行(即,您可以根据启动脚本找到其他所有内容)。这样做的好处是允许您拥有多个活动数据库;这有时很有意义。