Microsoft Orleans 中的数据持久性

Data Persistence in Microsoft Orleans

我是 Microsoft Orleans 的新手,在阅读文档时我发现了这个:

... Grain persistence uses an extensible plugin model so that storage providers for any database can be used. This persistence model is designed for simplicity and is not intended to cover all data access patterns. Grains can also access databases directly, without using the grain persistence model. here

但在文档的其余部分,仅描述了使用存储提供程序进行 grain 持久化的方法。但是对于这些提供者,我仍然想知道如何像在关系数据库中那样执行复杂的请求(使用 JOIN、GROUP BY、ORDER BY 等)。

所以我担心的是:

使用直接访问关系数据库实现 Grain 持久化的优点和缺点是什么?

Orleans 对您如何存储数据没有固执己见:做适合您的应用程序的事情。在回答您的问题时,以下是采用手动方式并直接与数据库交互而不是使用开箱即用的持久性模型的一些优点和缺点。

优点:

  • 精确控制访问数据的时间和方式,包括数据的序列化方式
  • 能够对您的数据执行查询

缺点:

  • 自动化程度较低 - 您需要负责确保您的 grain 读取它需要的数据(grain 持久性在激活期间执行读取)
  • 您负责管理连接池、存储调用等
  • 没有自动并发控制 - 由开发人员来防止并发访问导致数据被错误覆盖。 grain 持久性提供程序通常使用 ETag 检查来确保一致性,因此您可以在手动执行此操作时实施类似的方案。

根据您的需要,这些优势可能非常引人注目。

您还可以采用混合方法并编写一个自定义存储提供程序,它可以让您对数据的存储方式进行一些控制,并且因为您可以控制它,所以您可以 直接访问数据库以执行查询。