我正在实施事件采购架构,我的聚合将在内存中包含大量记录。为了测试.NET在内存中存储大量记录的能力,我创建了一个简单的程序:
static void Main(string[] args)
{
Dictionary<string, object> dict = new Dictionary<string, object>();
int maxRecords = 100000000;
for (int i = 0; i < maxRecords; i++ )
{
dict.Add(i.ToString(), new String('A', 10));
}
Console.WriteLine("Done");
Console.ReadLine();
}
在配置文件中,我有:
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
所以我存储了1亿条记录,每条记录是10个字节(因为它可能是Unicode,所以说20条记录)。所以我在内存中存储了大约2GB的数据。然而,应用程序增长到15GB。
理想情况下,我希望将内容存储在IDictionary中。有什么办法可以减少开销吗?
如果有人参与了在内存中存储大量数据的事件采购架构,请分享您的经验以及如何构建聚合。
答案 0 :(得分:0)
这个问题的经典解决方案通常有两点:
选择正确的聚合根,因此其中哪些状态将很小。由于不允许聚合间通信,因此对于执行单一命令,您应该只为一个聚合根加载一个小状态。它可以通过数据库中的一个异步查询轻松检索
将查询侧存储在许多不同的集合中,其上的每个项目都按文档标识符隔离。因此,您的系统进程不必在内存中保留读取模型。