如何在桌面应用程序中存储“大量”数据?
Posted
技术标签:
【中文标题】如何在桌面应用程序中存储“大量”数据?【英文标题】:How to store "large" amounts of data in a desktop app? 【发布时间】:2014-07-18 10:41:45 【问题描述】:更新
在完全不相关的搜索中,我发现了这个:Lightweight SQL database which doesn't require installation,其中列出了一些具有大致相同目标的可能选项。
原帖
我们有一个桌面 .Net/WPF 应用程序,存储了大量(对于桌面应用程序而言)数据:它有布局、模板、产品列表和技术规范等等。
今天它存储在 Access 数据库中,但我们已经非常严重地遇到了 Access 限制:它不是很快,数据库重量为 44Mb(这导致安装包很大),更重要的是,它使用起来很痛苦版本控制,因为我们无法将数据从一个分支合并到另一个分支。例如,我们可能会创建一个分支来添加一些产品,但是当我们合并时我们必须在主干中手动添加它们。我们可以使用 SQL 脚本,但为 Access 编写高级 SQL 脚本很痛苦。
基本上,我想用另一种存储格式替换 MS Access DB,因为 Access 没有很好地适应。
我一直不敢使用在安装期间或安装后会解压缩的 JSON 文件,但我有点担心性能问题。 我还考虑将数据拆分为具有多种格式的多个文件,具体取决于其用途,但使用不同格式可能会变得复杂或烦人。
性能
数据库的某些部分访问频率很高,应该进行性能优化,而其他部分可能每个工作会话访问 1 或 2 次,使用性能较差但压缩率高的格式可能没问题。
尺寸
我们希望安装程序尽可能小,所以库应该很小,格式应该使用小文件。使用向安装程序文件添加 5 Mb 的库是不可能的。
兼容性
该软件必须能够在 .Net 4(不是 4.5)上运行,如果它可以在 Windows XP 上运行那就太好了(尽管我们越来越多地考虑放弃它,但它仍然更多7% 以上的市场份额)。
此外,它不需要安装服务器(如 MS Access 或 SQLite),因为它将安装在最终用户的计算机上,我们不想让它们膨胀。
版本控制
应该很容易对数据和数据库结构进行版本化。该文件应该是文本文件(如 JSON),或者脚本应该易于在持续集成平台(如 SQL 服务器)中运行。
那么,您会使用哪种技术来解决所有这些限制?
谢谢!
【问题讨论】:
我的同学使用 Firebird db 来获取用于 windows (С#) 视频跟踪软件的海量数据。之前他们用过PostgreSQL,但是在windows上安装很痛苦。 我不同意这个问题是重复的。所描述的要求明显不同。如果有的话,链接问题中的要求是其中的一个子集。 【参考方案1】:至于您的版本控制问题,从您的描述中可以看出,如果我是您,我会将原始数据保存在受版本控制的文本文件中,并且只让构建过程从中生成数据库。这样,您应该可以使用 SQLite。
【讨论】:
我认为你可能是对的。我会尝试这种方法。【参考方案2】:在你的情况下我会选择 SQLite,因为文件是独立的并且易于定位(因此很容易保存在版本控制系统上),安装程序很小,并且性能很好。 http://www.sqlite.org/
【讨论】:
经过考虑,SQLite 文件似乎是二进制文件,但看起来像文本文件。 “合并”部分让我有点害怕,因为这意味着开发人员可能会合并他或她的修改,认为它会起作用,并破坏数据。以上是关于如何在桌面应用程序中存储“大量”数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在C#WinForm桌面应用程序中存储MySql数据库连接字符串