共享资源是一些具有键值信息的数据。(因此,可以对此共享资源进行的可能操作是添加新的键值信息,更新/删除现有的键值信息。)
因此,我考虑使用XML文件来物理存储信息,示例内容将如下所示:
<Root>
<Key1>Value</Key1>
<Key2>Value</Key2>
<Key3>Value</Key3>
</Root>
进行读取和操作的界面将如下所示:
public interface IDataHandler
{
IDictionary<string,string> GetData();
void SetData(string key,string value);
}
我可以假设数据不会超过500 MB,因此决定使用xml,如果数据增长了,我会将其移动到数据库中。同时,与读操作相比,数据的写入量更大。
与上述情况相关的一些查询/设计考虑如下: 在一个xml文件中处理500 MB的数据是否可行? 假设文件为xml,现在如何考虑性能问题? 我正在考虑使用缓存(.Net中的MemoryCache类)将数据作为字典缓存,这将使读取操作达到更好的性能。是否可以在内存中缓存500 MB的数据,或者是否有其他选项?
现在,如果我使用上述缓存机制,在写操作期间应该发生什么:
每次写操作时,是否应该将字典内容再次转换为xml进行写入?
将整个字典转换为XML?还是有办法只更新数据被修改/添加的XML文件的部分内容?或者其他处理此情况的方法?
我是否应该通过将写操作放入队列并在后台线程中读取队列并启用实际的写操作来提高性能,以便实际编写数据的人不会因为写入文件而受到影响?
为了处理多线程场景,计划使用带有全局名称的互斥体,是否有更好的方法?
我确定,我正在做出一些假设,并试图从中构建,如果我的某些假设是错误的,则大部分设计概念都会改变。因此,完全新的解决方案也是欢迎的(以性能为主要标准)。谢谢。