1.预定义查询
这些查询的具体适用场合和条件,实时流是什么
PersistenceIdsQuery和CurrentPersistenceIdsQuery
PersistenceIds旨在允许用户订阅系统中所有持久性id的流。默认情况下,这个流应该被认为是“实时”流,这意味着期刊在进入系统时应该不断发布新的持久性id:
CurrentPersistenceIdsQuery:不需要实时流,存储事件结束时的相应查询
EventsByPersistenceIdQuery and CurrentEventsByPersistenceIdQuery
EventsByPersistenceIdQuery:重播PersistentActor的查询,但由于它是一个流,故可使其保持活动状态,并监视由给定的persistenceId标识的持久性actor的持续附加传入事件。
CurrentEventsByPersistenceIdQuery:不需要实时流
EventsByTag and CurrentEventsByTag
eventsByTag允许查询事件,而不管它们与哪个persistenceId相关联。该查询很难在某些journal中实施,或者可能需要额外准备使用的数据存储库才能有效执行。此查询的目标是允许查询所有使用特定标签“标记”的事件。这包括用例来查询聚合根类型的所有域事件。
CurrentEventsByTag:不需要实时流(用于查询给定标签标记的查询事件)
journal可以选择对事件进行严格排序,然后应该明确地记录它们提供的订单保证类型 - 例如“通过时间戳升序排序,与persistenceId无关”在关系数据库中很容易实现,但可能很难 在普通键值数据存储上高效实施。
查询物化值
journal能够通过公开Materialized值来提供与查询相关的附加信息,这是Streams的一个特性,允许在实现物流时公开其他值。
更高级的查询日志可以使用这种技术来公开有关物化流特征的信息,例如,如果它是有限的或无限的,严格排序或根本没有排序。物化值类型被定义为返回的Source的第二个类型参数,它允许日记向用户提供他们专用的查询对象,
Resumable projections
可恢复预测是怎么存储的,以及怎么使用
可恢复预测是通过存储处理事件的序列号(或者偏移量),然后在下次投影时使用它吗
ReadJournalProvider类必须有一个具有以下特征之一的构造函数:
// 需要这些构造条件不理解
(1)带有ExtendedActorSystem参数的构造函数,com.typesafe.config.Config参数和配置路径的String参数
(2)带有ExtendedActorSystem参数的构造函数以及com.typesafe.config.Config参数
具有一个ExtendedActorSystem参数的构造函数
(3)没有参数的构造函数
(4)actor系统配置的插件部分将在config构造函数参数中传递。插件的配置路径通过String参数传递。
不理解:如果底层数据存储仅支持在到达 “result set”(“结果集”)末尾时完成的查询,则日记必须在一段时间后提交新查询,以便支持“无限”事件流,其中包含初始查询存储后存储的事件完成。建议插件使用名为refresh-interval的配置属性来定义这样的刷新间隔。
扩展
怎么解决节点奔溃问题?
在事件数量非常大的用例中,每个事件所需的工作量很高,或者弹性很重要,因此如果节点崩溃,持久性查询将在新节点上快速启动,并且可以恢复操作。集群分片与事件标记非常适合集群上的分片事件。
CQRS架构简介
关于CQRS(Command Query Responsibility Segration)架构,大家应该不会陌生了。简单的说,就是一个系统,从架构上把它拆分为两部分:命令处理(写请求)+查询处理(读请求)。然后读写两边可以用不同的架构实现,以实现CQ两端(即Command Side,简称C端;Query Side,简称Q端)的分别优化。CQRS作为一个读写分离思想的架构,在数据存储方面,没有做过多的约束。所以,我觉得CQRS可以有不同层次的实现,比如:
  1. CQ两端数据库共享,CQ两端只是在上层代码上分离;这种做法,带来的好处是可以让我们的代码读写分离,更好维护,且没有CQ两端的数据一致性问题,因为是共享一个数据库的。我个人认为,这种架构很实用,既兼顾了数据的强一致性,又能让代码好维护。
  2. CQ两端数据库和上层代码都分离,然后Q的数据由C端同步过来,一般是通过Domain Event进行同步。同步方式有两种,同步或异步,如果需要CQ两端的强一致性,则需要用同步;如果能接受CQ两端数据的最终一致性,则可以使用异步。采用这种方式的架构,个人觉得,C端应该采用Event Sourcing(简称ES)模式才有意义,否则就是自己给自己找麻烦。因为这样做你会发现会出现冗余数据,同样的数据,在C端的db中有,而在Q端的db中也有。和上面第一种做法相比,我想不到什么好处。而采用ES,则所有C端的最新数据全部用Domain Event表达即可;而要查询显示用的数据,则从Q端的ReadDB(关系型数据库)查询即可。

Persistence Query相关推荐

  1. javax.persistence.Query和javax.persistence.EntityManager的分页查询使用

    javax.persistence.Query和javax.persistence.EntityManager都是JAP发布的接口,是用于对象持久化API. Query接口常见用法: getResul ...

  2. setResulttransformer过期NativeQueryImpl,cannot be cast to org.hibernate.query.internal.NativeQueryImpl

    JPA的setResultTransformer方法过期替换为NativeQueryImpl @SuppressWarnings("unchecked")@Overridepubl ...

  3. akka mysql_Akka系列(七):Actor持久化之Akka persistence

    这次把这部分内容提到现在写,是因为这段时间开发的项目刚好在这一块遇到了一些难点,所以准备把经验分享给大家,我们在使用Akka时,会经常遇到一些存储Actor内部状态的场景,在系统正常运行的情况下,我们 ...

  4. jpql和query接口

    •JPQL语言,即 Java Persistence Query Language 的简称.JPQL是一种和SQL非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的SQL查询,从而 ...

  5. Spring Hibernate JPA 联表查询 复杂查询

    (转自:http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html) 今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的 ...

  6. JPA 复杂查询 - Querydsl

     添加依赖 <!--query dsl --> <dependency> <groupId>com.querydsl</groupId> <art ...

  7. jpa写原生sql-EntityManager

    废话不多说 package com.meeno.trainsys.meeting.service;import com.google.common.collect.Lists; import com. ...

  8. JBOSS+EJB3之Entity 开发实例

    我用的是 mysql 数据库, EJB3.0 相对于2.0 变化蛮大的,真的是迫于 Spring+Hibernate 的逼式,ejb 3.0 已经出现几年了,自从她轻装上阵,也不知道现在的应用情况如何 ...

  9. 分页功能 (包含增删改查)工具类

    首先是接口 DAO package cn.itcast.service.base; import java.io.Serializable; import java.util.LinkedHashMa ...

最新文章

  1. windows7 下的日期没有internet时间的选项卡
  2. [Redux-Observable Unit Testing] Mocking an ajax request when testing epics
  3. MASM5.0汇编环境安装
  4. 计算机软件与程序没有任何关系,提示“该文件没有与之关联的程序来执行该操作”怎么解决?...
  5. 250相当于什么显卡_2K(4K)144hz显示器需要什么显卡来带? 本文将给你答案。
  6. 【深度学习】深度学习三十问!一位算法工程师经历30+场CV面试后总结的常见问题合集(含答案)...
  7. Subversion 1.5 安装配置指南
  8. 关于分区索引与全局索引性能比较的示例
  9. CF 1642 F. Two Arrays 随机 + sosdp
  10. 论文浅尝 | Distant Supervision for Relation Extraction
  11. SpringBoot2.0之四 简单整合MyBatis
  12. CVPR 2020文本图像检测与识别论文/代码
  13. YUV420及YUV422格式的采集存储方式
  14. 庖丁解牛之-Android平台RTSP|RTMP播放器设计
  15. Photoshop插件--创建暗调通道--脚本开发--PS插件
  16. 【转载】Excel中批量填充公式有5个方法
  17. Flea CodeForces - 32C (思维)
  18. gitlab流水线自动部署流程
  19. IDEA常用配置和常用插件及常用快捷键
  20. 电信网通的IP地址分布

热门文章

  1. 计算机中int函数什么意思,excel中int是什么意思
  2. 小丸子学Hadoop系列之——部署Hbase集群
  3. 2020-9-20 周报
  4. Erebus 0.5 发布,2D 实时角色扮演游戏
  5. 笔记本RTX3060比2060性能高多少 RTX3060和2060笔记本差距多大
  6. ByteBuffer和String互转
  7. 海航重组当当,航机飘上书香
  8. opencv-python读取摄像头视频流保存为视频
  9. 半双工通信和全双工通信的区别
  10. numpy多维数组获取指定矩形区域