不像 MySQL 的 MySQL:MySQL 文档存储介绍

2024年 7月 18日 24.8k 0

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

不像 MySQL 的 MySQL:MySQL 文档存储介绍-1

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

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

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

JSON 数据类型

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

X DevAPI

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

一个新的 shell 支持这种新协议,即所谓的 MySQL Shell。该 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。

var mysqlx = require('@mysql/xdevapi');
mysqlx.getSession({             //Auth to server
        host: 'localhost',
        port: '33060',
        dbUser: 'root',
        dbPassword: 'password'
}).then(function (session) {    // use world_x.country.info
     var schema = session.getSchema('world_x');
     var collection = 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 的记录:

相关文章

Linux 命令行的聊天工具 CenterIM
Linux 桌面年仍未到来 但 Linux 移动之年已到来
12 个在线学习 Linux 技能网站
Linux Mint : 会是另一个新的 Ubuntu 吗?
W3Conf 开发者大会将于下周召开
Ubuntu 10.04 ARM 处理器上网本版本结束服务期

发布评论