RDBMS vs. NoSQL 合作还是竞争

数据库要解决的主要问题

不管是RDBMS还是NoSQL,在大的方面他们都属于数据库这个范畴,这个范畴之内所要面临的一些共同问题有哪些呢。下面的图是一个大致的归纳。

从图中可以看出,一个数据库系统主要解决以下几个问题:

  1. 数据的存储,即要存入哪些数据到系统中,当然在data definition这一块,有schema和no schema两种,说白了就是数据格式和数据关系的定义问题
  2. 完成了data definition,那么接下来自然要发生的事情就是将数据真正的存储到系统之中,即针对数据的各种操作crud(create, read, update and delete)
  3. 数据存储进来之后,需要挖掘数据的意义或者利用已有的数据进行统计分析,data analytic当然也可以说是data retrieval,我个人倾向于data analytic这一说法
  4. 当然数据库系统还有一个非常重要的方面即data control,哪些人可以访问,哪些人不能访问,不同的人看到的内容不仅相同

结构化和非结构化

RDBMS的一大特点就是数据是严格结构化的,存入的数据必须属于预先定义好的某一数据结构,否则就不能存入,而NoSQL则放松了这一要求。

在不同的应用场景中,两者优缺点立显,比如银行系统,要存储的数据格式一般是事先可以预估,其改变的可能比较少,再比如税务之类的。

而在电商和互联网应用中,往往意味着经常进行数据格式的更改,如果采用RDBMS,schema改变带来的开发工作则会非常巨大。

数据的一致性

在数据的一致性方面,RDBMS通过外键约束或者trigger等方式在server侧来保证数据的约束。

从达到数据一致性的时间来看RDBMS是立即一致(immediately consistency)而NoSQL则是最终一致(eventual consistency),举个应用场景,对银行账户的任何修改都必须是即时一致的,约不参容忍不一致的出现。

Scalability

如果说到数据库的动态扩容,则NoSQL明显技胜一筹。

当然MySQL的NDB cluster在动态扩容方面,其能力也还是不错的。

数据分析或数据挖掘工作

从数据分析的层面来看,RDBMS和NoSQL之间的成熟度差距是巨大的。

RDBMS为数据分析提供了一个清晰的标准,那就是SQL。利用SQL有非常明确的标准来进行规范,利用这些规范可以对数据进行各种各样的查询,而且内置了许多函数,如average,sum,count之类,让在进行报表分析时,轻松异常。

NoSQL 中的No有人解释为not only的意思,但何尝又不是No SQL二字的缩写了即there is no sql interface in the database system. 当然像MongoDB是支持Sql like的查询语句的,但NoSQL确实没有一套标准规范对数据的查询和分析。

机会在哪里

正因为NoSQL中没有一个统一进行数据分析的标准,所以现在出现了很多实时数据处理分析的框架,最火的莫过于Spark,且Spark有最强大的hadoop发行厂商Cloudera的强劲支持,大有一统NoSQL数据分析框架之势,未来的发展势头将会异常迅猛。学会使用Spark有可能会是数据分析行业的一个基本的从业要求。

总结

个人以为NoSQL不是以传统RDBMS的终结者身份出现,而是对RDBMS的一种补充来填补RDBMS所不能胜任领域的技术实现。

NoSQL在发展的初期,其实是通过放弃RDBMS的多种约束来达到其两个主要目的,一是数据的海量存储二是数据的动态可扩。至于数据分析则实现手法各异,对实时性的要求不是太高,故MapReduce之类的离线分析能满足其需求。

在相当长的时间内会MySQL还是有饭吃的,当然需要同时花相当的精力来紧跟NoSQL的技术发展。

Clojure概述

楔子

由于阅读storm源码的原因,头一次接触到Clojure。没有花特别的时间来研究clojure语法,只是在一些特殊的用法时,才查了一下clojure官网的文档,基本上能够很快的理解其意思。

在理解了storm中的基本处理流程之后,花了一段时间好好的看了几本clojure编程的书籍,书籍名称及评价分别如下。

  1. clojure programming 介绍了clojure语言的基本特点,同时对于clojure的工程实践做了比较详细的介绍
  2. programming clojure 重点全部在于介绍clojure语言的特点,对于clojure在实际中的应用介绍比较简略,个人以为在对clojure语言本身的介绍方面,这本要优于上面提到的clojure programming一书
  3. the joy of clojure  该书籍从一个比较高的层面来思考clojure为什么要设计成这样,有点类似于c++中的c++沉思录一类的

语言概述

clojure是庞大的lisp编程语言家族中的一个新成员,所以其有lisp语言的鲜明特征,一切皆函数。

clojure语言的核心主要涉及如下几个部分。

  1. 函数式编程

    1. 数据类型
    2. 条件判断语句,循环控制语句
    3. 集合 如set,list,vector, map
    4. sequence 这个是非常特殊的一部分,从传统的c或java转换到clojure编程,常常容易在这卡住
    5. 函数
      1. 变量声明
      2. 集合解构
    6. 宏 (特色所在)
  2. 并发编程 (concurrent programming)
    1. STM
  3. 面向对象 clojure吸收并借鉴了object-oriented的编程语言的一些优点,
    1. 函数重载 defmulti
    2. 接口 defprotocol 解决is-a的问题

练习

clojure的语法非常简洁优雅,花不了半天的时间就能大体知道个大概,但要想彻底的掌握还是需要大量的练习才行。

哪些题目值得花时间,哪些不值一提,这个已经有人想到了,并搞了个很好的网站。http://www.4clojure.com 到该网站注册一个用户名,总共150道题,难度由浅入深,是不可多得的学习资源。

clojure中的语法糖不是特别多,但想一个不落的记处还是有点累,为此完全可以将clojure cheatsheet放置在办公桌最显眼的地方,不多就两张A4张。http://clojure.org/cheatsheet

RDBMS vs. NoSQL Clojure概述相关推荐

  1. NoSQL数据库概述

    一. 数据库概述 存储和管理数据作为计算机应用的重要基础,其发展经历了三个阶段:手工管理.文件管理和数据库管理.使用数据库来管理数据,使得大型计算机的广泛应用成为可能.数据库技术历经半个多世纪的发展, ...

  2. 【周阳-Redis】【01】NoSql入门概述

    持续学习&持续更新中- 守破离 [周阳-Redis][01] NoSQL引入 1.为什么用NoSQL 2.NoSQL是什么 3.NoSQL特点 3V + 3高 1.大数据时代的3V 2.互联网 ...

  3. 金融系统 mysql,mysql - 适用于CRM,CMS和其他金融系统的RDBMS与NoSQL [已结束]

    我已经在互联网上阅读了整个SQL和NoSQL的内容(花了几天时间,所以我有权这样称呼它:),但我仍然觉得我离决定我们的产品将要使用的平台还很远. 我们即将开始设计一套新的产品,主要适合CRM/CMS类 ...

  4. NoSQL, Clojure

    NoSQL ACID 在传统数据库系统中,事务具有ACID属性(Jim Gray在<事务处理:概念与技术>中对事务进行了详尽的讨论). (1)原子性(Atomicity):事务是一个原子操 ...

  5. RDBMS vs NoSQL

    RDBMS - 高度组织化结构化数据 - 结构化查询语言(SQL) (SQL) - 数据和关系都存储在单独的表中. - 数据操纵语言,数据定义语言 - 严格的一致性 - 基础事务 NoSQL - 代表 ...

  6. NoSQL入门第一天——NoSQL入门与基本概述

    一.课程大纲 二.入门概述 1.为什么用NoSQL 单机MySQL的年代: 一个网站的访问量一般都不大,用单个数据库完全可以轻松应付. 我们来看看数据存储的瓶颈是什么? 1.数据量的总大小 一个机器放 ...

  7. NoSql入门和概述

    NoSql入门和概述 入门概述 1 互联网时代背景下大机遇,为什么用nosql 1. 单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付. 在那个时候,更多 ...

  8. Java猿社区—Redis一篇系列—第一章、NoSql入门和概述

    欢迎关注作者博客 简书传送门 专栏传送门:Redis深入学习之路 文章目录 前言 1.NoSql入门和概述 1.1.入门概述 1.1.1.为什么用NoSql? 单机MySQL的美好年代 Memcach ...

  9. 厚积薄发打卡Day55 :[狂神]Redis详细教程(上)<从Nosql 概述到WSL安装Redis踩坑记录>

    视频教程:[狂神说Java]Redis最新超详细版教程通俗易懂 Nosql概述 时代背景: 1.单机数据库时代 90年代:一个基本的网站访问量一般不会太大,单个数据库完全足够! 那个时候,更多的去使用 ...

最新文章

  1. R可视化在回归曲线中添加回归方程式
  2. PHP中对象的深拷贝与浅拷贝
  3. cs4 php,php dreamweaver cs4
  4. 音视频技术开发周刊 58期
  5. java常用面板_Java 常用面板
  6. oracle异机复制,oracle冷备份恢复和oracle异机恢复使用方法
  7. 查看AWS中Identity and Access Management(IAM)的Access Key和Secret Access
  8. 基于java的铁路售票系统(火车票预订)ssh框架
  9. php超小免杀大马_php大马免杀技巧 | bypass waf
  10. 100套法律合同范本,赶快收藏以后签合同心里就有谱了
  11. STC15单片机实战项目 - 原理图设计
  12. 小浩之利用Java完成一个抽奖小程序
  13. 第二期:关于大数据相关的问答汇总,关注持续更新中哦~
  14. Java数字转大写金额格式小程序代码
  15. 竞赛 | 中国健康信息处理大会(CHIP2022)发布评测任务
  16. 泰坦以太(以太流说) titan_ysl 2020.01.27
  17. 2021最火爆带字微信朋友圈背景
  18. node.js毕业设计安卓英语学习app(程序+APP+LW)
  19. java求质因数算法
  20. 【前端实例代码】霓虹灯按钮动画效果悬停2| html CSS特效 惊艳| 前端开发 网页制作 基础入门教程

热门文章

  1. Qt:Qt实现Winsock网络编程—非阻塞模式下的简单远程控制的开发(WSAAsyncSelect)
  2. 汇编程序—将一个全是字母,以0结尾的字符串,转化为大写
  3. 利用scrapy爬取文件后并基于管道化的持久化存储
  4. 洛谷 P1064 金明的预算方案【有依赖的分组背包】
  5. Hello, Android 快速入门
  6. dfs序 + RMQ = LCA
  7. MySQL使用技巧收集,持续更新中......
  8. NHibernate学习导航
  9. r语言折线图_R语言做多变量可视化分析?
  10. 我都服了,为啥上游接口返回的汉字总是乱码?