2

有没有比这更有效的方法来在我的应用程序中实现用户保存的文件?

(我将 C# / .Net 与 Sql Server 一起使用)

我的目标:

我希望允许用户将他们创建的数据点(连同其他一些结构化数据)保存到具有任意扩展名的“项目文件”中。

建议的方法:

  • 将每个数据点与 FileID 列一起存储在数据库中
  • 当用户保存文件时,获取所有数据点:“SELECT * ... WHERE FileID = @CurrentFileID”。
  • 将所有这些数据点导出到 XML 文件。
  • 从数据库中删除所有这些数据点。
  • 将 XML 文件另存为项目文件(或作为项目文件的一部分)。
  • 每次用户加载他们的项目文件时,将 XML 中的数据重新导入数据库。
  • 显示数据库中具有 FileId = 当前文件 ID 的数据点。

替代方案: 使用 Sqlite 并为每个用户的项目创建一个单独的 Sqlite 数据库文件?

4

1 回答 1

2

“最佳”答案取决于几个因素。您可以通过询问有关数据使用的一些探究性问题来帮助自己找到最适合您的实施方案。

我要问的第一个问题是:您现在或将来有什么理由可以将数据点存储为数据库中的离散字段。

在需要使用这些数据点的背景下考虑这个问题。

例如,如果您需要能够根据某些标准将它们拉入报表或一次仅导出其中的一部分,那么您几乎肯定需要将它们作为离散值存储在数据库中。

但是,如果这些点仅在您的应用程序中作为一个完整集使用,并且您每次都必须分解和重新组装 XML,您可能只想将完整的 XML 文件作为 blob 存储在数据库中。这将使存储、备份和更新操作变得非常简单,但也会限制未来的灵活性。

我倾向于倾向于第一种方法(离散字段),但是如果您很难设想数据的任何其他用途,并且如果需要离散字段,那么您可以轻松地从第二种方法开始如果需要,将 blob 中的数据转换为表格数据是一个相对简单的练习。

您还可以通过提出其他问题来完善答案:

  • 数据的量级是多少(数百、数千、数百万、数十亿)?

  • 插入和更新的频率是多少(x 每秒、分钟、天、年)?

  • 期望的响应时间是多少(毫秒,秒,无所谓)?

如果您需要每秒插入数十万个点,最好将数据存储为 blob。

但是,如果您每天只需要插入几百个点,您最好从表格方法开始。

它可能会变得复杂,但通过探究数据在您的场景中的使用方式,您应该能够为您的系统得出一个很好的答案。

于 2013-07-13T22:22:16.120 回答