保持冷静和质疑json

您已经看到了为什么以及如何在JSON中建模数据。 一旦在JSON中有了数据,就可以在任何简单的键值数据库中存储和检索JSON文档。 如果您的应用程序只需要根据**设置和获取文档,请使用任何键值存储。 你都准备好了。

这种情况很少发生。

您不能仅仅使用数据库来存储和检索JSON。 你在试图解决一个真正的商业问题。 您正在开发一个业务应用程序。 对于业务应用程序,问题、操作和报告不会因为数据库不支持查询而改变。 业务应用程序必须做许多需要多对象操作的事情:

  • 处理订单结帐。
  • 搜索存储顾客正在寻找的鞋子的数据。
  • 上个月我们有多少新客户?
  • 生成今天到期的未完成装运清单。
  • 使用不区分大小写的客户名称检索客户订单。
  • 加载新的库存数据。
  • 合并客户列表。

为了完成这些任务,您需要高效地搜索数据库。 对数据进行选择-连接-分组-项目-聚合-排序处理以生成报告。 同样,您必须插入、更新、删除和合并来表示现实世界的业务流程。

现在,问题是,你将如何用获取和设置API为NoSQL关键值系统实现所有这些? 你可以通过编写一个程序来完成每项任务。 当然,编写应用程序是昂贵的。 扩展、调试和维护它会使成本更高。

想象一个用例:寻找订单超过10,000美元的高价值客户。 使用NoSQL应用编程接口方法,您可以编写一个程序来检索对象,并在程序中进行过滤、分组和聚合。

保持冷静和质疑json

现在,问题是,你将如何在一个具有获取和设置API的NoSQL关键值系统中实现所有这些? 你可以通过编写一个程序来完成每项任务。 当然,编写应用程序是昂贵的,扩展、调试和维护它会使它更加昂贵。

保持冷静和质疑json

这就是关系数据库管理系统和SQL被发明的原因。 SQL确实自然地设置了处理。 在关系模型中,这些任务都可以通过一系列语句来完成。 每个SQL语句获取一组元组,进行处理,并生成另一组元组。

保持冷静和质疑json

选择c。客户,客户。姓名,SUM(o金额)

从订单到内部连接行项目l开(o客户IDl。CustID)

内部连接客户(o)CustID外面的c。CustID)

GROUP BY c 。CustID,c .名称HAVING SUM(o金额)> 10000

按金额订购(o金额)DESC

随着NoSQL关键值数据库的发展,他们增加了地图简化框架,这样开发人员就可以使用和级联它们来完成复杂的工作。 卡珊德拉、蒙古数据库和库基在分布式NoSQL数据库上引入了类似于SQL的语言,使查询更加容易。 蒙古数据库应用编程接口看起来不同,但是您仍然会看到类似于SQL的东西。

Couchbase N1QL(非第一范式查询语言)在灵活的JSON数据模型上提供了所有的选择-连接-项目操作。 N1QL为布尔表达式定义了一个四值布尔逻辑,它包括灵活模式中的新MISSING值和数据类型的排序序列。 此外,N1QL扩展了SQL来访问和操作嵌套JSON结构的所有部分。

N1QL将JSON文档集作为输入,对它们进行处理,并为您提供一组JSON文档。 只需在SQL定义中用JSON替换元组,就可以得到N1QL。

保持冷静和质疑json

让我们看看如何用N1QL编写前面的查询。 非常接近于SQL,但它可以访问嵌套数据,并在ORDERS文档中进行数组的非嵌套。

选择客户。身份证,顾客。名称,SUM(订单行。金额)

来自订单的订单。行项目作为订单行

关键订单上的内部加入客户。CustID

按客户分组。身份证,顾客。姓名

有总和(订单行。金额)> 10000

按金额排序(订单行。金额)DESC

除了选择,Couchbase N1QL还支持传统的SQL语句:插入、更新、删除和合并。 以下是一些例子:

插入订单(键,值)

值(“1。美国广播公司。X382″, {“O_ID”:482, “O_D_ID”:3, “O_W_ID”:4});

更新订单集O _开利_标识”ABC987 “其中O _标识=482,O _ D _标识=3,O _ W _标识=4

从新订单中删除,其中编号为291,编号为3482,编号为2483

融入客户使用

(从新客户中选择国际开发委员会,其中状态=’CA ‘)作为NC

开关键数控。CID

匹配后,更新客户集。状态= ‘ CA

下面是基于SQL的关系数据库管理系统和N1QL之间的比较:

查询功能

关系数据库管理系统上的SQL

关于JSON的SQL

目标 表、元组、列 键空间,JSON文档,键值
参考 平面参照:表格。圆柱
E.g. 顾客。姓名,顾客。活力
平面和嵌套:键空间。keyvalue
E.g. 顾客。姓名,顾客。地址。拉链,
顾客。联系人[0]。电话。可动的

声明

选择、插入、更新、删除、合并

选择、插入、更新、删除、合并

查询操作

  • 选择、连接、项目、子查询
  • 严格模式
  • 严格类型检查
  • 选择、连接、项目、子查询
  • 鸟巢和隧道
  • 看,马! 没有类型不匹配错误!
  • JSON键充当列

计划

预定列

  • 完全可寻址JSON
  • 灵活的文档结构

数据类型

SQL数据类型

转换函数

  • 数据类型:字符串,数字布尔,对象,数组,空
  • 转换函数

询问处理

输入:元组集

输出:元组集

输入:JSON集

输出:JSON集

摘要:

与RDBMS相比,NoSQL数据库让您能够以低得多的延迟和低得多的成本读写大量数据。没有查询就像没有方向盘的发动机一样。 通过库基对JSON的查询,你可以问一些重要的问题,比如——我在哪里可以找到我最喜欢的啤酒?.

SELECT
挑选”},




Array_agg({“name”:左边的name})
brewery,



Array_agg({“name”:Array_agg({“name”:brewery)。名称})geo})





Array_count(
Array_agg(brewery.NAME))
AS
syncnavigator brewery_count

FROM
`beer-sample`
beer


LEFT
OUTER
JOIN
`beer-sample`
brewery


ON
keys
啤酒厂_计数brewery_id


WHERE
type
= ‘beer’


AND
brewery.type
= ‘brewery’


AND
brewery.state
= ‘California’


GROUP
BY
NAME


ORDER
BY
brewery_idNAME))
在哪里



NAME
ASC
limit
5
;

保持冷静和质疑json

相关文章: