知识卡片
Document Validator:把数据校验能力从应用层部分收回存储层
内容
MongoDB早期主打的”schema free”(无模式约束)曾是它相对关系数据库的一大卖点,但完全不约束数据结构的代价是,字段类型不一致、结构混乱的”脏数据”很容易混进集合里,而校验数据合法性的责任被迫全部转移给应用程序端来承担,这让原本图方便的无模式设计,实际上把复杂度和风险转嫁给了每一个写数据的调用方。3.2版本引入的Document Validator提供了一种折中方案:允许在文档级别声明约束条件(如用$type限制字段类型),效果类似关系数据库里的check约束,并且可以通过validationAction、validationLevel两个参数灵活控制违反约束时的具体行为(是拒绝写入还是仅告警)。这说明”完全无模式”和”严格模式”并不是非此即彼的两个极端,一个成熟的存储系统往往会在发展过程中补上一层可选的、可调节严格程度的校验能力,把数据正确性的责任从”完全依赖应用层自律”部分收回到存储层本身。
参考来源
- 位置:《高可用架构(第1卷)》第6章《大数据与数据库》"6.11 MongoDB2015回顾:全新里程碑式的WiredTiger存储引擎"节,"6.11.4 其他新特性介绍","3.Document Validator"(源文件:_epub-src/OEBPS/Text/Chapter6_11_5.xhtml)
- 结论依据:原文说明"MongoDB的schema free是MongoDB刚推出时的一个卖点……不一致的schema、奇形怪状的数据等,因此data validaton的事情被推送到程序端来负责,使得这部分变得复杂。所以在3.2版本中,MongoDB推出了Validator。通过$type(限制字段类型)……这个特性有些类似于RDBMS中的check constraint",直接支撑本卡片结论。
- 原始内容:MongoDB的schema free是MongoDB刚推出时的一个卖点,不过估计已经被吐槽过无数次了,不一致的schema、奇形怪状的数据等,因此data validaton的事情被推送到程序端来负责……这个特性有些类似于RDBMS中的check constraint。