N1QL为NoSQL数据库带来SQL般的查询体验
英文原文:N1QL brings SQL to NoSQL databases
关系型数据库已经流行了超过 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 函数来对数组元素进行遍历或过滤。
新型数据模型的灵活性与开发人员熟悉的查询语言的强大功能相结合为下一代更灵活更强大的应用开发打下了良好的基础。开发者们借着妮叩尽情享受文件数据库吧!
译者/刘旭坤审校/朱正贵责编/仲浩