管理服务(如IIS)的数据存储

本文关键字:数据 存储 IIS 管理服务 | 更新日期: 2023-09-27 17:49:43

我有一个c# Windows服务,它为我的服务器应用程序管理一些东西。这不是主应用程序,而是用于控制实际应用程序的辅助进程。用户使用WinForms应用程序通过WCF连接到这个应用程序。这看起来有点像IIS管理器。

我需要一个数据存储为这个应用程序

目前,我使用单独的XML文件,这些文件在启动时加载,在内存中更新,并在每次更改时刷新到磁盘。我喜欢这个是因为:

  • 当出现问题时,我们可以简单地在记事本中编辑XML文件;
  • 我没有外部依赖,例如MSSQL express;
  • 当格式改变时,我不需要更新数据库模式。

然而,我发现这是不稳定的,内存管理是非常脆弱的。

我应该使用什么来代替,而不是过度使用(例如MSSQL express),而不会失去太多的上述优势?

管理服务(如IIS)的数据存储

SQLite是为这样的场合而设计的,您需要一个可靠的数据存储,但不需要一个完整的数据库服务器的功能或可伸缩性。

如果你不想担心模式变化,你可能最好使用xml方法或一些NoSQL数据库。xml设置究竟有哪些不稳定之处?

如果您有多个并发进程访问xml文件,您将不得不经常加载它以确保它保持同步。如果这是一个多用户的情况,xml文件可能在非常非常小的范围内是不可行的。

尝试SQL CE或SQL lite。

db40

一个解决方案是使用像db40这样的对象数据库。它占用空间非常小,速度非常快,并且可以在不更改模式的情况下向持久化对象添加属性。此外,您不需要编写任何sql。

存储对象就像:

using(IObjectContainer db = Db4oEmbedded.OpenFile(YapFileName))
{
   Pilot pilot1 = new Pilot("Michael Schumacher", 100);
   db.Store(pilot1);
}

XML in Database

另一种方法是使用类似SQLLite或SQL CE的东西(如其他海报所提到的)与xml数据结合使用。

数据契约序列化器

如果您还没有使用DataContractSerializer/DataContracts来生成/加载xml文件,那么值得考虑一下。它是您已经用于WCF的相同的健壮框架。它可以很好地处理版本控制。您可以使用它来处理磁盘上的xml文件,或者将它用于数据库。