我正在使用Akka.net构建一个解决方案,该解决方案将允许查询多个标记的持久性查询。我认为这样做的方法之一是简单地为每个标记物化一个流,然后使用akka.net流抽象将流与顺序合并。
但是,Getakka.net (https://getakka.net/articles/persistence/persistence-query.html#eventsbytag-and-currenteventsbytag)关于日志可能提供的预定义查询的指南表明,获取多个PersistenceIds的查询没有排序保证。我想知道,这是因为akka.net leaves会阅读日志实现到单个插件,还是排序和akka.net流本身就有问题呢?
如果我使用基于SQL的事件存储,它看起来就像基本的抽象QueryExecutor允许创建一个有序流:
ByTagSql =
$@"
SELECT {allEventColumnNames}, e.{Configuration.OrderingColumnName} as Ordering
FROM {Configuration.FullJournalTableName} e
WHERE e.{Configuration.OrderingColumnName} > @Ordering AND e.
{Configuration.TagsColumnName} LIKE @Tag
***ORDER BY {Configuration.OrderingColumnName} ASC";***谁能确认"SelectByTag“查询订单保证的缺失是否与底层的akka.net流媒体平台有关,还是每个日志插件是由akka.net团队以外的人独立创建的(或者其他我没有想到的东西)?
谢谢!!
发布于 2022-07-29 18:20:46
,我想知道这是否是因为akka.net leaves阅读了日志实现,直到单个插件,还是存在着排序和akka.net流的内在问题?
对于大多数日志实现,我们都非常努力地通过使用单独的“排序”列来确保在所有持久性in中都保留全局顺序,这通常是在Offset in Akka.Persistence.Query中使用的。但是,我们不能保证DatabaseWeHaveNeverHeardOf在内部产生读/写的方式上必然会遵守这一点。
这意味着,Akka.Persistence.Query并不在其C#代码中强制执行排序保证--而是依赖数据库来完成。有些人在这方面比其他人更加一致。
能否确认"SelectByTag“查询订单保证的缺失是否与底层的akka.net流媒体平台有关,还是每个日志插件都是由akka.net团队以外的人独立创建的(或者其他我没有想到的东西)?
如果大多数SelectByTag查询是由Akka.NET团队开发的,并且在底层数据库中支持这些查询,那么大多数查询都会被排序。Akka.Persistence.Azure / Akka.Persistence.*SQL / Akka.Persistence.Linq2Db都是保存orering的好例子。
https://stackoverflow.com/questions/73100071
复制相似问题