互联网数据量大的业务场景,常常: • 使用水平切分来降低单库数据量 • 使用数据冗余的反范式设计来满足不同维度的查询需求 • 使用服务同步双写法能够很容易的实现数据冗余 • 为了降低时延,可以优化为服务异步双写法 • 为了屏蔽“冗余数据”对服务带来的复杂性,可以优化为线下异步双写法 在大规模的互联网业务环境中,数据量的增长经常超出单个数据库的承载能力,此时需要采取一些策略来管理和优化数据存储。本文主要探讨了针对这一问题的三种数据冗余方案:服务同步双写、服务异步双写和线下异步双写。 冗余数据的引入是为了应对水平切分后带来的查询复杂性。水平切分通过partition key将数据分散到多个库中,以减少单库的压力,但同时也可能导致非partition key上的查询需要跨库操作,增加延迟。例如,在订单业务中,买家和卖家都可能需要查询订单,如果仅按一方的id进行分库,另一方的查询就会变得困难。为了解决这个问题,可以创建冗余数据表,分别满足买家和卖家的查询需求。 服务同步双写是一种简单直接的方法,业务服务在插入主表后立即插入冗余表,确保数据一致性较高。然而,这种方法会增加请求处理时间,而且在服务异常时可能导致数据不一致。 服务异步双写通过引入消息队列,将冗余数据的写入工作交给后台服务或消息驱动的数据同步中心,降低了请求处理时间,但增加了系统的复杂性,并存在短暂的数据不一致窗口。如果消息丢失,冗余数据可能会出现不一致。 线下异步双写进一步将数据双写任务分离到离线服务或定时任务中,使得业务服务与冗余数据写入完全解耦,降低了延迟且简化了业务逻辑。然而,这种方式同样依赖于后台任务的可靠性,可能存在数据不一致的风险。 选择哪种冗余数据策略取决于业务需求、数据一致性要求和系统复杂性的接受程度。服务同步双写适合对数据一致性要求高且系统处理时间可接受的情况;服务异步双写适用于对延迟敏感,能接受短暂不一致的场景;而线下异步双写则适用于追求服务解耦,愿意承担一定数据延迟风险的业务。在实际应用中,应根据具体业务特点和运维能力灵活选择和调整这些策略。
- 粉丝: 10
- 资源: 202
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助