Tìm hiểu MySQL 5.7

MySQL 5.7 ra mắt khoảng tháng 10-2015 đã đánh dấu thành công vượt bậc của MySQL với tốc độ nhanh hơn, bảo mật hơn, nhiều tiện ích hơn so với các version trước đó.

MySQL 5.7 được thiết kế dành cho các ứng dụng Web, thương mại điện tử (E-commerce), ứng dụng xử lý giao dịch trực tuyến, với rất nhiều tính năng mới. Sau đây là 1 vài những tính năng nổi trội.

  • Hiệu suất & Khả năng mở rộng: Cải tiến InnoDB, Các tác vụ được tải và thực hiện online nhanh hơn, khả năng thay đổi kích thước bộ đệm trực tuyến.

  • Hỗ trợ JSON (JavaScript Object Notation) : Với sự hỗ trợ JSON mới được thêm vào trong MySQL 5.7, cho phép lưu trữ, tìm kiếm, cập nhật và dễ dàng tích hợp dữ liệu Document trong các truy vấn SQL.

  • Cải thiện Replication cho hiệu suất cao và triển khai tự phục hồi cụm.

  • Cải thiện MySQL Performance Scheme: với việc bổ sung nhiều khả năng giám sát mới, giảm footprint and overhead, và cải thiện đáng kể cách sử dụng với SYS Schema.

  • Tăng tính năng bảo mật trong mysql

  • Optimizer: điều khiển và quản lý lượng người dùng lớn hơn và hiệu suất truy xuất tốt hơn với việc nâng cấp cấu hình

Và còn rất nhiều chức năng mới được thêm vào trong Mysql 5.7, bạn có thể tham khảo đường link dưới đây:

danh sách các tính năng mới trong MySQL 5.7 thecompletelistoffeatures.com

Sau đây mình sẽ tìm hiểu qua về performance và cách sử dụng Json trong mysql 5.7

I. Hiệu suất hơn MySQL 5.6 đến 3 lần

Benchmarks

MySQL 5.7 Sysbench Benchmark: SQL Point Selects mysql_benchmarks_pointselect.png

MySQL Performance: Với version MYSQL 5.7 Chúng ta có thể làm được nhiều hơn 1,600,000 QPS (queries per second) SQL. Cao hơn rất nhiều so với MySQL 5.6 chỉ 600.000 QPS.

MySQL 5.7 Sysbench Benchmark: Connection Requests mysql_benchmarks_connectsecond.png

MySQL 5.7 Sysbench Benchmark: Online Transaction Processing (OLTP) Read Only

mysql_benchmarks_mixed_ro.png

Theo thống kê được công bố trên trang https://www.mysql.com/why-mysql/benchmarks/

Dựa vào biểu đồ ta có thể thấy số lượng user đồng thời thực hiện truy vấn và số lượng truy vấn thực hiện trên 1 giây (queries per second), ta thấy hiệu suất của MySQL 5.7 vượt trội hơn hẳn so với MySQL 5.6 và các phiên bản trước đó.

II. Tìm hiểu JSON trong mysql 5.7, cú pháp, cách sử dụng

Example:

Create Table cùng với JSON Field

CREATE TABLE `book` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(200) NOT NULL,
  `tags` json DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

**Adding JSON Data **

INSERT INTO `book` (`title`, `tags`)
VALUES (
  'Test mysql 5.7',
  '["JavaScript", "PHP", "MYSQL", "IOS" ,"android", "JSON"]'
),
 (
  'Test 2',
  '["FramgiaVN", "Ruby", "MYSQL", "Google", "MONGODB", "JSON", "Tuan"]'
)
;

Screenshot_1.jpg

Searching JSON Data

JSON_CONTAINS() function

Cú pháp:

 JSON_CONTAINS(json_doc, val[, path])

Ex:

SELECT * FROM `book`
WHERE JSON_CONTAINS(tags, '["FramgiaVN"]');

Kết quả:

Screenshot_2.jpg

JSON_SEARCH() function

Cú pháp:

 JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...])

EX:

Screenshot_3.jpg

JSON Paths

EX:


SELECT JSON_EXTRACT(
  '{"id": 1, "website": "SitePoint"}',
  '$.website'
);
-- returns "SitePoint":

{
  "a": 1,
  "b": 2,
  "c": [3, 4],
  "d": {
    "e": 5,
    "f": 6
  }
}
//following paths:

$.a returns 1
$.c returns [3, 4]
$.c[1] returns 4
$.d.e returns 5
$**.e returns [5]

Extracting JSON Paths in Queries

Ta có thể trích xuất các tag đầu tiên từ table book bằng cách sử dụng truy vấn:

Ex: Screenshot_4.jpg

JSON_ARRAY() function function which creates arrays, e.g.

SELECT JSON_ARRAY(1, 2, 'abc');
-- returns [1, 2, "abc"]:

JSON_OBJECT() function function which creates objects, e.g.

SELECT JSON_OBJECT('a', 1, 'b', 2);
-- returns {"a": 1, "b": 2}

JSON_MERGE() function to merge documents, e.g.

SELECT JSON_MERGE('["a", 1]', '{"key": "value"}');
--- returns ["a", 1, {"key": "value"}]:

Nguồn tham khảo:

http://www.mysql.com/why-mysql/white-papers/whats-new-mysql-5-7/

https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-search

https://www.sitepoint.com/use-json-data-fields-mysql-databases/