MySQL 文档存储 可以跳过底层数据结构创建、数据规范化和其它使用传统数据库时需要做的工作,直接存储数据。

MySQL 可以提供 NoSQL JSON 文档存储Document Store了,这样开发者保存数据前无需规范化normalize数据、创建数据库,也无需在开发之前就制定好数据样式。从 MySQL 5.7 版本和 MySQL 8.0 版本开始,开发者可以在表的一列中存储 JSON 文档。由于引入 X DevAPI,你可以从你的代码中移除令人不爽的结构化查询字符串,改为使用支持现代编程设计的 API 调用。

系统学习过结构化查询语言(SQL)、关系理论relational theory、集合set和其它关系数据库底层理论的开发者并不多,但他们需要一个安全可靠的数据存储。如果数据库管理人员不足,事情很快就会变得一团糟,

MySQL 文档存储[1] 允许开发者跳过底层数据结构创建、数据规范化和其它使用传统数据库时需要做的工作,直接存储数据。只需创建一个 JSON 文档集合document collection,接着就可以使用了。

JSON 数据类型

所有这一切都基于多年前 MySQL 5.7 引入的 JSON 数据类型。它允许在表的一行中提供大约 1GB 大小的列。数据必须是有效的 JSON,否则服务器会报错;但开发者可以自由使用这些空间。

X DevAPI

旧的 MySQL 协议已经历经差不多四分之一个世纪,已经显现出疲态,因此新的协议被开发出来,协议名为 X DevAPI[2]。协议引入高级会话概念,允许代码从单台服务器扩展到多台,使用符合通用主机编程语言样式common host-language programming patterns的非阻塞异步 I/O。需要关注的是如何遵循现代实践和编码风格,同时使用 CRUD (Create、 Replace、 Update、 Delete)样式。换句话说,你不再需要在你精美、纯洁的代码中嵌入丑陋的 SQL 语句字符串。

一个新的 shell 支持这种新协议,即所谓的 MySQL Shell[3]。该 shell 可用于设置高可用集群high-availability cluster、检查服务器升级就绪状态upgrade readiness以及与 MySQL 服务器交互。支持的交互方式有以下三种:JavaScript,Python 和 SQL。

代码示例

下面的代码示例基于 JavaScript 方式使用 MySQL Shell,可以从 JS> 提示符看出。

下面,我们将使用用户 dstokes 、密码 password 登录本地系统上的 demo 库。db 是一个指针,指向 demo 库。

$ mysqlsh dstokes:password@localhost/demo

JS>db.createCollection("example")

JS>db.example.add(

{

Name:"Dave",

State:"Texas",

foo:"bar"

}

)

JS>

在上面的示例中,我们登录服务器,连接到 demo 库,创建了一个名为 example 的集合,最后插入一条记录;整个过程无需创建表,也无需使用 SQL。只要你能想象的到,你可以使用甚至滥用这些数据。这不是一种代码对象与关系语句之间的映射器,因为并没有将代码映射为 SQL;新协议直接与服务器层打交道。

Node.js 支持

新 shell 看起来挺不错,你可以用其完成很多工作;但你可能更希望使用你选用的编程语言。下面的例子使用 world_x 示例数据库,搜索 _id 字段匹配 CAN. 的记录。我们指定数据库中的特定集合,使用特定参数调用 find 命令。同样地,操作也不涉及 SQL。

varmysqlx=require('@mysql/xdevapi');

mysqlx.getSession({//Auth to server

host:'localhost',

port:'33060',

dbUser:'root',

dbPassword:'password'

}).then(function(session){// use world_x.country.info

varschema=session.getSchema('world_x');

varcollection=schema.getCollection('countryinfo');

collection// Get row for 'CAN'

.find("$._id == 'CAN'")

.limit(1)

.execute(doc=>console.log(doc))

.then(()=>console.log("\n\nAll done"));

session.close();

})

下面例子使用 PHP,搜索 _id 字段匹配 USA 的记录:

// Connection parameters

$user='root';

$passwd='S3cret#';

$host='localhost';

$port='33060';

$connection_uri='mysqlx://'.$user.':'.$passwd.'@'.$host.':'.$port;

echo$connection_uri."\n";

// Connect as a Node Session

$nodeSession=mysql_xdevapi\getNodeSession($connection_uri);

// "USE world_x" schema

$schema=$nodeSession->getSchema("world_x");

// Specify collection to use

$collection=$schema->getCollection("countryinfo");

// SELECT * FROM world_x WHERE _id = "USA"

$result=$collection->find('_id = "USA"')->execute();

// Fetch/Display data

$data=$result->fetchAll();

var_dump($data);

?>

可以看出,在上面两个使用不同编程语言的例子中,find 操作符的用法基本一致。这种一致性对跨语言编程的开发者有很大帮助,对试图降低新语言学习成本的开发者也不无裨益。

支持的语言还包括 C、Java、Python 和 JavaScript 等,未来还会有更多支持的语言。

从两种方式受益

我会告诉你使用 NoSQL 方式录入的数据也可以用 SQL 方式使用?换句话说,我会告诉你新引入的 NoSQL 方式可以访问旧式关系型表中的数据?现在使用 MySQL 服务器有多种方式,作为 SQL 服务器,作为 NoSQL 服务器或者同时作为两者。

mysql可以存文档_MySQL 文档存储介绍相关推荐

  1. 数组在mysql中是什么类型_MySQL 中的数据类型介绍

    1.概述 要了解一个数据库,我们也必须了解其支持的数据类型. MySQL支持所有标准的SQL数据类型,主要分3类: 数值类型 字符串类型 时间日期类型 另一类是几何数据类型,用的不多,也没多介绍.  ...

  2. mysql 藏文字典_mysql无法压缩存储表情

    importjava.util.regex.Matcher;importjava.util.regex.Pattern;importorg.apache.commons.lang.StringUtil ...

  3. 一个mysql可以存多少数据类型_mysql一张表到底能存多少数据?

    前言 程序员平时和mysql打交道一定不少,可以说每天都有接触到,但是mysql一张表到底能存多少数据呢?计算根据是什么呢?接下来咱们逐一探讨 知识准备 数据页 在操作系统中,我们知道为了跟磁盘交互, ...

  4. MySQL怎么存base64编码_MySQL中如何将字符串转为base64编码?

    在MySQL中,TO_BASE64()函数将字符串转换为以base-64编码的字符串并返回结果.(相关推荐:<MySQL教程>) 语法TO_BASE64(str) 其中str是需要编码的字 ...

  5. mysql如何存json格式_mysql 插数据,存json格式

    private JSONArray wrapJson(ResultSet rs) throws SQLException{ JSONArray jsonArray = new JSONArray(); ...

  6. mysql如何存点坐标_mysql – 在服务器上存储GPS坐标(轨道)的最佳方式

    如果我是你,我会使用TRACK和POINT表. TRACK表将包含每个不同轨道的行 TRACK_ID int not null (PK) NAME varchar(40) DESCRIPTION va ...

  7. mysql修改路径报错_mysql修改数据存储路径报错处理

    Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' 解决?: >>> vim ...

  8. mysql支持数据安全的引擎_MySQL 支持的存储引擎

    存储引擎: 数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建.查询.更新和删除数据操作. 不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎还可以获得 ...

  9. MySQL主从同步的概述_MySQL主从同步原理介绍

    概述 Mysql的Replication(复制)是一个异步的复制过程,从一个 Mysql instance(我们称之为 Master)复制到另一个Mysql instance(我们称之 Slave). ...

最新文章

  1. android 是否允许打印debug级别日志的开关_log日志功能及设置方法
  2. CF-1209 F. Koala and Notebook(建图BFS)
  3. 【绝对有用】Server Tomcat v9.0 Server at localhost failed to start
  4. 边工作边刷题:70天一遍leetcode: day 97-2
  5. 使用WSO2 ESB构建制造服务总线(MSB)
  6. linux禁用防火墙配置,CentOS Linux防火墙配置及关闭
  7. 信奥中的数学:母函数
  8. 池化技术及jdk的线程池讲解
  9. (98)FPGA时序裕量
  10. 测试(一)试题及答案
  11. System Center Configuration Manager 2016 域准备篇(Part2)
  12. 社会我张哥,人狠话不多。
  13. java email 的格式_使用Java将电子邮件转换为原始格式
  14. 计算机毕业设计JAVA便利店系统mybatis+源码+调试部署+系统+数据库+lw
  15. mysql 查询优化实验报告_数据库优化查询实验报告.docx
  16. sp导出贴图到maya
  17. LTE的核心网之:MME,SGW,PGW
  18. Python3 print pprint
  19. 微信公众平台SDK! Senparc.Weixin.MP.dll(资料整理)
  20. Esxi 6.7基于已有数据存储配置虚拟机(Windows类)间共享存储(非RDM)

热门文章

  1. 在IOS上实现二维码扫描
  2. 手机备忘录扫描功能怎么用
  3. JavaScript 的入门学习案例,保证学会!
  4. 终于完成coos的重构了
  5. unity小白之 unpack the Prefab instance解压缩预制件实例
  6. 【cpufreq子系统】P State和C State
  7. 快麦 KM-218PRE 打印机驱动
  8. 图对比学习入门 Contrastive Learning on Graph
  9. Java循环案例-买公鸡母鸡小鸡问题
  10. 使用frp将内网映射到公网