你又问错问题了:)
更好的问题是“我如何构建一个可以让我更改数据存储实现的应用程序?”
如果您应用存储库模式并正确连接它,您可以构建可互换的持久层。因此,您可以从一种实现开始并根据需要对其进行更改,而无需重新设计业务或应用程序层。
一旦你有了一个存储库接口,你就可以尝试用很多不同的方法来实现:
平面文件- 您可以将数据保存为 XML,并假设它不是很多数据,您可以将全部内容存储在内存中(只需在启动时读取文件,在关闭时写入文件)。使用内存中的 XML,您可以获得非常高的吞吐量,而无需担心数据库索引等。
Distributable DB - SQLite 或 SQL Compact 工作得很好;它们提供了许多 DB 优势,并且无需安装
Local DB - SQL Express 是轻量级和全功能 DB 之间的一个很好的中间地带。小心使用时,访问就足够了。主要的好处是它包含在 MS Office 中(尽管默认情况下没有安装),并且一些 IT 团队更愿意将 Access 安装在机器上而不是 SQL Express。
完整数据库- MySql、SQL Server、PostGreSQL 等。
鉴于您的具体要求,我建议您使用基于 XML 的平面文件——唯一的条件是您可以接受与文件大小直接相关的应用程序的内存使用情况(因为您的数据是文本,即使加上 XML 的重量,这将需要很多条目才能变得非常大)。
以下是根据您的要求列出的优点/缺点:
缺点
- 输入的数据量没有限制。
- 使用内存中的 XML 意味着您的应用程序无法扩展。它可以轻松处理 10MB 的数据文件,100MB 应该不是问题(除非您的系统内存不足),除此之外,您必须认真质疑“我能负担得起这么多内存吗?”。
优点
- 每个应用程序单个用户。没有并发活动或多个用户。
- XML 可以读入内存并由进程(实际上是 AppDomain)保存。它非常适合并发性非常狭窄的单用户场景。
- 允许将用户条目/数据导出到可以在应用程序/用户之间轻松共享的外部文件。
- XML 非常适合导出,也很容易导入到 Excel、数据库等...
- 允许用户查询根据客户信息/工作地点信息的不同组合显示客户。
- 永远不会在应用程序之外查看或操作数据。
- 该程序几乎总是运行,最小化到任务栏。
- 所以在启动时加载 XML,在关机时写入是可以接受的(如果文件非常大,可能需要一段时间)
- 启动时间不是很重要,但是我希望查询速度相当快
- 启动时读取 XML 会比较慢;但是当它加载到内存中时,它将很难被击败。任何给定的数据库都需要启动数据库引擎,进行互操作/跨进程/跨网络调用,从磁盘加载结果(如果引擎没有缓存)等等......