NoSQL和SQL的选用

Posted 九章算法

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NoSQL和SQL的选用相关的知识,希望对你有一定的参考价值。

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。反之亦然。


NoSQL和SQL的选用


对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。


2
Data相关性极高


这时用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比较安稳点


NoSQL和SQL的选用


用CF NoSQL感觉会被质疑的点比较多,而且其schema有时不是这么好设计。

想进FLAG实习?九章帮你系统讲解面试算法,解决面试时常见算法问题


以下课程,正在报名中!

《九章算法班》

《算法强化班》

《Java入门与基础算法班》

《Big Data 项目实战班》

第一节免费试听!!

报名网址http://t.cn/RAC7Era, 或猛戳“阅读原文”

以上是关于NoSQL和SQL的选用的主要内容,如果未能解决你的问题,请参考以下文章

Sql Or NoSql,看完这一篇你就都懂了

SQL or NoSQL?从存储的架构演进看数据库选型

SQL or NoSQL? 从存储的架构演进看数据库选型

NoSQL 数据库:何时使用 NoSQL 与 SQL?

《NoSQL精粹》读书笔记

NOSQL 和SQL区别及使用场景