【问题标题】:Packaging database into application seamlessly for users为用户无缝地将数据库打包到应用程序中
【发布时间】:2014-10-05 19:35:05
【问题描述】:

我想创建一个使用关系数据库的桌面应用程序(例如 postgres - 假设我最好的情况是在此应用程序中使用 postgres)。

我希望用户不知道数据库。目前,我必须将 postgres 安装到我的本地计算机中并让我的应用程序与之通信。

我正在使用 Go。

我怎样才能避免这种情况?

【问题讨论】:

    标签: database postgresql go


    【解决方案1】:

    您正在寻找一个嵌入式数据库

    This isn't an ideal job for PostgreSQL,但you can use it that way with a bit of care

    请不要捆绑安装程序并在无人看管的情况下运行它。以后去安装 PostgreSQL 的用户会很困惑,当他们看到它已经在他们的计算机上时,他们不知道为什么,是谁安装了它,或者密码是什么。

    取而代之的是initdb 在您应用的%APPDATA%%PROGRAMDATA% 中(对于多用户共享)中的一个新数据目录。设置自定义端口(不要使用默认的 5432)。使用pg_ctl register 创建一个新服务,以NETWORKSERVICE 运行,或者使用pg_ctl 按需启动/停止。这样一来,您就不会妨碍任何现有的 PostgreSQL 安装或新安装,并且拥有一个专用 PostgreSQL 专供您的应用使用。

    尽管如此,请为用户提供一个选项,而不是为现有的 PostgreSQL 提供连接字符串。如果应用在您不希望它们的情况下坚持使用它们自己的嵌入副本,那会很痛苦。

    不过,通常最好使用 SQLite、H2、Derby、Firebird 或其他嵌入式数据库之一。

    【讨论】:

    • 我有一个使用 PostgresSQL 的 Django Web 应用程序(开发阶段)。是否建议捆绑它们(Web 应用程序二进制文件、PostgreSQL 二进制文件和 Web 服务器二进制文件)进行销售?!我是从营销的角度问的!任何建议表示赞赏:-)
    【解决方案2】:

    短版,你真的不能,最好的办法是使用SQLite 或类似的。

    长版本,好吧,如果你真的想要,你可以为你的数据库创建多个无人参与的安装程序,针对你想要的每个平台,将它嵌入到你的应用程序中,并在第一次运行时安装它。

    现在这很丑,大多数用户(包括我自己)根本不会使用它。

    您总是可以提及您的软件依赖于 X 和 Y,并提供有关如何手动安装依赖项的信息。

    【讨论】:

    • 除了 SQLite 之外,还有什么可以完成这项工作的吗?该软件包似乎很新/未经测试。
    • @bvpx github.com/cznic/ql,这是我发现的除了 sqlite for go 之外唯一的嵌入式数据库。
    • 它实际上是对 sqlite 的 C api 的封装,没有太多要测试的。
    • 这个 SQLite 驱动非常成熟:github.com/mattn/go-sqlite3 - 还有 BoltDB,但不是关系型的。
    • 请不要使用无人值守的安装程序;当用户后来去安装 PostgreSQL 并且它已经安装但他们不知道由谁、为什么或密码是什么时,这太可怕了。至少对于 PostgreSQL,最好捆绑二进制文件并按需启动。
    猜你喜欢
    • 2021-05-21
    • 2013-11-04
    • 1970-01-01
    • 2022-01-26
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 2011-07-27
    相关资源
    最近更新 更多