mysql可以存⽂档_MySQL⽂档存储介绍
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&ateCollection("example")
JS&le.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');
host:'localhost',
port:'33060',
dbUser:'root',
dbPassword:'password'
}).then(function(session){// use untry.info
Schema('world_x');
Collection('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);
>mysql存储文档
可以看出,在上⾯两个使⽤不同编程语⾔的例⼦中,find 操作符的⽤法基本⼀致。这种⼀致性对跨语⾔编程的开发者有很⼤帮助,对试图降低新语⾔学习成本的开发者也不⽆裨益。
⽀持的语⾔还包括 C、Java、Python 和 JavaScript 等,未来还会有更多⽀持的语⾔。
从两种⽅式受益
我会告诉你使⽤ NoSQL ⽅式录⼊的数据也可以⽤ SQL ⽅式使⽤?换句话说,我会告诉你新引⼊的 NoSQL ⽅式可以访问旧式关系型表中的数据?现在使⽤ MySQL 服务器有多种⽅式,作为 SQL 服务器,作为 NoSQL 服务器或者同时作为两者。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。