【问题标题】:How is data stored in a non-web based application?数据如何存储在非基于 Web 的应用程序中?
【发布时间】:2017-10-19 12:29:53
【问题描述】:

问题的主要范围是确定非基于 Web 的应用程序(即可执行文件)存储信息的内容/方式。

当然,基于 Web 的应用程序使用数据库。 非基于 Web 的应用程序是否将信息存储在编译的数据库模块中? 例如,如果我们有 postgres,我们是否会编译 postgres 源代码并以某种方式与驱动程序一起使用以在本地存储信息?

如果不是,信息如何存储?数据库是否仅适用于基于 Web 的应用程序?为什么有人会编译/构建/制作数据库的源代码?

TLDR:一个例子;

我们有一个非网络游戏,你在哪里存储角色统计数据、进度、遭遇等。你为此使用数据库吗?如果没有怎么办?

【问题讨论】:

    标签: database postgresql compilation


    【解决方案1】:

    有很多选择:

    • 静态文件(json、yaml、xml、.ini、自定义文本格式,...)定期和/或退出时读入内存、修改和写出。注意写入新文件,然后重命名以覆盖旧文件。

    • 嵌入式 SQL 数据库,如 SQLite、Firebird、Microsoft JET、HSQLDB、Derby 等

    • 像 Berkely DB 这样的嵌入式键/值存储

    • 独立 SQL 数据库,与应用程序安装程序捆绑在一起,如 PostgreSQL、MySQL、MS-SQL 等。或由用户单独安装的相同数据库,然后将应用程序配置为使用现有数据库。

    • Windows 注册表等系统配置数据库。不适合存储变化很大、更新频繁或存储大量数据的数据。请不要这样做。

    • 特定于平台和语言的工具,例如 Java 或 Swift 对象序列化。最好避免,但它们有自己的位置。

    • 各种古怪的自定义格式和方案

    这与您是否编译源等完全无关。大多数嵌入式数据库都可以作为带有标头的共享库(DLL、dylib 等)使用。您可以在编译时将它们链接到您的程序,但只能以将其他一些 DB(或 ODBC 等驱动程序框架)的数据库驱动程序链接到您的应用程序的相同方式。

    无论您实际使用什么,在大多数情况下,数据都会存储在桌面用户的个人资料或移动应用数据存储沙盒中。主要的例外是数据库服务器

    【讨论】:

    • 我能知道为什么有人会编译数据库的源代码吗?当您说独立数据库使用现有数据库时,这是否意味着会在应用程序运行时托管例如 postgres 服务器以进行交互?
    • 如果您想要非标准设置/选项不重新编译就无法使用,您可以编译它。或者,如果您正在使用二进制包不易获得或根本不使用的利基平台。或者你是个控制狂。或者您正在测试开发版本。
    • 正确的独立。无论应用程序是否正在运行,它都可能作为保持活动状态的服务运行。或者它可能由应用程序管理并按需启动和停止。参见例如stackoverflow.com/q/24625490/398670,https://stackoverflow.com/q/…
    • 非常感谢,这一切彻底解开了我的疑惑!
    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 2012-12-09
    • 2023-03-15
    • 1970-01-01
    • 2011-04-22
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多