24
NoSQL的飞跃 使用MySQL 更加安全可靠便利地管理JSON 数据 马楚成 (Ivan Ma) 周彦伟 MySQL 亚太区资深方案工程师 极数云舟CEO [email protected] Oracle MySQL ACE Director 2019-04-16 Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |

NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

  • Upload
    others

  • View
    20

  • Download
    0

Embed Size (px)

Citation preview

Page 1: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

NoSQL的飞跃使用MySQL 更加安全可靠便利地管理JSON 数据

马楚成 (Ivan Ma) 周彦伟MySQL 亚太区资深方案工程师 极数云舟CEO [email protected] Oracle MySQL ACE Director

2019-04-16

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |

Page 2: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

Safe Harbor Statement

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, timing, and pricing of any features or functionality described for Oracle’s products may change and remains at the sole discretion of Oracle Corporation.

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 2

Page 3: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

Outline

1

2

3

4

MySQL 作为文档存储 (Ivan)

使用 X DevAPI / Connector (Ivan)

接管NoSQL,MySQL 管理平台设计和案例 (周彦伟)

总结

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 3

Page 4: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

8.0

2018年4月19日8.0.11 GA

2018年7月27日8.0.12 发布

2018年10月22日8.0.13 发布

2019年2月1日8.0.15 发布

8.0.16 ……

The world's most popular open source database

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |

Page 5: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

MySQL作为文档存储使用Document Store and X-DevAPI

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 5

Page 6: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

NoSQL的魅力

• 越来越多 用户/公司 开始尝试NoSQL

对 RDBMS 的疑惑 后来发现NoSQL 的不足, 限制和问题

开发人员不喜欢SQL ,等等 缺乏ACID支持

RDBMS扩展性低 缺乏“参照完整性””Referential Integrity”

• 结果:SQL + NoSQL - 对传统数据库上开发NoSQL 接口(例如Uber使用Schemaless) - 开发存储引擎,实现NoSQL (例如Facebook 使用MyRocks /RocksDB) - 使用一些支持JSON 的RDBMS

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |

Page 7: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

name: "John Smith",{date: "2017-10-02", total: 24.95}] }

Document

name: "John Smith",{date: "2017-10-02", total: 24.95}] }

name: "John Smith",{date: "2017-10-02", total: 24.95}] }

name: "John Smith",{date: "2017-10-02", total: 24.95}] }

Relational Databases vs Document Store SystemsRelational Model Document Modelcustomer

id name email city_id

Table

{ _id: 3412, name: "John Smith", {date: "2017-10-02", total: 24.95} ] }

Document 3412 John Smith [email protected] 45 ROW

city

id city country_id

45 San Francisco US ROW

shop_order

id id_customer date total

412 3412 2017-10-02 24.95

CO

LLECTIO

N

{ _id: 3412, { _id: 3412,

{ _id: 3412, { _id: 3412,

{ _id: 3412, name: "John Smith", {date: "2017-10-02", total: 24.95} ] }

Document

ROW

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 7

381 3412 2017-08-24 312.20 ROW

Page 8: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

主要组件

App 应用

MySQL

Router 路由

X DevAPI [Connector] MySQL 连接器

X Plugin X 插件

MySQL Shell

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 8

Page 9: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

文档 【Document 】和集合 【Collections 】• 文档在文档型数据库( Docstore )里以 JSON 的形式展现

- MySQL 完美支持

• 多个文档存储在一个集合里

– 数据库

- InnoDB 表为 Collection Table Collection

- JSON 类型为常规列

- 以虚拟列建索引 Row [ GenCol, JSON, …] Document [ _id, doc ]

Row [GenCol, JSON, …] Document [ _id, doc ]

- 应用

- X-DevAPI

- 管理

- MySQL Shell

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 9

Page 10: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

Document Store with MySQLJSON Datatype

CREATE TABLE employees (data JSON);

INSERT INTO employees VALUES

('{"id": 1, "name": "Jane"}'),

('{"id": 2, "name": "Joe"}');

SELECT * FROM employees;

+-------------------------------------+

| data |

+-------------------------------------+

| {"id": 1, "name": "Jane"} |

| {"id": 2, "name": "Joe"} |

+-------------------------------------+

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 10

Page 11: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

MySQL Connectors include X DevAPI

• Use SQL, CRUD APIs – Document (NoSQL) and Relational (SQL), or “All of the Above”

– All of this is in addition to the Classic APIs

Operation Document Relational

Create Collection.add() Table.insert()

Read Collection.find() Table.select()

Update Collection.modify() Table.update()

Delete Collection.remove() Table.delete()

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |

.

Page 12: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

COMMIT 和SAVEPOINT 的支持• 在会话范围内,提供原子性操作– 在会话范围内创建,

提交或回滚事务

– 在这些事务中创建, 释放或回滚到中间保存点

try { session.startTransaction() // run some operations (1) session.createSavepoint('foo') // run more operations (2) session.releaseSavepoint('foo') session.commit()

} catch (err) { try { session.rollbackTo('foo') // go to (2)

} catch (err) { session.rollback() // revert the entire

thing }

}

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 12

Page 13: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

NoSQL + 执行 SQL

• 对于ETL ,结构化分析和报表,SQL始终是一种选择

• 允许使用尚未成为X DevAPI 一部分的功能,例如:

- 关系表的DDL操作

- 管理键约束

- 使用JOIN session.sql( ‘< SQL Statement> ‘).execute

// create a table session.sql('CREATE TABLE foo (bar VARCHAR(3))').execute() // add a unique constraint session.sql('ALTER TABLE foo ADD COLUMN bar VARCHAR(3) GENERATED ALWAYS AS doc->>"$.bar" VIRTUAL UNIQUE KEY NOT NULL').execute() // execute a JOIN query session.sql('SELECT DISTINCT t1.bar FROM foo t1 JOIN baz t2 ON t1.bar = t2.qux WHERE t1.qux = t2.quux').execute()

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 13

Page 14: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

: true });

集合 [Collection] 的使用

const mysqlx = require('@mysql/xdevapi');

(async function () { try { const session = await mysqlx.getSession({ user: 'root' }); const schema = session.getSchema('products')

const collection = await schema.createCollection('servers', { ReuseExistingObject console.log(collection); // { schema: 'products', collection: 'servers' }

const collections = await schema.getCollections(); console.log(collections); // [{ schema: 'products', collection: 'servers' }]

await session.close();

process.exit(); } catch (err) { console.error(err.message); process.exit(1);

} })();

# Python collection \

.find("name = 'foo' AND age > 42") \

.fields("name", "age") \

.group_by("name", "age") \

.sort("name ASC", "age DESC") \

.limit(4) \

.offset(2) \

.execute()

// Java collection

.find("name = 'foo' AND age > 42")

.fields("name", "age")

.groupBy("name", "age")

.sort("name ASC", "age DESC")

.limit(4)

.offset(2)

.execute()

NodeJS

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 14

Page 15: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

跨集合的原子更新

const mysqlx = require('@mysql/xdevapi');

(async function () {let session, release;try {session = await mysqlx.getSession({ user: 'root' });const db = session.getSchema('products');await db.createCollection('clients', { ReuseExistingObject: true });

await session.startTransaction();await db.getCollection('servers').find('version = 8.0 AND revision = 11').lockExclusive(mysqlx.LockContention.DEFAULT).execute(doc => { release = doc.release; });

await db.getCollection('clients').add({ name: 'c-nodejs' }).execute();await db.getCollection('clients').modify('true').set('serverType', release).execute();await session.commit();await session.close();

process.exit(); } catch (err) {if (session) { await session.rollback(); }console.error(err.message);process.exit(1);

}})();

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 15

Page 16: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

接管NoSQL MySQL管理平台设计和案例周彦伟

极数云舟CEO Oracle MySQL ACE Director

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 17

Page 17: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

MySQL管理JSON的优势

• 可靠的MySQL 整体技术框架

• MySQL Server+InnoDB

• 完备的关系数据库核心功能

• REDO 、UNDO 、MVCC 、Transaction 、Isolation…

• 丰富的技术资源和技术人才

• ACMUG / 《MySQL 运维内参》《MySQL 8 Cookbook 》

• 成熟的管理平台和运维方案

• Arkcontrol/Arkgate/Arkproxy/Arksentinel

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 18

Page 18: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 19

MySQL管理平台功能• 安装部署

• 监控告警

• 备份恢复

• 操作变更

• 审核审计

• 资源管理

• 高可用切换

Page 19: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

实现案例:Arkcontrol

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 20

Page 20: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

Title

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 21

Page 21: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

总结

• 简化 并 保护数据库 的 安装

• 利用广泛和成熟MySQL技术

• 达到双赢 - RDBMS 和NoSQL 的好处

• InnoDB 集群为 高可用 的第一级别方案

• 标准化和简单的Node.js 工作流程(async,npm)

• 减小对ORM和其他无关的中间件的依赖

• Node.js 优越的部署场景(容器,微服务,无服务器和FaaS ,桌面,物联网等)

• 通过利用标准API,避免平台锁定

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 22

Page 22: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

链接和资源

• https://github.com/mysql/mysql-connector-nodejs

• https://www.npmjs.com/package/@mysql/xdevapi

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

• https://dev.mysql.com/doc/x-devapi-userguide/en/

• https://dev.mysql.com/doc/dev/connector-nodejs/8.0/

• https://ruiquelhas.github.io/percona-live-europe-2017/

• https://www.mysql.com/news-and-events/web-seminars/mysql-document-store-and-node-js/

• https://insidemysql.com/mysql-document-store-crud-quick-start/

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 23

Page 23: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle

Copyright © 2019, Oracle and/or its affiliates. All rights reserved. | 24

Page 24: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 · Title: NoSQL 的飞跃 — 使用 MySQL 更加安全可靠便利地管理 JSON 数据 Author: Oracle