N1QL为NoSQL数据库带来SQL般的查询体验

关系型数据库已经流行了超过40年,在这个过程中SQL也成为了操作关系型数据库的标准。SQL将数据的存储方式进行了包装和抽象,使开发人员可以专注于程序逻辑。对开发人员工作的简化也是SQL甚至关系型数据库流行的原因。

社会在发展,数据在变化。从社交网络、科学研究、物联网等数据源产生的数据已经不局限于某个固定的结构,因此对于这些数据擅长结构化数据的关系型数据库就难以处理了。

关系型数据库最好有固定的schema,这也使得满足现代商业要求的敏捷性和快速迭代变得困难。动态schema不仅仅要求我们重新思考数据模型和数据库,我们还需要一门新的查询语言来读取这些数据。

数据模型

我们先来看看数据模型。九十年代开始随着图形界面应用和Web应用的流行,多数商业应用的程序都使用面向对象的开发模式。对于Web应用来说JSON是表示数据对象的标准,服务器和应用之间交换的就是一个个JSON文件。两千年左右NoSQL数据库开始流行起来,NoSQL数据库的目的就是方便存储和管理JSON文件。

JSON数据库很受开发人员的喜爱,因为它表示数据的方式和其他面向对象的程序设计语言如Java、C++、.NET、Python和Ruby等是一样的而且可以有灵活的schema。然而文件数据库的开发人员一直以来都欠缺好用的查询语言。

文件数据库查询语言的欠缺使开发人员陷入了两难的境地:要么享受JSON灵活的数据模型要么享受关系型数据库的SQL但两者不可兼得。

查询语言

N1QL(发音是“妮叩”)是一门将SQL引入文件数据库的查询语言。讲得技术一点,JSON是不符合第一范式的数据模型,而N1QL则对这一数据模型进行操作。N1QL将传统SQL对表和行的操作拓展至JSON (嵌套文件)。

将SQL引入JSON有点像汽车油改电,虽然引擎换了但驾驶员的操作方式保持不变。现在开发人员既可以使用熟悉的SQL来操作又可以动态扩展应用的schema。

下图中是SQL和N1QL中join的写法的一个简单例子。想要深入学习N1QL的话请移步到Couchbase的N1QL教程。

扩展SQL而不是完全重新创造一门语言的好处是SQL中经典的关键字操作符排序集合等功能都可以进行复用。这极大地降低了开发人员使用N1QL的门槛。

不过关系型数据库和文件数据库的模型总归是不同的,所以N1QL也有一些新的东西。比如N1QL引入了NEST和UNNEST关键字来集合或分解嵌套的对象、IS NULL和IS MISSING来处理动态schema以及ARRAY函数来对数组元素进行遍历或过滤。

新型数据模型的灵活性与开发人员熟悉的查询语言的强大功能相结合为下一代更灵活更强大的应用开发打下了良好的基础。开发者们借着妮叩尽情享受文件数据库吧!

原文链接:N1QL brings SQL to NoSQL databases(译者/刘旭坤 审校/朱正贵 责编/仲浩)

原文发布于微信公众号 - CSDN技术头条(CSDN_Tech)

原文发表时间:2015-09-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯云数据库团队的专栏

PostgreSQL 的空闲数据块管理机制解析

PostgreSQL是通过 MVCC (Multi-Version Concurrency Control) 来保证事务的原子性和隔离性,本文通过一些事例对 M...

75310
来自专栏小文博客

SkinMaster(原LOL换肤大师)同步更新——小文’s blog

1K60
来自专栏牛客网

知识总结:java的web开发常用框架

今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到...

458130
来自专栏数据订阅

图数据库调研

更好,更快速的查询和分析:图数据库为查询相关数据(无论大小)提供了卓越的性能。 图模型提供了固有的索引数据结构,因此它不需要为给定条件的查询加载或接触不相关的数...

537190
来自专栏禁心尽力

数据库设计

杨鑫奇数据库设计经验之谈 一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% ...

29080
来自专栏Danny的专栏

数据库设计经验谈

一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库...

16840
来自专栏java一日一条

为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到...

17110
来自专栏架构师之旅

3个面试中遇到的问题《JAVA面试题》

面试官:“一个http 请求,接受json数组,数组内容是id,返回用户信息,在测试上是ok的,到预生产就报错了,可能是什么问题?” 我想了想说:“代码一致吗?...

91150
来自专栏牛客网

金山wps服务端二面面经

前言:阿婆主很久很久没写过面经了,之所以写这篇面经是真的感觉wps相关的面经太少啦,既然有机会面试那就写一篇吧 直接上啦---> 协程和线程,比如协程底层的实现...

59460
来自专栏安恒信息

Jsprime——一款JavaScript静态安全分析工具

如今,越来越多开发人开始将JavaScript作为其首选语言方案。理由很简单,JavaScript如今正越来越多地被视为应用程序的主流开发语言——无论是在Web...

30970

扫码关注云+社区

领取腾讯云代金券