SlideShare a Scribd company logo
NoSQL APIs
Morgan Tocker

MySQL Community Manager
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!2
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,
and timing of any features or functionality described for Oracle’s products
remains at the sole discretion of Oracle.
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!3
MySQL 5.5
MySQL Enterprise Monitor 2.3 & 3.0
MySQL Enterprise Backup
Security
Scalability
HA
Audit
MySQL 5.6
MySQL Workbench 6.1
MySQL Utilities
MySQL Applier for
Hadoop
MySQL Workbench 5.2 & 6.0
MySQL Enterprise Oracle
Certifications
MySQL@Oracle: 4 Years of MySQL Innovation
MySQL Cluster Manager
Windows installer & Tools
MySQL Cluster 7.2
MySQL Cluster 7.1
MySQL Migration
Wizard
MySQL 5.7
MySQL Cluster 7.4
MySQL Fabric
MySQL Cluster 7.3
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!4
Discussion Topics
▪ What is memcached?
▪ History of HandlerSocket
▪ NoSQL Interface in MySQL 5.6
▪ Future in MySQL 5.7
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!5
What is memcached?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!6
What do we know about memcached?
▪ Simple in-memory caching system.
▪ APIs available for most programming languages.
▪ Stores data in memory.
▪ Excellent read performance.
▪ Great write performance.
▪ Supports distribution across multiple servers.
▪ No security.
Good Introduction:
https://code.google.com/p/memcached/wiki/NewProgrammingFAQ
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!7
Common Configuration
▪ As a look-aside cache:

















▪ Also possible to rebuild cache from cron/inject new cached data.
value = get_from_memcache(key);

if (value === null) {

value = get_value_from_database(key);

set_memcache(key, value)

}
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!8
Scaling
▪ Hashing is performed by the clients.
▪ Mod-based hashing.
▪ Consistent hashing.
▪ No cross talk by memcached servers.
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!9
History of HandlerSocket
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!10
The beginning
▪ Yoshinori Matsunobu working at DeNA.
▪ Profiled MySQL and discovered a lot of time spent in:
▪ Parsing SQL statements
▪ Opening, locking tables
▪ Making SQL execution plans
▪ Unlocking, closing tables
http://yoshinorimatsunobu.blogspot.ca/2010/10/using-mysql-as-nosql-story-for.html
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!11
The Question
▪ Is SQL really good for fast PK lookups?
▪ MySQL could only perform 100,000+ queries per second
▪ Memcached 400,000+ gets per second.
▪ Is it possible to bypass some parts of MySQL and get higher
throughput?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!12
Implementation
Credits: http://yoshinorimatsunobu.blogspot.ca/2010/10/using-mysql-as-nosql-story-for.html
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!13
The Result
!
approx qps server CPU util
MySQL via SQL 105,000 %us 60% %sy 28%
memcached 420,000 %us 8% %sy 88%
MySQL via HandlerSocket 750,000 %us 45% %sy 53%
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!14
Outcome
▪ Benefits:
▪ No inconsistent data.
▪ Crash-safe storage
▪ SQL can still be used.
▪ All operational benefits of
MySQL (backup, etc.)
!
!
▪ Limitations:
▪ New API
▪ No Security
▪ No Benefit for HDD bound
workloads
▪ In the case of DeNA:
▪ Switched from using memcached as a row cache.
▪ Kept memcached as a page/larger object cache.
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!15
NoSQL Interface in MySQL 5.6
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!16
MySQL 5.6
▪ Builds on the spirit of HandlerSocket.
▪ New implementation based on the standard memcached protocol.
▪ From a technical detail actually embeds memcached, but your
data remains safe between restarts.
▪ i.e. not just in memory.
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!17
Architecture
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!18
Implementation Details
▪ Plugin ships included in MySQL packages.
▪ Not enabled by default (security).
▪ Tables have to “opt-in” to be exposed via memcached.
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!19
Setup (1/3)
# Add this to my.cnf file:
!
plugin-load = daemon_memcached=libmemcached.so
!
# Load included SQL file to initialize innodb_memcached
# schema with permitted mappings.
!
mysql> source /usr/share/mysql/innodb_memcached_config.sql
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!20
Setup (2/3)
mysql> show plugins;
+----------------------------+----------+--------------------+-----------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+-----------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| mysql_old_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| ..
| INNODB_SYS_DATAFILES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL |
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
| daemon_memcached | ACTIVE | DAEMON | libmemcached.so | GPL |
+----------------------------+----------+--------------------+-----------------+---------+
43 rows in set (0.01 sec)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!21
Setup (Part 3/3)
# Pretend this is my hypothetical table:
!
mysql> create database myapp;
mysql> create table myapp.user_session_data (id_name
varchar(255), value varchar(255), expiretime int, primary
key (id_name));
!
# Insert your desired mapping into the containers table:
!
mysql> insert into innodb_memcache.containers values
("sessions", "myapp", "user_session_data", "id_name",
"value", 0, 0, "expiretime", "PRIMARY");
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!22
Setup - Complete
mysql> select * from containersG
..
*************************** 2. row ***************************
name: sessions
db_schema: myapp
db_table: user_session_data
key_columns: id_name
value_columns: value
flags: 0
cas_column: 0
expire_time_column: expiretime
unique_idx_name_on_key: PRIMARY
2 rows in set (0.00 sec)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!23
Testing
shell> telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set @@sessions.1|color 0 600 5
black
STORED
set @@sessions.1|size 0 600 5
large
STORED
quit
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!24
Testing (cont.)
mysql> select * from user_session_dataG
*************************** 1. row ***************************
id_name: 1|color
value: black
expiretime: 1398608066
*************************** 2. row ***************************
id_name: 1|size
value: large
expiretime: 1398608106
2 rows in set (0.00 sec)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!25
Updating Multiple Columns At Once
▪ Requires Serialization using the “|” character:
DROP TABLE myapp.users;
CREATE TABLE myapp.users (
`user_name` varchar(60) NOT NULL PRIMARY KEY,
`first_name` varchar(60),
`last_name` varchar(60),
expire_time_column INT
) ENGINE=InnoDB;
!
!
insert into innodb_memcache.containers
(name,db_schema,db_table,key_columns,value_columns,unique_idx_nam
e_on_key) VALUES (‘users’,'myapp','users','user_name',
'first_name,last_name','PRIMARY');
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!26
Testing Multiple Columns:
set @@users.fred 0 0 10
Fred|Smith
STORED
!
mysql> select * from users;
+-----------+------------+-----------+--------------------+
| user_name | first_name | last_name | expire_time_column |
+-----------+------------+-----------+--------------------+
| fred | Fred | Smith | 0 |
+-----------+------------+-----------+--------------------+
1 row in set (0.00 sec)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!27
Benchmarks
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!28
Future in MySQL 5.7
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!29
What has changed?
▪ Improvements inside of InnoDB to scale better.
▪ Several contentions related to MVCC code reduced.
▪ memcached plugin tuned to keep several reads within a single
internal transaction.
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!30
Benchmarks
48 Core Machine / Read Only Memcached
http://dimitrik.free.fr/blog/archives/2013/11/mysql-performance-over-1m-qps-with-innodb-memcached-plugin-in-mysql-57.html
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!31
Further Reading
▪ Article by Matt Lord and Andrew Morgan:

http://www.drdobbs.com/database/nosql-with-mysql/240167115
!
▪ MySQL Manual page:

https://dev.mysql.com/doc/refman/5.6/en/innodb-memcached-
setup.html
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 12!32
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 12!33

More Related Content

PDF
Mysql 57-upcoming-changes
PDF
MySQL: From Single Instance to Big Data
PDF
My sql 5.7-upcoming-changes-v2
PDF
Using MySQL in Automated Testing
PDF
MySQL 5.6 - Operations and Diagnostics Improvements
PDF
MySQL Server Defaults
PDF
Upcoming changes in MySQL 5.7
PDF
MySQL For Linux Sysadmins
Mysql 57-upcoming-changes
MySQL: From Single Instance to Big Data
My sql 5.7-upcoming-changes-v2
Using MySQL in Automated Testing
MySQL 5.6 - Operations and Diagnostics Improvements
MySQL Server Defaults
Upcoming changes in MySQL 5.7
MySQL For Linux Sysadmins

What's hot (20)

PDF
MySQL Performance Metrics that Matter
PDF
Optimizing MySQL
PDF
MySQL Cloud Service Deep Dive
PPTX
Proxysql use case scenarios fosdem17
PDF
MySQL Manchester TT - Performance Tuning
PPT
Understanding MySql locking issues
PDF
My sql 5.6&MySQL Cluster 7.3
PDF
MySQL 5.7 NEW FEATURES, BETTER PERFORMANCE, AND THINGS THAT WILL BREAK -- Mid...
PDF
MySQL 5.7 + JSON
PDF
MySQL Usability Guidelines
PDF
MySQL 5.7 -- SCaLE Feb 2014
PDF
MySql's NoSQL -- best of both worlds on the same disks
PPT
MySQL Performance Tuning at COSCUP 2014
PDF
MySQL 5.7: Focus on InnoDB
PDF
MySQL Query Optimization
PDF
Scaling MySQl 1 to N Servers -- Los Angelese MySQL User Group Feb 2014
PDF
Upgrade to MySQL 5.6 without downtime
PDF
MySQL Security
PDF
Modern MySQL Monitoring and Dashboards.
PDF
MySQL 5.7: Core Server Changes
MySQL Performance Metrics that Matter
Optimizing MySQL
MySQL Cloud Service Deep Dive
Proxysql use case scenarios fosdem17
MySQL Manchester TT - Performance Tuning
Understanding MySql locking issues
My sql 5.6&MySQL Cluster 7.3
MySQL 5.7 NEW FEATURES, BETTER PERFORMANCE, AND THINGS THAT WILL BREAK -- Mid...
MySQL 5.7 + JSON
MySQL Usability Guidelines
MySQL 5.7 -- SCaLE Feb 2014
MySql's NoSQL -- best of both worlds on the same disks
MySQL Performance Tuning at COSCUP 2014
MySQL 5.7: Focus on InnoDB
MySQL Query Optimization
Scaling MySQl 1 to N Servers -- Los Angelese MySQL User Group Feb 2014
Upgrade to MySQL 5.6 without downtime
MySQL Security
Modern MySQL Monitoring and Dashboards.
MySQL 5.7: Core Server Changes
Ad

Viewers also liked (20)

PDF
The InnoDB Storage Engine for MySQL
PPT
MySQL Atchitecture and Concepts
ODP
Mastering InnoDB Diagnostics
PPT
GoldenGate for MySQL 설치 시 필요한 사항
PPTX
Web vulnerability seminar2
PDF
Linux con europe_2014_full_system_rollback_btrfs_snapper_0
PDF
MySQL for Oracle DBAs
PDF
Extending MySQL Enterprise Monitor
ODP
Introduction to MySQL Enterprise Monitor
PPT
Developing Information Schema Plugins
ODP
Getting to Know MySQL Enterprise Monitor
PDF
Locking and Concurrency Control
ODP
Performance schema and_ps_helper
PDF
MySQL 5.6 Performance
PDF
Performance Schema for MySQL Troubleshooting
PDF
How to Monitor MySQL
PDF
Mysql tech day_paris_ps_and_sys
PDF
Performance schema and sys schema
PDF
MySQL sys schema deep dive
PDF
Instrumenting plugins for Performance Schema
The InnoDB Storage Engine for MySQL
MySQL Atchitecture and Concepts
Mastering InnoDB Diagnostics
GoldenGate for MySQL 설치 시 필요한 사항
Web vulnerability seminar2
Linux con europe_2014_full_system_rollback_btrfs_snapper_0
MySQL for Oracle DBAs
Extending MySQL Enterprise Monitor
Introduction to MySQL Enterprise Monitor
Developing Information Schema Plugins
Getting to Know MySQL Enterprise Monitor
Locking and Concurrency Control
Performance schema and_ps_helper
MySQL 5.6 Performance
Performance Schema for MySQL Troubleshooting
How to Monitor MySQL
Mysql tech day_paris_ps_and_sys
Performance schema and sys schema
MySQL sys schema deep dive
Instrumenting plugins for Performance Schema
Ad

Similar to MySQL NoSQL APIs (20)

PDF
Performance Schema and Sys Schema in MySQL 5.7
PPTX
The State of the Dolphin, MySQL Keynote at Percona Live Europe 2019, Amsterda...
PDF
My sql fabric webinar v1.1
PPTX
OUGLS 2016: Guided Tour On The MySQL Source Code
PDF
10 Razões para Usar MySQL em Startups
PDF
MySQL Cluster Asynchronous replication (2014)
PDF
01 demystifying mysq-lfororacledbaanddeveloperv1
PDF
20141011 my sql clusterv01pptx
PDF
MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0
PDF
The MySQL SYS Schema
PPTX
MySQL Tech Tour 2015 - Manage & Tune
PDF
MySQL's NoSQL -- Texas Linuxfest August 22nd 2015
PDF
MySQL Webinar Series 4/4 - Manage & tune
PDF
MySQL Replication
PDF
MySQL Webinar 2/4 Performance tuning, hardware, optimisation
PPTX
My sql8 innodb_cluster
PPT
MySQL 5.7: Performance Schema Improvements
PDF
DataOps Barcelona - MySQL HA so easy... that's insane !
PDF
Oracle OpenWorld - Getting started with MySQL Cluster
PPTX
What's new in MySQL Cluster 7.4 webinar charts
Performance Schema and Sys Schema in MySQL 5.7
The State of the Dolphin, MySQL Keynote at Percona Live Europe 2019, Amsterda...
My sql fabric webinar v1.1
OUGLS 2016: Guided Tour On The MySQL Source Code
10 Razões para Usar MySQL em Startups
MySQL Cluster Asynchronous replication (2014)
01 demystifying mysq-lfororacledbaanddeveloperv1
20141011 my sql clusterv01pptx
MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0
The MySQL SYS Schema
MySQL Tech Tour 2015 - Manage & Tune
MySQL's NoSQL -- Texas Linuxfest August 22nd 2015
MySQL Webinar Series 4/4 - Manage & tune
MySQL Replication
MySQL Webinar 2/4 Performance tuning, hardware, optimisation
My sql8 innodb_cluster
MySQL 5.7: Performance Schema Improvements
DataOps Barcelona - MySQL HA so easy... that's insane !
Oracle OpenWorld - Getting started with MySQL Cluster
What's new in MySQL Cluster 7.4 webinar charts

More from Morgan Tocker (8)

PDF
Introducing Spirit - Online Schema Change
PDF
My First 90 days with Vitess
PDF
FOSDEM MySQL and Friends Devroom
PDF
Introducing TiDB - Percona Live Frankfurt
PDF
TiDB Introduction - Boston MySQL Meetup Group
PDF
TiDB Introduction - San Francisco MySQL Meetup
PDF
TiDB Introduction
PDF
MySQL 8.0 Optimizer Guide
Introducing Spirit - Online Schema Change
My First 90 days with Vitess
FOSDEM MySQL and Friends Devroom
Introducing TiDB - Percona Live Frankfurt
TiDB Introduction - Boston MySQL Meetup Group
TiDB Introduction - San Francisco MySQL Meetup
TiDB Introduction
MySQL 8.0 Optimizer Guide

Recently uploaded (20)

PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PDF
Softaken Excel to vCard Converter Software.pdf
PPTX
Mastering-Cybersecurity-The-Crucial-Role-of-Antivirus-Support-Services.pptx
PDF
A REACT POMODORO TIMER WEB APPLICATION.pdf
PDF
System and Network Administration Chapter 2
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PPTX
ISO 45001 Occupational Health and Safety Management System
PDF
Best Practices for Rolling Out Competency Management Software.pdf
PDF
medical staffing services at VALiNTRY
PPTX
Materi_Pemrograman_Komputer-Looping.pptx
PDF
Become an Agentblazer Champion Challenge Kickoff
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
IEEE-CS Tech Predictions, SWEBOK and Quantum Software: Towards Q-SWEBOK
PPTX
Materi-Enum-and-Record-Data-Type (1).pptx
PPTX
ai tools demonstartion for schools and inter college
PDF
System and Network Administraation Chapter 3
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PPTX
Presentation of Computer CLASS 2 .pptx
PPTX
Transform Your Business with a Software ERP System
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Softaken Excel to vCard Converter Software.pdf
Mastering-Cybersecurity-The-Crucial-Role-of-Antivirus-Support-Services.pptx
A REACT POMODORO TIMER WEB APPLICATION.pdf
System and Network Administration Chapter 2
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
ISO 45001 Occupational Health and Safety Management System
Best Practices for Rolling Out Competency Management Software.pdf
medical staffing services at VALiNTRY
Materi_Pemrograman_Komputer-Looping.pptx
Become an Agentblazer Champion Challenge Kickoff
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
IEEE-CS Tech Predictions, SWEBOK and Quantum Software: Towards Q-SWEBOK
Materi-Enum-and-Record-Data-Type (1).pptx
ai tools demonstartion for schools and inter college
System and Network Administraation Chapter 3
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
Presentation of Computer CLASS 2 .pptx
Transform Your Business with a Software ERP System
How to Migrate SBCGlobal Email to Yahoo Easily

MySQL NoSQL APIs

  • 2. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!2 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, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
  • 3. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!3 MySQL 5.5 MySQL Enterprise Monitor 2.3 & 3.0 MySQL Enterprise Backup Security Scalability HA Audit MySQL 5.6 MySQL Workbench 6.1 MySQL Utilities MySQL Applier for Hadoop MySQL Workbench 5.2 & 6.0 MySQL Enterprise Oracle Certifications MySQL@Oracle: 4 Years of MySQL Innovation MySQL Cluster Manager Windows installer & Tools MySQL Cluster 7.2 MySQL Cluster 7.1 MySQL Migration Wizard MySQL 5.7 MySQL Cluster 7.4 MySQL Fabric MySQL Cluster 7.3
  • 4. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!4 Discussion Topics ▪ What is memcached? ▪ History of HandlerSocket ▪ NoSQL Interface in MySQL 5.6 ▪ Future in MySQL 5.7
  • 5. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!5 What is memcached?
  • 6. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!6 What do we know about memcached? ▪ Simple in-memory caching system. ▪ APIs available for most programming languages. ▪ Stores data in memory. ▪ Excellent read performance. ▪ Great write performance. ▪ Supports distribution across multiple servers. ▪ No security. Good Introduction: https://code.google.com/p/memcached/wiki/NewProgrammingFAQ
  • 7. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!7 Common Configuration ▪ As a look-aside cache:
 
 
 
 
 
 
 
 
 ▪ Also possible to rebuild cache from cron/inject new cached data. value = get_from_memcache(key);
 if (value === null) {
 value = get_value_from_database(key);
 set_memcache(key, value)
 }
  • 8. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!8 Scaling ▪ Hashing is performed by the clients. ▪ Mod-based hashing. ▪ Consistent hashing. ▪ No cross talk by memcached servers.
  • 9. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!9 History of HandlerSocket
  • 10. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!10 The beginning ▪ Yoshinori Matsunobu working at DeNA. ▪ Profiled MySQL and discovered a lot of time spent in: ▪ Parsing SQL statements ▪ Opening, locking tables ▪ Making SQL execution plans ▪ Unlocking, closing tables http://yoshinorimatsunobu.blogspot.ca/2010/10/using-mysql-as-nosql-story-for.html
  • 11. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!11 The Question ▪ Is SQL really good for fast PK lookups? ▪ MySQL could only perform 100,000+ queries per second ▪ Memcached 400,000+ gets per second. ▪ Is it possible to bypass some parts of MySQL and get higher throughput?
  • 12. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!12 Implementation Credits: http://yoshinorimatsunobu.blogspot.ca/2010/10/using-mysql-as-nosql-story-for.html
  • 13. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!13 The Result ! approx qps server CPU util MySQL via SQL 105,000 %us 60% %sy 28% memcached 420,000 %us 8% %sy 88% MySQL via HandlerSocket 750,000 %us 45% %sy 53%
  • 14. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!14 Outcome ▪ Benefits: ▪ No inconsistent data. ▪ Crash-safe storage ▪ SQL can still be used. ▪ All operational benefits of MySQL (backup, etc.) ! ! ▪ Limitations: ▪ New API ▪ No Security ▪ No Benefit for HDD bound workloads ▪ In the case of DeNA: ▪ Switched from using memcached as a row cache. ▪ Kept memcached as a page/larger object cache.
  • 15. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!15 NoSQL Interface in MySQL 5.6
  • 16. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!16 MySQL 5.6 ▪ Builds on the spirit of HandlerSocket. ▪ New implementation based on the standard memcached protocol. ▪ From a technical detail actually embeds memcached, but your data remains safe between restarts. ▪ i.e. not just in memory.
  • 17. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!17 Architecture
  • 18. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!18 Implementation Details ▪ Plugin ships included in MySQL packages. ▪ Not enabled by default (security). ▪ Tables have to “opt-in” to be exposed via memcached.
  • 19. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!19 Setup (1/3) # Add this to my.cnf file: ! plugin-load = daemon_memcached=libmemcached.so ! # Load included SQL file to initialize innodb_memcached # schema with permitted mappings. ! mysql> source /usr/share/mysql/innodb_memcached_config.sql
  • 20. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!20 Setup (2/3) mysql> show plugins; +----------------------------+----------+--------------------+-----------------+---------+ | Name | Status | Type | Library | License | +----------------------------+----------+--------------------+-----------------+---------+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | | mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL | | mysql_old_password | ACTIVE | AUTHENTICATION | NULL | GPL | | sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL | | CSV | ACTIVE | STORAGE ENGINE | NULL | GPL | | MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL | | MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL | | BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL | | FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL | | InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL | | INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | .. | INNODB_SYS_DATAFILES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL | | partition | ACTIVE | STORAGE ENGINE | NULL | GPL | | daemon_memcached | ACTIVE | DAEMON | libmemcached.so | GPL | +----------------------------+----------+--------------------+-----------------+---------+ 43 rows in set (0.01 sec)
  • 21. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!21 Setup (Part 3/3) # Pretend this is my hypothetical table: ! mysql> create database myapp; mysql> create table myapp.user_session_data (id_name varchar(255), value varchar(255), expiretime int, primary key (id_name)); ! # Insert your desired mapping into the containers table: ! mysql> insert into innodb_memcache.containers values ("sessions", "myapp", "user_session_data", "id_name", "value", 0, 0, "expiretime", "PRIMARY");
  • 22. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!22 Setup - Complete mysql> select * from containersG .. *************************** 2. row *************************** name: sessions db_schema: myapp db_table: user_session_data key_columns: id_name value_columns: value flags: 0 cas_column: 0 expire_time_column: expiretime unique_idx_name_on_key: PRIMARY 2 rows in set (0.00 sec)
  • 23. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!23 Testing shell> telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. set @@sessions.1|color 0 600 5 black STORED set @@sessions.1|size 0 600 5 large STORED quit
  • 24. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!24 Testing (cont.) mysql> select * from user_session_dataG *************************** 1. row *************************** id_name: 1|color value: black expiretime: 1398608066 *************************** 2. row *************************** id_name: 1|size value: large expiretime: 1398608106 2 rows in set (0.00 sec)
  • 25. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!25 Updating Multiple Columns At Once ▪ Requires Serialization using the “|” character: DROP TABLE myapp.users; CREATE TABLE myapp.users ( `user_name` varchar(60) NOT NULL PRIMARY KEY, `first_name` varchar(60), `last_name` varchar(60), expire_time_column INT ) ENGINE=InnoDB; ! ! insert into innodb_memcache.containers (name,db_schema,db_table,key_columns,value_columns,unique_idx_nam e_on_key) VALUES (‘users’,'myapp','users','user_name', 'first_name,last_name','PRIMARY');
  • 26. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!26 Testing Multiple Columns: set @@users.fred 0 0 10 Fred|Smith STORED ! mysql> select * from users; +-----------+------------+-----------+--------------------+ | user_name | first_name | last_name | expire_time_column | +-----------+------------+-----------+--------------------+ | fred | Fred | Smith | 0 | +-----------+------------+-----------+--------------------+ 1 row in set (0.00 sec)
  • 27. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!27 Benchmarks
  • 28. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!28 Future in MySQL 5.7
  • 29. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!29 What has changed? ▪ Improvements inside of InnoDB to scale better. ▪ Several contentions related to MVCC code reduced. ▪ memcached plugin tuned to keep several reads within a single internal transaction.
  • 30. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!30 Benchmarks 48 Core Machine / Read Only Memcached http://dimitrik.free.fr/blog/archives/2013/11/mysql-performance-over-1m-qps-with-innodb-memcached-plugin-in-mysql-57.html
  • 31. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.!31 Further Reading ▪ Article by Matt Lord and Andrew Morgan:
 http://www.drdobbs.com/database/nosql-with-mysql/240167115 ! ▪ MySQL Manual page:
 https://dev.mysql.com/doc/refman/5.6/en/innodb-memcached- setup.html
  • 32. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 12!32
  • 33. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 12!33