作者回复: 首先,选型是重要的决策,这里面考虑的,不仅仅是技术一个因素。人才储备,技术栈简洁性,迁移成本等都会是考量。但是我就技术层面回复一下你 关于第一个案例,你要关注没有注意到的两个点 1) 子文档模型的灵活性。里面不同的保单子文档,可以有不相同的结构。这种异构建模,在关系型库里是比较困难的,你在设计的时候,难以对几十个不同系统的模型进行统一抽象,特别是没有哪个架构师对所有系统都熟悉,都是需要各个系统各自出一个人来参与设计的时候。 2) 假设一个顶级的架构师可能真的可以用子表设计出来,这样复杂的系统,一个保单表少说都有可能是几十上百张表的节奏。想象下开发者的体验?他们能很容易明白这么复杂的数据关系?想象下多表关联下数亿数十亿的性能? 第二个案例: 基本定位: - Redis 的基本定位一个缓存 - MongoDB的基本定位是一个OLTP数据库 性能: - Redis 强在读 - MongoDB 在给够内存的情况下,可以和Redis不相上下,特别是简单缓存读取 - 如果Redis 采取和MongoDB接近的持久化策略,它的性能会一落千丈,都比不过RDMBS(根据它自己的官网) 功能 - Mongo的优势: 子文档更新能力,数组更新能力 - Mongo的优势:聚合分析Aggregation能力 集群能力 - Redis 在集群模式下无法提供强一致(来自官网) - MongoDB在无论是在副本集还是分片集都能提供强一致 - Redis 集群模式下不支持Multiple Key 操作、事务操作 有人会说如果是只读场景,更新能力可以忽略。但是他们忽略的是,缓存的数据也是需要实时去更新的。如果你只能更新整个文档,以及对更新的一致性保障不好,这些也会是技术选型中需要考虑到的重要因素。