应用程序在 Windows 上存储大型数据库的正确位置在哪里

本文关键字:位置 在哪里 数据库 大型 Windows 存储 应用程序 | 更新日期: 2023-09-27 17:57:25

我的应用程序使用 sqlite 数据库来存储用户的内容。对于重度用户,此数据库可以增长到 1 GB+。数据库当前存储在应用程序数据 (%appdata%) 中,但与此相关的文档指示它用于漫游数据,漫游数据应该很小,例如应跨会话保留的设置。其他一些选项:

  • 本地应用程序数据:文档指示这适用于用户注销时可能被删除的数据。

  • 我的文档/个人:我相信这也是漫游。

  • 用户配置文件:文档说"应用程序不应在此级别创建文件或文件夹"

存储位置的一些要求:

  • 用户特定(无公共区域)
  • 非管理用户必须具有读/写访问权限
  • 数据
  • 不应漫游(如应用数据''漫游)
  • 不得自动删除数据

非常感谢您对Windows系统上的此类位置的任何建议。

应用程序在 Windows 上存储大型数据库的正确位置在哪里

如果用户具有重定向("漫游")应用程序数据文件夹和/或重定向的文档文件夹,则用户可能经常使用多台计算机,并期望其内容在他或她登录的任何计算机上可用。 因此,您很可能应该使用漫游应用程序数据文件夹或文档文件夹。

我最初的直觉是倾向于前者,因为用户通常不喜欢在他们的文档文件夹中看到神秘和/或意外的文件,并且可能倾向于删除它们。 另一方面,漫游应用程序数据文件夹不太可能被备份(我们没有!),因此,总的来说,我建议使用文档文件夹;若要缓解另一个问题,请将数据库放在"文档"的子文件夹中,并为该子文件夹指定一个非常清晰的名称。

本地数据文件夹通常用于非用户内容,例如缓存和临时文件。 我不知道有任何专业产品可以在那里存储用户内容。 IT人员可能会理所当然地认为删除这些文件夹中的任何内容是安全的,并且正如已经指出的那样,有系统配置为自动执行此操作。

您当然不应该使用UserProfile;如果用户配置文件正在漫游,则每次用户注销时内容都会上传到服务器,并在用户登录时下载(如有必要)。 (这仅适用于 UserProfile;漫游应用程序数据文件夹和其他重定向文件夹直接从服务器访问,永远不会位于本地磁盘上。

我不认为文件的大小一定会使重定向的文件夹不合适。 例如,Mozilla Thunderbird将用户的邮件存储在漫游应用程序数据文件夹中,这可能会变得非常大。 据我所知,这并没有造成任何广泛的问题。

但是,有一些 Windows API 不能用于网络文件,如果将访问该文件的任何进程在不同的安全上下文中运行(例如,作为系统服务),它也不会起作用。 您应该查看 sqlite 的文档以确定是否支持此功能。

如果您无法使用网络驱动器,我认为唯一好的解决方案是默认使用文档文件夹,但检测它何时在网络上并要求最终用户选择替代位置。

在任何情况下,都应为系统管理员或最终用户(或两者)提供一种记录在案的、受支持的覆盖默认位置的方法。

对于每用户存储,您需要 AppData/Local 文件夹。环境变量为 %localappdata%。.NET 枚举是 Environment.SpecialFolder.LocalApplicationData .

至于"文档指示这是针对用户注销时可能被删除的数据"。...

是的。但这很少见。例如,虚拟化客户端(想想 Citrix)上的用户可能会发生这种情况。在这些情况下,拥有持久的 1GB SqlLite 存储将是一个问题。对于我们这些使用常规工作站的人来说,数据可能不会被删除。