线程安全:多个线程之间的切换不会导致该接口的执行结果存在二义性。
分布式一致性:数据的多份副本,当对一个副本进行修改时,其它的副本的值也要与其保持一致。
数据库一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。保证数据库一致性是指当事务完成时,必须使所有数据都具有一致的状态。
线程不完全则分布式一致性是绝对无法保证的。线程安全,也不一定可以保证分布式一致性。所以分布式一致性是一种更复杂的要求。
线程不安全则数据库的一致性绝对无法保证。数据库的一致性其实就是数据库本身的线程安全性吗?
隔离级别:
串行:没有线程安全问题,数据变更依赖的状态是事务开始的状态。
RR: 并发执行,存在线程安全问题,数据变更依赖的状态是事务开始的状态,不会受到其他事务的影响。但是对新增数据无能为力。
RC: 并发执行,存在线程安全问题,数据变更依赖的状态是会受其他事务影响的。
Read not commit: 并发执行,存在线程安全问题,数据变更依赖的状态是会受其他事务影响的。
所以,事务最多只是提供了线程安全,一定的数据隔离,还有原子性。这些无法保证可以达到分布式的数据一致性。
在考虑应用的数据一致性的时候,需要额外考虑达到目标的手段。
分布式一致性的挑战:
1. 分布性:数据/机器的空间分布。
2. 对等性:没有主从之分
3.并发性:线程安全
4.缺乏全局时钟:无法根据统一的时间标准来判断哪个操作先发生。
5.网络通信的不稳定性。
分布式一致性是非常复杂的,解决方案根据不同的场景往往也不一样:
1.队列,把key打散,横向扩容。单个队列顺序消费
2.全量数据的append写入+timestamp
3.分布式锁(redis,mysql)
4.version-id+CAS
5. mysql + 唯一键
唯一约束真的有必要在物理层做强约束吗? 单单在逻辑层的保证靠谱吗?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
2015-01-25 C++类所占内存大小计算
2015-01-25 C++中的内存对齐
2015-01-25 (I/O完成端口中的)995错误