sql - Azure SQL 中的行更改通知
问题描述
我们希望有以下能力,用户可以对特定表进行修改(创建或更新行),而用户可以请求特定更改后所做的所有更改,按顺序接收更改,因此可以使用最后一次更改用于后续调用。
基本上,我们想通过基于拉的服务端点来模拟 MessageQueue 的更改通知,而不是消息推送。
我们还有一个技术要求,即使用 Azure SQL for DB,以及一个网络服务器来处理用户请求(REST API)。到目前为止,我们是这样定义问题的:
- 每行都有一个 ChangeID 属性,该属性是全局单调递增的,只要对行进行更改(插入、更新)
- 为了确保不断增加的属性,我们将使用 SEQUENCE 来生成 ChangeID
- 在使用的 ChangeID 中没有间隙不是必需的
- 每个更新和插入都发生在事务中,同时更改 ChangeID 属性
一般用法是重读(90% 读,10% 写)。我们希望有一个可扩展且具有良好性能的解决方案:尽可能并行的读/写并发模型,同时我们也期望事务回滚。
这里可以使用 SEQUENCE 吗?序列不是事务的一部分
我们想要避免的最糟糕的问题是客户端没有收到有关更改的通知。例如:
- T0:客户端 GET 更改(来自:5):
- 收到 ChangeID:6、8、12
- 客户端将其 ChangeCursor 更新为 12
- T1:服务器完成更新,表更新为 ChangeID:9、15、16
- T2:客户端 GET 更改(来自:12):
- 接收 ChangeID:15、16
- 错误,永远不会通知客户 ChangeID 9
解决方案
推荐阅读
- angular - 在 Angular8 中仅向一个组件添加外部自举链接
- javascript - 使用纯 JavaScript 从 Angular Elements Web 组件读取数据
- reactjs - React useContext 重新渲染组件
- html - 已看到开始标记主体,但已打开相同类型的元素
- mongodb - 如何在 mongoDB 上定义外键
- java - 如何在登录时获取 csrf 令牌?
- android - 当用户返回应用程序(从后台移动到前台)android 时启动 pin 锁定活动
- python - 创建python列表并在输入字段中显示列表项
- android - 您如何知道/查找 androidx.appcompat 可用的主题和样式?
- java - 向spring boot发送put请求时Android改造错误?