MySQL文档存储可以跳过使用传统数据库时需要做的底层数据结构的创建、数据归一化等工作,直接存储数据。MySQL可以提供NoSQLJSON文档存储DocumentStore,让开发者无需在保存数据前对数据进行归一化、创建数据库,开发前无需制定数据样式。从MySQL5.7和MySQL8.0开始,开发人员可以将JSON文档存储在表的列中。多亏了XDevAPI的引入,您可以从代码中删除结构化的查询字符串,转而使用支持现代编程设计的API调用。系统研究过结构化查询语言(SQL)、关系理论、集合等关系数据库底层理论的开发者并不多,但他们需要一个安全可靠的数据存储。如果没有足够的数据库管理员,事情很快就会变得一团糟,而MySQL的文档存储可以让开发者跳过使用传统数据库时需要做的底层数据结构创建、数据规范化等工作,直接存储数据。只需创建JSON文档的文档集合即可。JSON数据类型所有这些都是基于多年前MySQL5.7引入的JSON数据类型。它允许表的一行中有大约1GB的列。数据必须是有效的JSON,否则服务器会报错;但开发者可以自由使用这些空间。XDevAPI旧的MySQL协议已经经历了将近四分之一个世纪,并且已经出现了疲劳迹象,因此开发了一个新的协议,命名为XDevAPI。该协议引入了一个高级会话概念,允许代码从单个服务器扩展到多个服务器,使用符合通用主机语言编程模式的非阻塞异步I/O。关注的是如何在使用CRUD(创建、读取、更新、删除)风格时遵循现代实践和编码风格。换句话说,您不再需要在漂亮、干净的代码中嵌入难看的SQL语句字符串。一个新的shell支持这个新协议,即所谓的MySQLShell。此shell可用于设置高可用性集群、检查服务器升级准备情况以及与MySQL服务器交互。支持三种交互方式:JavaScript、Python和SQL。代码示例下面的代码示例以基于JavaScript的方式使用MySQLShell,从JS>提示符可以看出。接下来,我们将使用用户dstokes和密码password登录本地系统上的演示存储库。db是指向演示库的指针。$mysqlshdstokes:password@localhost/demoJS>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匹配的记录。我们在数据库中指定一个特定的集合,并调用带有特定参数的查找命令。同样,操作不涉及SQL。varmysqlx=require('@mysql/xdevapi');mysqlx.getSession({//Authtoserverhost:'localhost',port:'33060',dbUser:'root',dbPassword:'password'}).then(function(session){//使用world_x.country.infovarschema=session.getSchema('world_x');varcollection=schema.getCollection('countryinfo');collection//获取'CAN'的行.find("$._id=='CAN'").limit(1).execute(doc=>console.log(doc)).then(()=>console.log("\n\n全部完成"));session.close();})下面例子使用PHP,搜索_id文字匹配USA的记录:getSchema("world_x");//指定col选择使用$collection=$schema->getCollection("countryinfo");//SELECT*FROMworld_xWHERE_id="USA"$result=$collection->find('_id="USA"')->execute();//获取/显示数据$data=$result->fetchAll();var_dump($data);?>可以看出,在上面两个使用不同编程语言的例子中,find运算符的使用基本相同,这种一致性对开发者跨语言编程,以及开发者尝试以降低学习一门新语言的成本。支持的语言还包括C、Java、Python、JavaScript,未来还会支持更多的语言。两种方式都受益我告诉你,用NoSQL方式录入的数据,用SQL方式也能用?换句话说,我要告诉你,新引入的NoSQL方式可以访问旧式关系表中的数据吗?今天有很多方法可以使用MySQL服务器,作为SQL服务器,作为NoSQL服务器,或者两者兼而有之。
