管理服务(如IIS)的数据存储
本文关键字:数据 存储 IIS 管理服务 | 更新日期: 2023-09-27 17:49:43
我有一个c# Windows服务,它为我的服务器应用程序管理一些东西。这不是主应用程序,而是用于控制实际应用程序的辅助进程。用户使用WinForms应用程序通过WCF连接到这个应用程序。这看起来有点像IIS管理器。
我需要一个数据存储为这个应用程序
目前,我使用单独的XML文件,这些文件在启动时加载,在内存中更新,并在每次更改时刷新到磁盘。我喜欢这个是因为:
- 当出现问题时,我们可以简单地在记事本中编辑XML文件;
- 我没有外部依赖,例如MSSQL express;
- 当格式改变时,我不需要更新数据库模式。
然而,我发现这是不稳定的,内存管理是非常脆弱的。
我应该使用什么来代替,而不是过度使用(例如MSSQL express),而不会失去太多的上述优势?
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文件,或者将它用于数据库。