mysql 5.7.12 新增 X plugin 详解

https://dev.mysql.com/doc/refman/5.7/en/document-store.html

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xiaozhong991.blog.51cto.com/2354914/1763792

X plugin是mysql新发版本5.7.12中新增的插件,利用它实现mysql作为文件存储数据库,也就是利用mysql 5.7版本json支持的特性完成,安装很简单,需要下载5.7.12版本并且安装mysqlsh工具。

[[email protected] src]# vim /etc/yum.repos.d/mysql-community.repo 
[mysql-tools-preview]
name=MySQL Tools Preview
baseurl=http://repo.mysql.com/yum/mysql-tools-preview/el/6/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[[email protected] src]# yum install mysql-shell

这样就可以直接安装上mysqlsh工具,官网给的为gpgcheck=1,但是我这安装需要修改为gpgcheck=0才能正常安装,这个各位自行检查吧。

[[email protected] src]# mysqlsh -u root -h localhost -p --classic --dba enableXProtocol

执行上面命令之后就为mysql安装好X plugin了,可以到mysql查看是否开启

mysql> show plugins;
| mysqlx                     | ACTIVE   | DAEMON             | mysqlx.so | GPL     |

有上面显示的plugin就已正常安装,改插件需要启用单独的协议,所以能看到对应的网络监听端口,默认为33060,现在来进行一些测试

[[email protected] src]# mysqlsh -u root
Creating an X Session to [email protected]:33060
Enter password: 
No default schema selected.
Type ‘\help‘, ‘\h‘ or ‘\?‘ for help.

Currently in JavaScript mode. Use \sql to switch to SQL mode and execute queries.
mysql-js> db;

mysql-js>

命令和mongodb类似,现在还没schema和collection,用官网的示例文件world_x-db.zip直接导入

mysqlsh -u root --sql --recreate-schema world_x < /usr/local/src/world_x-db/world_x.sql
Enter password: ****Recreating schema world_x...
[[email protected] src]# mysqlsh -u root -p world_x
mysql-js> db
<Schema:world_x>
mysql-js> db.collections;
{
    "CountryInfo": <Collection:CountryInfo>
}
mysql-js> db.CountryInfo.find().limit(1);
[
    {
        "GNP": 828,
        "IndepYear": null,
        "Name": "Aruba",
        "_id": "ABW",
        "demographics": {
            "LifeExpectancy": 78.4000015258789,
            "Population": 103000
        },
        "geography": {
            "Continent": "North America",
            "Region": "Caribbean",
            "SurfaceArea": 193
        },
        "government": {
            "GovernmentForm": "Nonmetropolitan Territory of The Netherlands",
            "HeadOfState": "Beatrix"
        }
    }
]
1 document in set (0.00 sec)

mysql-js>

可以看到有点类似于mongodb的操作,现在自己来创建schema和collection进行步骤熟悉

mysql-js> CREATE SCHEMA test_1;
SyntaxError: Unexpected identifier at (shell):1:7
in CREATE SCHEMA test_1;
          ^^^^^^
SyntaxError: Unexpected identifier
mysql-js> \q
Bye!
[[email protected] src]# mysqlsh -u root  --recreate-schema test_1
Creating an X Session to [email protected]:33060/test_1
ArgumentError: Recreate schema option can only be used in classic or node sessions
[[email protected] src]# mysqlsh -u root --recreate-schema test_1 --sql < aa.sql
Enter password: 
Recreating schema test_1...
[[email protected] src]# mysqlsh -u root -p test_1
mysql-js> db
<Schema:test_1>
mysql-js> \q
Bye!
[[email protected] src]# cat aa.sql
DROP SCHEMA test_1;
CREATE SCHEMA test_1;

上面操作可以看出要创建schema只能利用--sql的方式,事先写入到一个sql文件才能正常创建。假如要进行schema切换使用 db = session.getSchema("test_1"),如下:

mysql-js> db;
<Schema:test_1>
mysql-js> db = session.getSchema("world_x");
<Schema:world_x>

下面再来对collection创建操作进行测试:

mysql-js> db;
<Schema:test_1>
mysql-js> db.collections;
{
    "CountryInfo": <Collection:CountryInfo>, 
    "xz_test": <Collection:xz_test>
}
mysql-js> db.createCollection("a");
<Collection:a>
mysql-js> db.collections;
{
    "CountryInfo": <Collection:CountryInfo>, 
    "a": <Collection:a>, 
    "xz_test": <Collection:xz_test>
}
mysql-js> session.dropCollection("world_x","a");
Query OK (0.00 sec)

mysql-js> db.collections;
{
    "CountryInfo": <Collection:CountryInfo>, 
    "xz_test": <Collection:xz_test>
}
mysql-js>

创建collection和mongodb类似,删除操作有点不同...............对collection的查找、更新、删除和索引添加等操作都有所不同,可以到官网查看有详细的介绍,太长就不写啦。

现在来瞧瞧它是用的什么引擎,原理又是啥.............

[[email protected] src]# mysqlsh -u root -p world_x;
Creating an X Session to [email protected]:33060/world_x
Enter password: 
mysql-js> db.collections;
{
    "CountryInfo": <Collection:CountryInfo>, 
    "xz_test": <Collection:xz_test>
}
mysql-js> db.xz_test.find().limit(1);
[
    {
        "_id": "1a5501cc7efde511d814000c290c4817",
        "age": 123,
        "name": "xiaozhong"
    }
]
1 document in set (0.00 sec)
mysql-js>db.xz_test.createIndex("age").field("age", "INTEGER", false).execute();
Query OK (0.01 sec)
mysql-js>

我这先给我自己创建的测试collection的age字段创建了一个索引,现在直接用mysql连接进去看看结构

[[email protected] src]# mysql -uroot 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_1             |
| test_a             |
| world_x            |
+--------------------+
7 rows in set (0.00 sec)

mysql> use world_x;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------+
| Tables_in_world_x |
+-------------------+
| City              |
| Country           |
| CountryInfo       |
| CountryLanguage   |
| xz_test           |
+-------------------+
5 rows in set (0.00 sec)
mysql> show create table xz_test\G;
*************************** 1. row ***************************
       Table: xz_test
Create Table: CREATE TABLE `xz_test` (
  `doc` json DEFAULT NULL,
  `_id` varchar(32) GENERATED ALWAYS AS (json_unquote(json_extract(`doc`,‘$._id‘))) STORED NOT NULL,
  `$ix_i_F177B50B40803DD7D3962E25071AC5CAA3D1139C` int(11) GENERATED ALWAYS AS (json_extract(`doc`,‘$.age‘)) VIRTUAL,
  UNIQUE KEY `_id` (`_id`),
  KEY `age` (`$ix_i_F177B50B40803DD7D3962E25071AC5CAA3D1139C`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)

由上面的操作可以看出刚才创建的schema和collection都能看到,我刚才创建的age列索引是利用了5.7新特性虚拟列,为_id创建了一个唯一约束并存储到磁盘,利用的innodb引擎,这就可以让collection支持事物行锁等innodb引擎的特性。

总结上面的操作对X plugin特性可以得出:

1、X plugin利用独有的协议可以模拟类似mongodb操作

2、创建schema略显坑

3、全程需要注意大小写

4、可以利用innodb引擎所有特性

5、索引利用虚拟列完成

6、_id字段利用uuid函数生成的数据,去掉了中间连接符"-",所以在上面加了个unique约束

效率未曾测试,如果有兴趣可以自己测试,官网也有对文档存储的详细介绍,可以自行进行查找。

本文出自 “D调de默默” 博客,请务必保留此出处http://xiaozhong991.blog.51cto.com/2354914/1763792

时间: 2024-10-31 04:17:53

mysql 5.7.12 新增 X plugin 详解的相关文章

MySQL慢查询(二) - pt-query-digest详解慢查询日志 pt-query-digest 慢日志分析

随笔 - 66 文章 - 0 评论 - 19 MySQL慢查询(二) - pt-query-digest详解慢查询日志 一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析.可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间.次数.占比等

Mysql高手系列 - 第14篇:详解事务

这是Mysql系列第14篇. 环境:mysql5.7.25,cmd命令中进行演示. 开发过程中,会经常用到数据库事务,所以本章非常重要. 本篇内容 什么是事务,它有什么用? 事务的几个特性 事务常见操作指令详解 事务的隔离级别详解 脏读.不可重复读.可重复读.幻读详解 演示各种隔离级别产生的现象 关于隔离级别的选择 什么是事务? 数据库中的事务是指对数据库执行一批操作,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况. 举个例子 比如A用户给B用户转账100操作,过程如下: 1

Mysql Join语法解析与性能分析详解

一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录. RIGHT JOIN(右连接):与 LEF

CSS3新增属性text-shadow详解及燃烧的字体实战开发

今天我们有很多程序员在给文本设置样式时,都感觉无从下手.一般有两种情况: 1) 不知道关于文本到底有哪些样式属性: 2) 即使借助开发工具的自动提醒,依然不清楚样式属性的具体意思,以及具体用法. 今天这篇文章,我将带领大家一起来领受CSS3在文本样式应用方面的超强能力.通过精彩的实例,来使大家重新认识CSS3文本样式,真心希望大家通过此篇文章,即使不能做到精通CSS3的文本样式的应用,也会做到熟练应用. 实例: 如何利用CSS3制作燃烧的字体? 以前,如果我们网页上想要显示一个燃烧着的文本,大家

mysql服务性能优化—my.cnf配置说明详解

MYSQL服务器my.cnf配置文档详解硬件:内存16G [client]port = 3306socket = /data/3306/mysql.sock [mysql]no-auto-rehash [mysqld]user = mysqlport = 3306socket = /data/3306/mysql.sockbasedir = /usr/local/mysqldatadir = /data/3306/dataopen_files_limit = 10240 back_log = 6

MySQL的数据类型及其常用修饰符详解

MySQL的数据类型及其常用修饰符详解 ================================================================================ 概述: ========================================================================================== Mysql的数据类型     在mysql数据库当中,每一个库都是有多张表来组成的,每一个表都是由行和列来组

MySQL 5.7.12新增MySQL Shell命令行功能

在最新发布的MySQL 5.7.12中有许多令人兴奋的新功能,对于MySQL开发者来说,最令人兴奋的莫不是新增的MySQL Shell了,其下载地址: http://dev.mysql.com/downloads/shell/ 有了MySQL Shell,我们可以将MySQL作为一个文档数据库来使用,也可以通过该工具调用Java.Python. 我们可以用mysqlsh --help来查看其帮助信息: 使用MySQL Shell的几个必要条件: 1.MySQL版本:5.7.12及以上 2.安装m

MySQL命令行下执行.sql脚本详解

本文主要介绍一个在MySQL命令行下执行脚本文件的例子,通过这个例子让我们来了解一下在命令行下MySQL是怎样执行脚本的吧.现在我们开始介绍这一过程. 1.首先编写sql脚本,保存为的:book.sql,内容如下: 1 use test; 2 3 create table book 4 5 ( 6 7 tisbn varchar(20) primary key, 8 9 tbname varchar(100), 10 11 tauthor varchar(30), 12 13 chubanshe

Mysql建表与索引使用规范详解

一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL. 三. MySQL建表,如果字段等价于外键,应在该字段加索引. 四. MySQL建表,不同表之间的相同属性值的字段,列类型,类型长度,是否非空,是否默认值,需保持一致,否则无法正确使用索引进行关联对比. 五. MySQL使用时,一条SQL语句只能使用一个表的一个索引.所有的字段类型都可以索引,多列索引的属性最多15个. 六. 如果可以在多个索引中进行选择,My