Service Fabric -(达到 MaxReplicationMessageSize)可靠字典中的大量数据

Service Fabric - (reaching MaxReplicationMessageSize) Huge amount of data in a reliable dictionary

编辑 问题总结:

我的几个问题总结如下:如何将大量数据存储到可靠的字典中?

TL DR;

显然,我遗漏了一些东西...

System.Fabric.FabricReplicationOperationTooLargeException: The replication operation is larger than the configured limit - MaxReplicationMessageSize ---> System.Runtime.InteropServices.COMException

问题:

对于这方面的任何帮助 - 非常感谢!

问题是您试图将大量数据添加到单个字典记录中。当 Service Fabric 尝试将该数据复制到服务的其他副本时,它遇到了复制器的配额 MaxReplicationMessageSize,它确实默认为 50MB(已记录 here)。

您可以通过指定 ReliableStateManagerConfiguration:

来增加配额
internal sealed class Stateful1 : StatefulService
{
    public Stateful1(StatefulServiceContext context)
        : base(context, new ReliableStateManager(context,
            new ReliableStateManagerConfiguration(new ReliableStateManagerReplicatorSettings
            {
                MaxReplicationMessageSize = 1024 * 1024 * 200
            }))) { }
}

但我强烈建议您改变存储数据的方式。当前的方法不会很好地扩展,也不是可靠集合的使用方式。

相反,您应该将每个 HospitalData 存储在单独的字典项中。然后您可以查询字典中的项目(有关如何使用 LINQ 的详细信息,请参阅 )。您将不需要更改上述配额。

PS - 您不一定非要对 500MB 的数据使用分区。但是关于你的问题——即使你不能从查询中导出键,你也可以使用分区,只需查询所有分区然后组合数据。