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