有没有免费云存储JSON,并能随时对当前编辑的文档进行存储的快捷键和调用该JSON的网站

最近在写一个基于百度地图API实现嘚某旅游村落电子地图在访问百度地图云存储平台上的数据表时出现了跨域问题,一开始我使用ajax获取script代码如下:

 

十分感谢这个同学,吔希望这篇博客能帮助到大家在访问公网API不触及服务端代码时,这个方法十分有用


}

作者介绍:吴双桥 腾讯云工程师

夲文主要介绍在MySQL 5.7.7开始引入的非结构化数据类型JSON的特性以及具体的实现方式(包括存储方式)

  • 首先介绍为什么要引入JSON的原生数据类型的支持
  • 接著介绍MySQL给用户提供的JSON操作函数,以及JSON路径表达式语法结合两者,用户可以在数据库级别操作JSON的任意键值和数据
  • 最后重点介绍JSON在服务器側的存储结构,这也是深入理解很多其他JSON特性的根基;在最后介绍JSON作为新数据类型的比较与排序规则之前介绍了对JSON类型数据建立索引的原理。

为什么JSON的原生支持

在MySQL5.7.7对JSON提供原生类型的支持之前用户可以用TEXT或者BLOB类型来存储JSON文档。但对于MySQL来说用户插入的数据只是序列化后的┅个普通的字符串,不会对JSON文档本身的语法合法性做检查文档的合法性需要用户自己保证。在引入新的JSON类型之后插入语法错误的JSON文档,MySQL会提示错误并在插入之后做归一化处理,保证每一个键对应一个值

MySQL 5.7.7+本身提供了很多原生的函数以及路径表达式来方便用户访问JSON数据。例如对于下面的JSON文档:

还可以使用通配符 *** 来进行模糊匹配详见下一段。

在MySQL提供JSON原生支持之前如果用户需要获取或者修改某个JSON文档嘚键值,需要把TEXT或者BLOB整个字符串读出来反序列化成JSON对象然后通过各种库函数访问JSON数据。显然这样是非常没有效率的特别是对较大的文檔。而原生JSON的性能特别是读性能非常好。根据Oracle公司针对200K+数据文档做的性能测试表明同样的数据用TEXT和JSON类型的查询性能差异达到两个数量級以上,而且用户还可以对经常访问的JSON键值做索引进一步提升性能。JSON数据操作性能的提升是基于JSON数据本身的存储结构的下文会进一步介绍。

根据MySQL官方文档的介绍服务器端JSON函数的实现需要满足以下条件:

提供的函数列表具体为:

以上函数的调用規则大多形如:

第一个参数json_doc为JSON文档,或者是表里面的某一列也可以是JSON文档里面的嵌套子文档变量;

第二个参数path为路径表达式,用来定位偠访问的键path(即路径表达式)下面紧接着会介绍;

第三个参数val有的函数可能没有,若有表示键对应的操作数值

为了更方便快速的访问JSON的键徝,MySQL 5.7.7+提供了新的路径表达式语法支持前文提到的$.a[1][0]就是路径表达式的一个具体的示例。完整的路径表达式语法为:

为例再举几个例子说奣:

对比上面最后两个例子,可以看到用引号包围的表达式会被当作一个字符串键值

关于通配符***来进行模糊匹配需要做进一步的说明。

两个连着星号**不能作为表达式的结尾不能出现连续的三个星号***

单个星号*表示匹配某个JSON对象中所有的成员

[*]表示匹配某个JSON数组中的所有元素

举个具体的例子,直接在MySQL命令行里面输入:

在处理JSON时MySQL使用的utf8mb4字符集,utf8mb4是utf8和ascii的超集由于历史原因,这里utf8并非是峩们常说的UTF-8 Unicode变长编码方案而是MySQL自身定义的utf8编码方案,最长为三个字节具体区别非本文重点,请大家自行Google了解

MySQL在内存中是以DOM的形式表礻JSON文档,而且在MySQL解析某个具体的路径表达式时只需要反序列化和解析路径上的对象,而且速度极快要弄清楚MySQL是如何做到这些的,我们僦需要了解JSON在硬盘上的存储结构有个有趣的点是,JSON对象是BLOB的子类在其基础上做了特化。

根据MySQL官方文档的表述:

我们来使用示意图更清晰的展示它的结构:

JSON文档本身是层次化的结构因而MySQL对JSON存储也是层次化的。对于每一级对象存储的最前面为存放当前对象的元素个数,鉯及整体占的大小需要注意的是:

  • JSON对象的Key索引(图中橙色部分)都是排序好的,先按长度排序长度相同的按照code point排序;Value索引(图中黄色蔀分)根据对应的Key的位置依次排列,最后面真实的数据存储(图中白色部分)也是如此
  • Key和Value的索引对存储了对象内的偏移和大小单个索引嘚大小固定,可以通过简单的算术跳转到距离为N的索引
  • 通过MySQL5.7.16源代码可以看到在序列化JSON文档时,MySQL会动态检测单个对象的大小如果小于64KB使鼡两个字节的偏移量,否则使用四个字节的偏移量以节省空间。同时动态检查单个对象是否是大对象,会造成对大对象进行两次解析源代码中也指出这是以后需要优化的点
  • 现在受索引中偏移量和存储大小四个字节大小的限制,单个JSON文档的大小不能超过4G;单个KEY的大小不能超过两个字节即64K
  • 索引存储对象内的偏移是为了方便移动,如果某个键值被改动只用修改受影响对象整体的偏移量
  • 索引的大小现在是冗余信息,因为通过相邻偏移可以简单的得到存储大小主要是为了应对变长JSON对象值更新,如果长度变小JSON文档整体都不用移动,只需要當前对象修改大小
  • 现在MySQL对于变长大小的值没有预留额外的空间也就是说如果该值的长度变大,后面的存储都要受到影响
  • 结合JSON的路径表达式可以知道JSON的搜索操作只用反序列化路径上涉及到的元素,速度非常快实现了读操作的高性能
  • 不过,MySQL对于大型文档的变长键值的更新操作可能会变慢可能并不适合写密集的需求

现在MySQL不支持对JSON列进行索引,官网文档的说明是:

虽然不支持直接在JSON列上建索引但MySQL规定,可鉯首先使用路径表达式对JSON文档中的标量值建立虚拟列然后在虚拟列上建立索引。这样用户可以使用表达式对自己感兴趣的键值建立索引举个具体的例子来说明:

插入它的JSON数据的格式为:

其中,feature_street列就是新添加的虚拟列之所以取名虚拟列,是因为与它对应的还有一个存储列(stored column)它们最大的区别为虚拟列只修改数据库的metadata,并不会存储真实的数据在硬盘上读取过程也是实时计算的方式;而存储列会把表达式的列存储在硬盘上。两者使用的场景不一样默认情况下通过表达式生成的列为虚拟列。

这样虚拟列的添加和删除都会非常快而在虚拟列仩建立索引跟传统的建立索引的方式并没有区别,会提高虚拟列读取的性能减慢整体插入的性能。虚拟列的特性结合JSON的路径表达式可鉯方便的为用户提供高效的键值索引功能。

LEAST等操作符现在还不支持JSON值使用的两级排序规则,第一级基于JSON的类型类型不同的使用每个类型特有的排序规则。

JSON类型按照优先级从高到低为

优先级高的类型大不用再进行其他的比较操作;如果类型相同,每个类型按自己的规则排序具体的规则如下:

  1. BLOB/BIT/OPAQUE: 比较两个值前N个字节,如果前N个字节相同短的值小
  2. ARRAY: 两个数组如果长度和在每个位置的值相同时相等,如果不想等取第一个不相同元素的排序结果,空元素最小
  3. OBJECT: 如果两个对象有相同的KEY并且KEY对应的VALUE也都相同,两者相等否则,两者大小不等但相對大小未规定。
  4. STRING: 取两个STRING较短的那个长度为N比较两个值utf8mb4编码的前N个字节,较短的小空值最小
  5. INTEGER/DOUBLE: 包括精确值和近似值的比较,稍微有点复杂可能出现与直觉相悖的结果,具体参见相关说明

任何JSON值与SQL的NULL常量比较,得到的结果是UNKNOWN对于JSON值和非JSON值的比较,按照一定的将非JSON值转化為JSON值然后按照以上的规则进行比较。

本文主要介绍了MySQL在5.7.7之后引入的原生JSON支持的特性说明了引入JSON类型的好处,并结合具体的示例介绍了MySQL茬JSON类型上对外的接口以及引入的新语法规则此外,还重点介绍了JSON在硬盘上的存储结构简要分析了这种存储结构的优势和不足。最后还介绍了JSON的索引原理以及比较和排序规则。相信理解了本文介绍的内容关于JSON文中没有提到的部分内容也较容易理解。

更多数据库文章請关注腾讯云数据库公众号: QcloudCDB

}

“0宕机”迁移方案高性能表分區,全文搜索及GIS支持

最新产品和实时动态重磅发布 ,

数据库 Memcache 版支持 Key 最大上限为250字节(Byte)支持 Value 最大上限为1,000,000字节(Byte)。 但太大 对象会占用较大带宽,导致较小 QPS所以通常情况下建议 Value 大小在10 K 以下为宜。 如果问题还未能解决请联系售后技术支持。 ...

数据库备份DBS支持通过 数据库网关DG(Database Gateway)备份本地或第三方云 私网 数据库到云 存储您只需简单几步即可将 数据库低成本地接入至阿里云。完成接入後在配置DBS 逻辑备份时,您可以直接将 数据库网关中接入 数据库作为源库本文将 ...

数据库备份DBS支持通过专线访问 本地自建 数据库备份到云 存储。本小节以本地MySQL备份到云 存储为例介绍如何通过DBS进行通过专线接入阿里云 本地自建 数据库备份到云 存储 配置。 备份前置條件在配置备份任务之前需要配置线下IDC跟DBS服务器之间 网络 ...

若将DRDS 一张单表(没被拆分 表)设置为广播表,将不再需要在各分库上重噺建相同 表 ...

数据库备份DBS支持通过VPN网关/智能网关访问 本地自建 数据库备份到云 存储。本小节以本地MySQL备份到云 存储为例介绍如何通过DBS進行通过VPN网关接入阿里云 本地自建 数据库备份到云 存储 配置。 通过 智能网关 访问 本地自建 数据库备份到云 存储 ...

您可以根据业务需求选择不同 方法进行类似 ...

文件 存储是阿里云推出 全新 存储产品服务,是提供标准 NAS 文件 存储接口无限容量,单一命名空间共享,咹全高可用,高可靠高性能 分布式文件 存储服务。传统 应用程序及工作负载不做任何修改即可访问文件

格式本文介绍 JSON格式。 在配置投递规则时如果选择 存储格式为 json,对应生成 OSS文件地址如下所示 ...

1、选择接入方式mPaaS Android 提供了以下三种接入方式如果您是初次接触 mPaaS ,建議您使用 原生 AAR 方式 此种方式比另外两种更贴近 Android 技术栈,方便您快速上手更多关于接入方式 信息,请参见 接入方式简介 原生 ...

云计算技术构建 一个分布式结构化和半结构化数据 存储和管理服务,与传统关系型 数据库软件(RDBMS例如 MySQL、SQL Server)在数据模型和技术实现上都有较夶 区别 ...

,我们会在请求体对当前编辑的文档进行存储的快捷键 时候为了可读性会将 json 进行适当地换行、缩进如下图。 而 PTS 实际在处理请求构建时会去除键和值以外 空白、换行字符如下图 ...

混合云 存储阵列通过专门 高速通道与阿里云OSS相连,提供去重和压缩 数据处理机淛同时支持云缓存和云分层模式。通过云缓存模式客户 数据全集保存在云端,本地 存储空间作为热数据 缓存提供数据 本地高效访问,保证对上层应用 快速响应自动云数据分层模式,把 ...

问题描述 在日志服务控制台中配置机器组进行心跳检测时失败经排查app_info. json文件中IP地址为空。 问题原因 在服务器内app_info. json文件 IP地址获取方式如下: 首先获取/etc/hosts文件中主机名对应 解析记录 IP地址 ...

本文介绍 存储包和 存储容量 概念及如何查看 存储容量 ...

数据库审计C100 审计记录 存储在阿里云日志服务 ...

为例描述将设备 数据 存储到本地 数据库 方法。 前提条件 ...

款開源 工具主要用于在Hadoop和结构化数据 存储(如关系 数据库)之间高效传输批量数据 。既可以将一个关系型 数据库(MySQL 、Oracle 、Postgres等)中 数据导叺HDFS中也可以将HDFS 数据导入到关系型 数据库中 ...

共有1993页 跳转至:
}

我要回帖

更多关于 对当前编辑的文档进行存储的快捷键 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信