NoSQL 和 SQL 的选用

专栏 | 九章算法
网址 | www.jiuzhang.com程序员

NoSQL 有分不少种,其中key-value NoSQL (Redis, MemcacheD, etc) 的选用相对比较清楚些,大可能是当后端Data storage的cache层来用。这篇主要想请教Column Family NoSQL (e.g. Cassandra, Hbase) 和SQL之间的选用。其中包含一些我的的理解,如有错误的地方烦请不吝指教!面试

我理解上,Column Family NoSQL的schema和SQL schema大多可以互相做逻辑转换。也就是说,给一个DB,里面有不少table,table里有不少column,而后跟你说我query的型态会长怎样 (等同告诉你app layer的join要怎么作)。咱们多半能把这些DB schema转成CF NoSQL的schema。反之亦然。算法

对single box(单一机器)来讲,CF NoSQL能承受的qps比SQL要高;不过在multiple machines的状况下,可对SQL去做sharding & replicas来增长其performace和availability/reliability。这边甚至可混用cosistent hashing的架构来做SQL sharding/replication。也就是说后端

在多台机器可用的环境下
CF NoSQL 和 SQL 的效能
是能够做到差很少的
数组

事实上,Facebook 开发了Cassandra,但内部用的仍是用SQL 居多Lol。回到问题, 关于选用CF NoSQL vs SQL, 这边分三种cases考虑。微信

1.Data相关性极低架构

Data很是不relational (require no join or few joins),这时用SQL 就有点浪费,可能会有没必要要的overhead。app

2.Data相关性极高ui

这时用CF NoSQL可能要处理大量的de-normalization,虽然disk便宜,但duplicated data太多的话可能也会爆容量。并且update时要处理de-norm data间consistency的问题。
e.g. 一个data可能属于(row_key_A, column_key_A)同时也属于(row_key_B, column_key_B),这样更新这data时就要同时更新这两个row。感受这种状况选用SQL会较佳。设计

3.Data相关性通常

去除以上两个极端cases,一般data是介于中间。这时候感受

用 CF NoSQL 和 SQL是差很少的

用SQL的话,developer要本身处理sharding/replication。不过相对而言SQL expert的数量远大于Cassandra/Hbase expert, SQL communities也相对成熟许多。

这样看来,面试时若面临到CF NoSQL和SQL的选用时,感受仍是选SQL比较安稳点。
用CF NoSQL感受会被质疑的点比较多,并且其schema有时不是这么好设计。

推荐阅读



欢迎关注个人微信公众号:九章算法(ninechapter)。
精英程序员交流社区,按期发布面试题、面试技巧、求职信息等

九章算法,IT教育领域的深耕者
相关文章
相关标签/搜索