关于存储

这方面接触时间太少,略做一点记录。有一个基本的分析原则称为 CAP theorem,说的就是 consistency、availability 和 partition tolerance 三者之间的均衡,因为这三者是不能同时“完全”满足的需求。所谓 consistency 就是指所有 node 内容一致性,availability 是指收到了请求一定会给出响应,而 partition tolerance 是指即使在某些 failure(如需要的资源不可活)的情况下系统仍然能够响应。也就是说某一个方面要做到极致就会削弱别的方面。

当然这三点并不是分析的唯一视角,还有许多方面:

  • latency 响应时间需求,常见的 metric 是 top percentile,比如 99.9% 的用户的 latency 在 1000ms 以内
  • structure 是否需要存储非 primitive 类型的复杂结构
  • ratio 读写比例
  • query 请求(主要是 select)的限制,如是否需要 join 等
  • update 写入的需求,如并行写,写入后是否需要立即读
  • language 语言支持
  • time 对时间的支持,不同的数据库给的方案完全不一样
  • durability 数据丢失问题,或者写磁盘或者放内存都有丢失数据的问题
  • on-call 需要几个人来维护
  • analytics 是否提供一些统计分析支持,一般 SQL 是有 COUNT 等函数的
  • duplicates 是否支持重复的记录,key/value store 一般不支持
  • security 是否控制访问权限,有的数据库完全没有权限、用户这些概念,比如 sqlite
  • growth 随着数据的增长,如何扩张,partition 还是增加 host 还是如何
  • regionality 多地区支持
  • money 是否需要更多的资金来支持

项目伊始,选择合理的 storage 就是一个头等要务。说到底现在可供选择的数据库,除了 MySql、sqlite、Berkley DB、Postgres 等常见的数据库(其实有些是 relational db 有些是 key/value store),还有不少公司提供商用的如 Oracle,A 家的 RDS、Dynamo(facebook 发起的 cassandra 据说源自 dynamo),各有用途。

可能多数情况下,解决方案都是 MySql 或者 BDB 之类的东西,不过有了这些角度之后,我们还是能够将一些问题需求的特性看得更加清楚一些,选择起来可能不会那么没有边际。

末了说一句,理论分析为什么重要,它保证了实践里面一些基本的方向不会错,记得学物理的时候都会讲一个有意思的事情,不少人都试图寻找“永动机”(当然有两类),如果当时有人要是明白两个热力学定律,我想不大会花费了这么多精力做无用功。很多时候这些理论就是告诉我们看待问题的方法,教我们分析问题的角度。做工程的人虽然可以不去看这些理论怎么证明,但是抛弃这些理论绝对是危险的。

——————
Go now to the flock, and fetch me from thence two good kids of the goats; and I will make them savoury meat for thy father, such as he loveth:

Advertisements
关于存储

一个有关“关于存储”的想法

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s