代码工匠

Walking The Long Road.

没有银弹-谈谈软件设计的几个矛盾(二)

1. 关联与冗余

数据库第三范式种约定,数据没有传递依赖性,但是在互联网应用中,会存在非常多冗余的情况。冗余的目的主要有几个:

  1. 性能

    将所有需要的数据冗余到一起可以提高性能。

  1. 解耦

    一般来说,互联网行业一般都希望一个应用的逻辑尽可能简单,依赖方尽可能的少。冗余数据可以将多个数据源的数据整合到一个数据源,那么应用本身就无需关心这部分逻辑了。

  2. 允许变更

    如果系统A使用了B的数据之后,又有自己独立变更的需要,那么冗余就必不可少了。

其实从某种意义上,我觉得2比1更重要。而3则是根据需要来决定。从优先级来说是3>2>1。

冗余的坏处有几个:

  1. 有同步的成本

    如果冗余的是一个会发生更新的数据,那么数据同步的成本就不得不考虑了。

  2. 增加整体复杂度

    其实这个是基于1的基础上的。如果只是冗余了数据,后续无需同步,其实系统会相对简单。但是如果有同步的需求,那么可能会有很多个同步的逻辑甚至系统,最后会让整个系统变得复杂和不可控。

其实第1条的同步机制总归是可以实现的,但是第2条的复杂度才是最需要考虑的地方。

Add a comment