MySQL Cluster NoSQL Memcached API

54
MySQL Cluster: NoSQL Memcached API

description

MySQL Cluster 7.2 added support for the Memcached API, enabling web services to directly query MySQL Cluster using the Memcached API, and adding a persistent, scalable, fault tolerant backend to Memcached. The slides take you through the design concepts and introduce a sample social media app built using memcached and MySQL Cluster

Transcript of MySQL Cluster NoSQL Memcached API

Page 1: MySQL Cluster NoSQL Memcached API

MySQL Cluster: NoSQL Memcached API

Page 2: MySQL Cluster NoSQL Memcached API

•  Meet New Requirements: Add persistence, sharding, fault tolerance

•  Ease-of-Use: Standard Memcached libraries

•  Simplification: Eliminate cache-coherency & consolidate data tiers

•  Flexible Data Model: Schema / Schema-less storage

•  Flexible Access Patterns: SQL and NoSQL

•  Flexible Deployments: values stored in Cluster, Memcached or both

•  Key / Value Performance: Native access to MySQL Cluster

Copyright © 2012 Oracle Corp.

Page 3: MySQL Cluster NoSQL Memcached API

<Insert Picture Here>

Program Agenda

•  Overview, MySQL Cluster

•  Memcached API

•  Memcache Overview •  MySQL Cluster (NDB) & Memcache setup •  Sample Application

•  Resources to Get Started

Copyright © 2012 Oracle Corp.

Page 4: MySQL Cluster NoSQL Memcached API

MySQL Cluster

• Auto-Sharding, Multi-Master • ACID Compliant, OLTP + Real-Time Analytics

HIGH SCALE, READS + WRITES

• Shared nothing, no Single Point of Failure • Self Healing + On-Line Operations

99.999% AVAILABILITY

• Open Source + Commercial Editions • Commodity hardware + Management, Monitoring Toos LOW TCO

• Key/Value + Complex, Relational Queries • SQL + Memcached + Java + JPA + HTTP/REST + C++ SQL + NoSQL

• High Load, Real Time Performance • Predictable Low-Latency, Bounded Access Time REAL-TIME

Copyright © 2012 Oracle Corp.

Page 5: MySQL Cluster NoSQL Memcached API

MySQL Cluster 7.2 70x Faster JOINs

Fastest Ramp…Ever

8x Higher Per Node Performance

writes

NoSQL Memcached API

Geo-Distributed Clusters

Page 6: MySQL Cluster NoSQL Memcached API

Memcached API

Copyright © 2012 Oracle Corp.

Page 7: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

Memcached Overview

Memcache Client

Application memcached

memcached

memcached memcache key friends:12389!

hash key to find data

hash key to pick server

Page 8: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

Memcache Protocol Elements

• Key Up to 250 characters • Expire Time A number in seconds, up to 30 days •  Flags 32-bit number for application use • CAS ID 64-bit incrementing version number on value • Value Value stored for key; traditionally up to 1 MB.

Page 9: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

Memcache Protocol Commands (1)

•  get key Fetch value for this key •  set key value Store this data •  add key value Store this data (strict insert) •  replace key value Store this data (strict update) •  cas key value cas-id Update with version number check

Page 10: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

Memcache Protocol Commands (2)

•  append key value Append text to current value •  prepend key value Insert text before current value •  incr key amount Add to current stored integer value •  decr key amount Subtract from current stored value •  delete key Delete a key and value •  flush_all Delete all stored values on the server •  stats stat-name Fetch server statistics

Page 11: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

Traditional architecture: Memcached & MySQL

MySQL Slave

more storage (on disk)!more powerful protocol (SQL)!

higher throughput !

lower latency!

mysql client

memcached Memcache

Client

Application

Page 12: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

NDB & Memcache Architecture: Memcache protocol + NDB storage

MySQL Cluster

Data Node memcached

Memcache Client

Application

MySQL Cluster

Data Node

NDB Engine

Page 13: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

Goals • Access stored data directly from memcache client •  Memcached perspective:

•  MySQL Cluster is a write-scalable, replicated data store •  with reliable in-memory storage, •  plus on-disk storage when data is too big for memory.

•  MySQL Cluster perspective: •  memcache is a high performance API •  providing easy access to in-memory data, •  plus an extra layer of caching when data is on disk.

Page 14: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

Measured Latency memcachetest -t 2 -M 7000 -c 25000 !

Page 15: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

Configuration Overview NDB Memcache

Page 16: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

Anatomy of a Memcache key

user:1248

the prefix the database key

Page 17: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

A key-prefix mapping

Memcache key

prefix Cluster Container Cache

Policy

Page 18: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

key prefix Cluster Con-

tainer Cache Policy

Server Role

ID

A memcache server role

key prefix Cluster Con-

tainer Cache Policy

key prefix Cluster Con-

tainer Cache Policy

key prefix Cluster Con-

tainer Cache Policy

Page 19: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

Getting Started MySQL Cluster and Memcached

Page 20: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

“Cluster on a laptop”

• Configuration file cluster.ini • Management server ndb_mgmd • Data node ndbd • MySQL server mysqld • Memcached server memcached

(All of these are present in MySQL Cluster 7.2 distribution)

Page 21: MySQL Cluster NoSQL Memcached API

Cluster Configuration File

A single central file for the whole cluster Loaded by the management server on --initial And then stored in cache for future restarts Sections:

[MGM] [DB DEFAULT] [NDBD] [API]

Copyright © 2012 Oracle Corp.

Page 22: MySQL Cluster NoSQL Memcached API

[MGM] section: Management Server

[MGM]NodeId=1datadir=/Users/jdd/sandbox/ndbhostname=localhost

Copyright © 2012 Oracle Corp.

Page 23: MySQL Cluster NoSQL Memcached API

[DB DEFAULT] Section: data node parameters

[DB DEFAULT]NoOfReplicas=1TimeBetweenGlobalCheckpoints=12000HeartbeatIntervalDbApi=15000DataMemory=180MIndexMemory=60M

Copyright © 2012 Oracle Corp.

Page 24: MySQL Cluster NoSQL Memcached API

[NDBD] Sections: individual data node

[NDBD]NodeId=2

Copyright © 2012 Oracle Corp.

Page 25: MySQL Cluster NoSQL Memcached API

[API] Sections for MySQL & Memcached servers

[API][API][API][API][API][API][API]

Copyright © 2012 Oracle Corp.

Page 26: MySQL Cluster NoSQL Memcached API

Complete cluster.ini file [MGM]NodeId=1datadir=/Users/jdd/sandbox/ndbhostname=localhost[DB DEFAULT]NoOfReplicas=1TimeBetweenGlobalCheckpoints=12000HeartbeatIntervalDbApi=15000DataMemory=180MIndexMemory=60M[NDBD]NodeId=2[API][API] ...

Copyright © 2012 Oracle Corp.

Page 27: MySQL Cluster NoSQL Memcached API

Start the Management Server

% ndb_mgmd -f config-file-path

Copyright © 2012 Oracle Corp.

Page 28: MySQL Cluster NoSQL Memcached API

Start the Data Node

% ndbd

Copyright © 2012 Oracle Corp.

Page 29: MySQL Cluster NoSQL Memcached API

Configure & start mysqld (my.cnf file)

[mysqld]ndbcluster

Copyright © 2012 Oracle Corp.

Page 30: MySQL Cluster NoSQL Memcached API

Load NDB Memcache configuration tables

% cd /usr/local/mysql/share/memcache-api% mysql -u root < ndb_memcache_metadata.sql

Copyright © 2012 Oracle Corp.

Page 31: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

Sample Application

Page 32: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

"Twitter-like" Application

•  Two Tables •  authors •  tweets

•  Three Perl Functions •  Create a new author record •  Insert a new tweet •  Increment an author's tweet count

Page 33: MySQL Cluster NoSQL Memcached API

Required Perl Modules

% cpan install Cache::Memcached% cpan install UUID::Tiny

Copyright © 2012 Oracle Corp.

Page 34: MySQL Cluster NoSQL Memcached API

Sample Application

% mysql -u rootmysql> CREATE DATABASE demo; use demo;

Copyright © 2012 Oracle Corp.

Page 35: MySQL Cluster NoSQL Memcached API

Data Definition: Authors

CREATE TABLE authors ( author varchar(15) not null, date_created timestamp, tweets bigint unsigned not null default 0, followers bigint unsigned not null default 0, following bigint unsigned not null default 0, PRIMARY KEY (author)) ENGINE=ndb;

Copyright © 2012 Oracle Corp.

Page 36: MySQL Cluster NoSQL Memcached API

Data Definition: Tweets

CREATE TABLE tweets ( id varchar(36) primary key, author varchar(15), time_stamp timestamp, tweet varchar(140), index(time_stamp), index(author))ENGINE=ndb;

Copyright © 2012 Oracle Corp.

Page 37: MySQL Cluster NoSQL Memcached API

Configuration: Use the ndbmemcache config schema

mysql> use ndbmemcache; show tables;

Copyright © 2012 Oracle Corp.

Page 38: MySQL Cluster NoSQL Memcached API

INSERT into containers SET name = 'tweets_table' , db_schema = 'demo' , db_table = 'tweets', key_columns = 'id' , value_columns = 'time_stamp,author,tweet';

INSERT into key_prefixesSET key_prefix = 'tweet:', policy = 'ndb-only', container = 'tweets_table';

Configuration: Create container & key_prefixes

Copyright © 2012 Oracle Corp.

Page 39: MySQL Cluster NoSQL Memcached API

Copyright © 2012 Oracle Corp.

Two key_prefixes for authors table

•  newauthor: •  ADD an author record and set date_created •  tweetcount: •  INCR tweet count for author

Page 40: MySQL Cluster NoSQL Memcached API

INSERT into containers SET name = 'author_new' , db_schema = 'demo' , db_table = 'authors',key_columns = 'author' ,

value_columns = 'date_created';

INSERT into key_prefixesSET key_prefix = 'newauthor:', policy = 'ndb-only', container = 'author_new';

Configuration: New Author

Copyright © 2012 Oracle Corp.

Page 41: MySQL Cluster NoSQL Memcached API

INSERT into containers SET name = 'author_count', db_schema = 'demo', db_table = 'authors', key_columns = 'author', increment_column = 'tweets';

INSERT into key_prefixesSET key_prefix = 'tweetcount:', policy = 'ndb-only', container = 'author_count';

Configuration: Tweet Count

Copyright © 2012 Oracle Corp.

Page 42: MySQL Cluster NoSQL Memcached API

% cd /usr/local/mysql% bin/memcached -E lib/ndb_engine.so

Memcached: Start the server

17-Aug-2012 13:53:32 PDT NDB Memcache 5.5.25-ndb-7.2.7 ...Contacting primary management server (localhost:1186) ... Connected to "localhost:1186" as node id 4.Retrieved 6 key prefixes for server role "default_role".Server started with 4 threads.Priming the pump ... done [0.661 sec].

Copyright © 2012 Oracle Corp.

Page 43: MySQL Cluster NoSQL Memcached API

use Cache::Memcached;use UUID::Tiny;our $mc = new Cache::Memcached( { 'servers' => [ "localhost:11211" ]});

Perl: Startup Code

Copyright © 2012 Oracle Corp.

Page 44: MySQL Cluster NoSQL Memcached API

Perl: Add a new author

## Takes one parameter: authorsub new_author { my $author = shift; my $time = time(); my $key = "newauthor:$author"; $mc->add($key, $time);}

Copyright © 2012 Oracle Corp.

Page 45: MySQL Cluster NoSQL Memcached API

## Take two parameters: author and tweetsub insert_tweet { my $author = shift; my $tweet = shift; my $id = create_UUID_as_string(UUID_V4); my $time = time(); # Insert the tweet my $key = "tweet:$id"; my $value = "$time" ."\t". $author ."\t". $tweet; $mc->add($key, $value);}

Perl: Insert a Tweet

Copyright © 2012 Oracle Corp.

Page 46: MySQL Cluster NoSQL Memcached API

## Increment the author's tweet count.## Take one parameter: authorsub increment_tweetcount { my $author = shift; my $key = "tweetcount:$author"; $mc->incr($key, 1);}

Perl: Increment Tweet Count

Copyright © 2012 Oracle Corp.

Page 47: MySQL Cluster NoSQL Memcached API

Download MySQL Cluster + Memcached API

http://www.mysql.com/downloads/cluster/#downloads

Page 48: MySQL Cluster NoSQL Memcached API

Most secure, scalable MySQL Database, Development / Management / Monitoring Tools, backed by Oracle Premier Lifetime Support

Oracle Premier Support

Oracle Product Certifications/Integrations

MySQL Enterprise Security

MySQL Enterprise Scalability

MySQL Enterprise Backup

MySQL Enterprise Monitor/Query Analyzer

MySQL Workbench

MySQL Cluster CGE

MySQL Cluster

Manager

Page 49: MySQL Cluster NoSQL Memcached API

•  Straight from the Source •  Largest Team of MySQL Experts •  Direct Access to MySQL Support Engineers •  Backed by MySQL Developers •  Global 24/7/365, 29 languages •  Forward Compatible Hot Fixes •  MySQL Maintenance Releases •  Unlimited Incidents •  Knowledge Base •  MySQL Consultative Support

Oracle Premier Support for MySQL Rely on The Experts - Get Unique Benefits

"The MySQL support service has been essential in helping us with troubleshooting and providing recommendations for the production cluster, Thanks." -- Carlos Morales – Playfulplay.com

Only From Oracle

Page 50: MySQL Cluster NoSQL Memcached API

Getting Started

Learn More

Get MySQL Cluster 7.2 Review Documentation

Scaling Web Databases Guide www.mysql.com/cluster/

Download Today http://www.mysql.com/downloads/cluster/

Copyright 2011 Oracle Corporation 50

https://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-ndbmemcache.html

Page 51: MySQL Cluster NoSQL Memcached API

Summary

Scale Web Services with 99.999% Availability

Native Memcached NoSQL Access

Try it out Today!

Copyright 2011 Oracle Corporation 51

Page 52: MySQL Cluster NoSQL Memcached API
Page 53: MySQL Cluster NoSQL Memcached API

MySQL Cluster Architecture

Data Nodes

Node Group 1

F1

F3

F3

F1

Nod

e 1

Nod

e 2

Node Group 2

F2

F4

F4

F2

Nod

e 3

Nod

e 4

Application Nodes

Cluster Mgmt

Cluster Mgmt

REST JPA

Page 54: MySQL Cluster NoSQL Memcached API

MySQL Cluster - Extreme Resilience

Data Nodes

Node Group 1

F1

F3

F3

F1

Nod

e 1

Nod

e 2

Node Group 2

F2

F4

F4

F2

Nod

e 3

Nod

e 4

Application Nodes

Cluster Mgmt

Cluster Mgmt

REST JPA