RDBMS vs. NoSQL & Clojure概述

简介: 由于近期手头的工作和数据库的选型相关,纠结于是否使用一款NoSQL数据库来替换已有的MySQL数据库。在这个过程中随着学习研究的深入,对于二者的异同有了一些初步的认识和想法,将这些想法暂时记录下来,权且作为进一步学习数据库领域知识的开端。

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

目录
相关文章
|
21天前
|
缓存 物联网 数据库
InfluxDB vs TDengine :2025 年了,谁家用的数据库还不能高效读缓存?
在工业互联网和物联网的大数据应用场景中,实时数据的写入和查询性能至关重要。如何快速获取最新设备状态并实时处理数据,直接影响到业务的高效运转。本文将深入分析 TDengine 和 InfluxDB 在缓存机制上的差异,帮助读者更好地理解这两款主流时序数据库在性能优化方面的优劣。
50 1
|
1月前
|
存储 缓存 NoSQL
常见的 NoSQL 数据库有哪些?
常见的 NoSQL 数据库有哪些?
50 2
|
1月前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
180 4
|
2月前
|
存储 SQL JSON
介绍一下RDBMS和NoSQL数据库之间的区别
【10月更文挑战第21天】介绍一下RDBMS和NoSQL数据库之间的区别
136 2
|
2月前
|
存储 SQL NoSQL
数据库技术深度探索:从关系型到NoSQL的演变
【10月更文挑战第21天】数据库技术深度探索:从关系型到NoSQL的演变
89 1
|
2月前
|
存储 NoSQL 搜索推荐
nosql
【10月更文挑战第14天】nosql
32 2
|
2月前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
|
2月前
|
存储 SQL 分布式计算
NoSQL 简介
10月更文挑战第10天
46 0
|
3天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
13 3
|
3天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
19 3