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

标签 c# .net windows

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

  • LocalApplicationData:文档表明这是用于用户注销时可能会删除的数据。

  • MyDocuments/Personal:我相信这也会漫游。

  • UserProfile:文档说“应用程序不应在此级别创建文件或文件夹”

存储位置的一些要求:

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

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

最佳答案

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

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

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

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

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

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

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

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

关于c# - 应用程序在 Windows 上存储大型数据库的正确位置在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22950341/

相关文章:

c# - 如何在特定时间启动 IObservable?

java - 在 Windows 7 SP1 上安装 Hadoop 2.7.1 时出现 CMake 错误

c# - 数据访问层

c# - 如何在 Microsoft.Extensions.DependencyInjection 中注册现有实例?

javascript - 在下拉列表中按选定区域限制搜索

c# - Ninject - 绑定(bind)通用类型与约束

c# - C#中的内存异常

windows - PS : Emulate CCleaner "Uninstall" tool to list programs installed on PC

windows - 如何使用 Powershell 清除 "Applications and Services Logs"?

c# - WPF 自定义控件设计模式。 MVVM?