人们未能很好地理解无模式(Schemaless)数据结构,重要的是当我们在 NoSQL 数据库中使用这些数据结构的时候如何权衡它的优缺点。在最近的一次公司活动中, Martin Fowler 就无模式数据结构 和 NoSQL 与一致性进行了讨论。
无模式数据结构:
无模式通常被视为NoSQL 数据库的一个重大优势,而Martin 认为人们未能很好地理解这一领域,同时他介绍了无模式的不同方面以及使用无模式数据结构的优缺点。
Martin 讨论的重点是即使在无模式的结构中,依然存在着模式。为了查询数据和寻找信息,你必须理解数据,从而有了一个隐式模式(Implicit Schema),例如代码中的数据定义。与此相对的是关系数据库中的模式,该模式只接受恰当的数据,这是一种显式模式(Explicit Schema)。
Martin 在结束讨论时声称,即使在某些情况下无模式非常有用,但大多数时候 “隐式模式 == 坏事(Bad Thing)”,并推荐使用显式模式从而使数据拥有一个清晰的描述。但是他同样也指出模式并非固定的存储模式;它可以在同一契约下具有更多的形式,例如一个数据访问层或 XML 模式。
NoSQL**** 与一致性
在本次演讲中 Martin 着眼于 NoSQL 数据库一致性的两个方面。
逻辑一致性涉及在一个数据库中工作时如何保持数据一致性。对于大多数 NoSQL 数据库(图形数据库除外)来说,使用聚集( aggregate )(来自领域驱动设计中的一个概念,即在同一时间存储的一个对象群集)是避免数据不一致的一个显著方式。
当描述同一数据在多个不同地点的复制一致性时,Martin 介绍了 CAP 理论。而数据一旦通过网络完成复制后,他将该问题简化为如何在一致性和可用性之间做出选择。他强调了这并非是一个技术问题,这是在一致性和可用性优先级方面的一个业务选择。
最后,Martin 以软件设计的价值和技术债务的讨论结束了该次演讲。
查看英文原文: Martin Fowler on Software Design in the 21st Century
评论