Orleans - 如何使用 AdoNetStorageProvider 通过租户实现存储分片
Orleans - how to implement storage sharding by Tenant with AdoNetStorageProvider
我正在尝试了解如何使用内置的 AdoNetStorageProvider 按租户实施存储分片。
我们正在计划 SQL 本地服务器。
例如:
- 属于租户 1 的 Grain 应该坚持到分片 A
- 属于租户 2 的 Grain 应该保留到分片 B
- 属于租户 3 的 Grain 应该坚持到分片 A
我们的分片函数将指示使用哪个分片。
为此,分片函数基于粒度扩展密钥从数据库中获取其粒度分片。 (所以不应该都在配置文件中,因为分片的数量很少变化,但新租户经常添加)。
如果这可以通过一些内置框架来实现,那就更好了。
根据 https://dotnet.github.io/orleans/Documentation/Core-Features/Grain-Persistence.html?q=sharded#shardedstorageprovider
shardedstorageprovider 将根据散列函数将数据平均分布(分片)到各个分片中。这并没有达到这个目的。碎片可能(或可能不)是地理定位的。
github 中的分片示例指的是 Azure 上的弹性 SQL 客户端,据我所知,它不适用于 SQL 服务器。
我知道我们可以编写自己的存储提供程序。但只要有可能,我们都会尽量保持核心。
根据 Gitter 项目的回答,
没有内置的按租户分片的能力。
实现这个的方法是从https://github.com/dotnet/orleans/blob/master/src/OrleansProviders/Storage/ShardedStorageProvider.cs派生
并覆盖 HashFunction 方法。
感谢@SebastianStehle
我正在尝试了解如何使用内置的 AdoNetStorageProvider 按租户实施存储分片。 我们正在计划 SQL 本地服务器。
例如:
- 属于租户 1 的 Grain 应该坚持到分片 A
- 属于租户 2 的 Grain 应该保留到分片 B
- 属于租户 3 的 Grain 应该坚持到分片 A
我们的分片函数将指示使用哪个分片。 为此,分片函数基于粒度扩展密钥从数据库中获取其粒度分片。 (所以不应该都在配置文件中,因为分片的数量很少变化,但新租户经常添加)。 如果这可以通过一些内置框架来实现,那就更好了。
根据 https://dotnet.github.io/orleans/Documentation/Core-Features/Grain-Persistence.html?q=sharded#shardedstorageprovider shardedstorageprovider 将根据散列函数将数据平均分布(分片)到各个分片中。这并没有达到这个目的。碎片可能(或可能不)是地理定位的。
github 中的分片示例指的是 Azure 上的弹性 SQL 客户端,据我所知,它不适用于 SQL 服务器。
我知道我们可以编写自己的存储提供程序。但只要有可能,我们都会尽量保持核心。
根据 Gitter 项目的回答, 没有内置的按租户分片的能力。
实现这个的方法是从https://github.com/dotnet/orleans/blob/master/src/OrleansProviders/Storage/ShardedStorageProvider.cs派生 并覆盖 HashFunction 方法。 感谢@SebastianStehle