Sql server “针对性”;“AlwaysOn可用性组”;来自API的数据库

Sql server “针对性”;“AlwaysOn可用性组”;来自API的数据库,sql-server,wcf,api-design,high-availability,alwayson,Sql Server,Wcf,Api Design,High Availability,Alwayson,我正在设计一个API(一个WCF nettcp内部网web服务,而不是一个公共web API),它将针对“AlwaysOn可用性组”数据库。AlwaysOn设置为同步提交模式。有人建议我应该使用辅助副本来提高性能。有一种方法可以直接将只读数据库作为目标(客户端的连接字符串必须将应用程序的意图指定为“只读”),从而从主副本中卸载工作负载。所以我在想。。。是否真的有一种设计模式来处理这种情况 我们讨论的是一个数据库的两个连接字符串(读写和只读)。简单的规则是:API应该针对主写,针对次读,但生活并没

我正在设计一个API(一个WCF nettcp内部网web服务,而不是一个公共web API),它将针对“AlwaysOn可用性组”数据库。AlwaysOn设置为同步提交模式。有人建议我应该使用辅助副本来提高性能。有一种方法可以直接将只读数据库作为目标(客户端的连接字符串必须将应用程序的意图指定为“只读”),从而从主副本中卸载工作负载。所以我在想。。。是否真的有一种设计模式来处理这种情况

我们讨论的是一个数据库的两个连接字符串(读写和只读)。简单的规则是:API应该针对主写,针对次读,但生活并没有那个么简单

例如:如果客户端调用
DeleteItem
并在
GetAllItems
之后立即调用,即使在同步模式下,它也可能会获取所有项目,包括已删除的项目,因为只读数据库没有足够的时间更新(有时数据还不可读取,我们说的是毫秒。我测试了它)。因为API决定使用哪个连接字符串,所以它将对
DeleteItem
操作使用读写,然后对
GetAllItems
操作使用只读

所以我的问题是我应该如何处理活动的辅助数据库

  • 我应该让API决定是否使用只读数据库来卸载worload吗

  • API的客户端是否应该有明确决定的选项?比如,“嗨,API,我想要所有的项目,但是使用只读连接字符串!”

  • 是否有设计模式,如何处理这种情况


  • 感谢所有的帮助,

    这两个电话是来自同一个客户还是同一个请求的一部分?如果不是,则可以返回数据库的先前状态。如果是的话,我有点怀疑——在高可用性模式下,主服务器在次服务器确认已提交事务之前不会提交该事务。@RogerWolf他们来自同一个客户端。即使在同步模式下,顺序也是这样的:主服务器接收更新,将日志中的更改保存在辅助计算机上,返回到客户端,辅助数据库从日志中更新自身。有时我会捕捉到更新,有时不会。有时二次更新本身,但更新仍然不可读取,因此我得到删除的项目。实际上很容易复制。这两个调用,是来自同一个客户端,还是同一个请求的一部分?如果不是,则可以返回数据库的先前状态。如果是的话,我有点怀疑——在高可用性模式下,主服务器在次服务器确认已提交事务之前不会提交该事务。@RogerWolf他们来自同一个客户端。即使在同步模式下,顺序也是这样的:主服务器接收更新,将日志中的更改保存在辅助计算机上,返回到客户端,辅助数据库从日志中更新自身。有时我会捕捉到更新,有时不会。有时二次更新本身,但更新仍然不可读取,因此我得到删除的项目。实际上很容易复制。