SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
HandlerSocket and similar Technologies -
NoSQL for MySQL


            FOSDEM, Brussels
            5./6. February 2011

               Oli Sennhauser
          Senior MySQL Consultant at FromDual

          oli.sennhauser@fromdual.com



                     www.fromdual.com           1
Contents

  NoSQL for MySQL
  ➢
      NoSQL Trends
  ➢
      SQL Overhead
  ➢
      HandlerSocket
  ➢
      NDB-API
  ➢
      BLOB Streaming Engine
  ➢
      Handler Interface
  ➢
      Graph Storage Engine




                        www.fromdual.com   2
About FromDual
●   We provide neutral and vendor independent:
    ●   Consulting (on-site and remote)
    ●   Remote-DBA / MySQL Operation Services
    ●   Support
    ●   Training (DBA, Performance Tuning, Scale-Out, High
        Availability, MySQL Cluster)
●   We are consulting partner of the Open Database
    Alliance (ODBA.org)
●   Oracle Silver Partner (OPN)


                     http://www.fromdual.com
                             www.fromdual.com                3
Trends
                            NoSQL




MySQL


         www.fromdual.com           4
What is the problem?

                           Storage Engine part



                             SQL overhead




●   SQL overhead is up to 70-80% for simple queries (~ 1 ms)!
●   with NO SQL → we could be up to 5 times faster
●   SQL is made for complex queries
●   NoSQL typically solves simple queries


                            www.fromdual.com                    5
Where does this overhead come
from?
             Application / Client

  Thread            Connection          mysqld
  Cache              Manager                                       Parser
                                             Optimizer
                      User Au-
                    thentication
                                        Access Control
                    Command                                           Table Open
  Logging
                    Dispatcher                                       Cache (.frm, fh)
                                         Table Manager
   Query            Query Cache                                      Table Definition
   Cache              Module                                         Cache (tbl def.)

                                     Handler Interface


  MyISAM   InnoDB    Memory   NDB      PBXT        Aria   XtraDB    Federated-X   ...


                                    www.fromdual.com                                    6
What can we do about?
●   HandlerSocket (2010)
●   NDB-API (1997!)
●   PrimeBase Streaming Engine (2008)
●   Handler Interface (2001/2011)
●   OQGRAPH SE (2009)




                      www.fromdual.com   7
HandlerSocket
●   October 20, 2010, Yoshinori Matsunobu:
    Using MySQL as a NoSQL - A story for ex-
    ceeding 750,000 qps on a commodity server




                    www.fromdual.com            8
SELECT

# SELECT * FROM test.test where id = 42;

use Net::HandlerSocket;

my $args = { host => 'master', port => 9998 };
my $hs = new Net::HandlerSocket($args);

my $res = $hs­>open_index(0, 'test', 'test', 'PRIMARY', 'id,data,ts');

$res = $hs­>execute_single(0, '=', [ '42' ], 1, 0);
shift(@$res);
for (my $row = 0; $row < 1; ++$row) {
  print "$idt$datat$tsn";
}

$hs­>close();



                            www.fromdual.com                             9
Infos
●   Compile yourself (easy!)
●   7.5 times more throughput?!?
●   Works with 5.5.8 and MariaDB
●   Faster than mem-
    cached!?!
●   In Percona-Server
    12.3

                     www.fromdual.com   10
Features / functionality
●   Different query patterns (see also handler interface later)
●   Lots of concurrent connections
●   Highly performant (200 – 700%)
●   No duplicate cache (MySQL and memcached)
●   No data inconsistency (MySQL and memcache)
●   Crash-safe
●   SQL access as well (for complex queries like reporting)
●   No need to modify/rebuild MySQL ?!?
●   Theoretically works for other storage engines as well (I did not
    test it).


                              www.fromdual.com                     11
NDB-API
●   1997, Mikael Ronström: The NDB Cluster – A
    parallel data server for telecommunications
    applications
●   November 25, 2008, Jonas Oreland: 950'000
    reads per second on 1 datanode




                    www.fromdual.com            12
MySQL Cluster
    Application   Application      Application     Application     Application
     NDB-API       NDB-API
                                                   Load balancer

                                   SQL Node 1      SQL Node 2      SQL Node 3
                                                                                 ...
Mgm Node 1


Mgm Node 2
                     Data Node 1            Data Node 2


                                     Sw.
                                      Sw.

                     Data Node 3            Data Node 4


                                www.fromdual.com                                  13
INSERT

// INSERT INTO cars VALUES (reg_no, brand, color);

const NdbDictionary::Dictionary* myDict= myNdb­>getDictionary();
const NdbDictionary::Table *myTable= myDict­>getTable("cars");

NdbTransaction* myTrans = myNdb­>startTransaction();
NdbOperation* myNdbOperation = myTrans­>getNdbOperation(myTable);

myNdbOperation­>insertTuple();
myNdbOperation­>equal("REG_NO", reg_no);
myNdbOperation­>setValue("BRAND", brand);
myNdbOperation­>setValue("COLOR", color);

int check = myTrans­>execute(NdbTransaction::Commit);

myTrans­>close();




                            www.fromdual.com                        14
SELECT
// SELECT * FROM cars;

const NdbDictionary::Dictionary* myDict= myNdb­>getDictionary();
const NdbDictionary::Table *myTable= myDict­>getTable("cars");

myTrans = myNdb­>startTransaction();
myScanOp = myTrans­>getNdbScanOperation(myTable);   
myScanOp­>readTuples(NdbOperation::LM_CommittedRead)

myRecAttr[0] = myScanOp­>getValue("REG_NO");
myRecAttr[1] = myScanOp­>getValue("BRAND");
myRecAttr[2] = myScanOp­>getValue("COLOR");

myTrans­>execute(NdbTransaction::NoCommit);

while ((check = myScanOp­>nextResult(true)) == 0) {
    
  std::cout << myRecAttr[0]­>u_32_value() << "t";
  std::cout << myRecAttr[1]­>aRef() << "t";
  std::cout << myRecAttr[2]­>aRef() << std::endl;
}
myNdb­>closeTransaction(myTrans);




                                   www.fromdual.com                15
Benchmarks and numbers
    ●   ./flexAsynch -ndbrecord -temp -con 4 -t 16
        -p 312 -l 3 -a 2 -r 2
    ●   From the MySQL Cluster test suite
        (src/storage/ndb/test/ndbapi)
●   16 number of concurrent threads (-t)             ●   4 concurrent connections (-con)
    312 number of parallel operation per thread
●
                                                     ●   2 number of records (-r ?)
●   3 iterations (-l)
                                                     ●   1 32-bit word per attribute
●   2 attributes per table (8 bytes) (-a)
                                                     ●   1 ndbmtd (1 NoOfRepl.)

    insert average: 506506/s min: 497508/s max: 522613/s stddev: 2%
    update average: 503664/s min: 495533/s max: 507833/s stddev: 1%
    delete average: 494225/s min: 474705/s max: 518272/s stddev: 3%
    read   average: 980386/s min: 942242/s max: 1028006/s stddev: 2%



                                            www.fromdual.com                               16
Learnings
●   Observations
    ● CPU's not maxed out. "Somewhere" is potential !?!
    ● When you overdo: CPU is maxed out and performance

      drops to 14%!
●   The fakes:
    ● Look at the parameters!
    ● All other setups: I got worse throughput


    ● IP instead of localhost: 89% throughput


●   Learnings:
    ●   Do not trust benchmarks you did not fake yourself!


                             www.fromdual.com                17
BLOB Streaming Project
●   April 2008, Paul McCullagh: Introduction to
    the BLOB Streaming Project
●   March 5 2010, Barry Leslie: Upload 1000+
    BLOB's per second!




                     www.fromdual.com             18
BLOB's local and in the cloud




             www.fromdual.com   19
Advantages of BLOB's in the
database
●   old: RDBMS are not fast in storing BLOB's
    → do NOT store BLOB's in the databases
●   new: With NoSQL technologies it becomes much
    better!
●   With PBSE: atomic transactions → No “dangling”
    references.
●   BLOB's in the normal database Backup !?!
●   BLOB's can be replicated
●   BLOB's in the DB will scale better. Most file systems
    perform poorly when the number of files exceeds 2
    million ?
                         www.fromdual.com                   20
The Handler Interface
●   October 2001, MySQL manual: A new
    HANDLER interface to MyISAM tables
●   December 27, 2010, Stephane Varoqui:
    Using MySQL as a NoSQL: a story for
    exceeding 450'000 qps with MariaDB
●   January 10, 2011, Stephane Varoqui: 20% to
    50% improvement in MariaDB 5.3 Handler
    Interface using prepared statement


                    www.fromdual.com         21
Skipping overhead with Handler
Interface
             Application / Client

   Thread           Connection          mysqld
   Cache             Manager                                       Parser
                                             Optimizer
                      User Au-
                    thentication
                                        Access Control
                    Command                                           Table Open
  Logging
                    Dispatcher                                       Cache (.frm, fh)
                                         Table Manager
   Query            Query Cache                                      Table Definition
   Cache              Module                                         Cache (tbl def.)

                                     Handler Interface


  MyISAM   InnoDB    Memory   NDB      PBXT        Aria   XtraDB    Federated-X   ...


                                    www.fromdual.com                                    22
HANDLER Example
# MySQL
# SELECT * FROM family;
                                                HANDLER tbl OPEN
HANDLER family OPEN;
                                                HANDLER tbl READ idx (..., ..., …)
HANDLER family
                                                  WHERE ... LIMIT ...
   READ `PRIMARY` = (id)
  WHERE id = 1;
                                                HANDLER tbl READ idx FIRST
HANDLER family CLOSE;
                                                  WHERE ... LIMIT ...
                                                HANDLER tbl READ idx NEXT
                                                  WHERE ... LIMIT ...
# With MariaDB 5.3
                                                HANDLER tbl READ idx PREV
                                                  WHERE ... LIMIT ...
HANDLER family OPEN;
                                                HANDLER tbl READ idx LAST
PREPARE stmt
                                                  WHERE ... LIMIT ...
   FROM 'HANDLER family
            READ `PRIMARY` = (id)
                                                HANDLER tbl READ FIRST
           WHERE id = ?';
                                                  WHERE ... LIMIT ...
set @id=1;
                                                HANDLER tbl READ NEXT
EXECUTE stmt USING @id;
                                                  WHERE ... LIMIT ...
DEALLOCATE PREPARE stmt;
HANDLER family CLOSE;
                                                HANDLER tbl CLOSE
Use persistent connections!!!



                                    www.fromdual.com                                 23
Characteristics of the Handler
Interface
●   HANDLER is faster than SELECT:
    ●   Less parsing involved
    ●   No optimizer overhead
    ●   Less query-checking overhead
    ●   The table does not have to be locked between two handler
        requests
●   No consistent look of the data (dirty reads are permitted)
●   Some optimizations possible that SELECT does not allow
●   Traverse the database in a manner that is difficult (or even
    impossible) to accomplish with SELECT



                                www.fromdual.com                   24
A Graph Storage Engine
●   May 5, 2009, Arjen Lentz: OQGRAPH
    Computation Engine for MySQL, MariaDB &
    Drizzle




●   It's included in MariaDB 5.1 ff.
●   And available for MySQL 5.0 ff.
                       www.fromdual.com       25
How does it feel?
●   It is similar to MEMORY SE (persistency, locking, trx)
●   We talk in:                                      Node
    ●   Node/Item/vertex and
    ●   Edge/connection/link
●   Edges have a direction
                                                               Edge
●   We can do networks and hierarchies
    ●   (family relations, friends of friends, fastest way from a to b)
●   To talk to the OQGRAPH SE we use the latches (which
    algorithm to use)
●   It is a computational engine not a storage engine!


                                  www.fromdual.com                        26
Simple example: My family
                                             SELECT f1.name AS parent, f2.name AS child
INSERT INTO family VALUES                      FROM relation AS r
  (1, 'Grand­grand­ma')                        JOIN family f1 ON f1.id = r.origid
, (2, 'Grand­ma')                              JOIN family f2 ON f2.id = r.destid;
, (3, 'Grand­uncle')
, (4, 'Grand­aunt')                          +­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­+
, (5, 'Grand­pa')                            | parent         | child       |
, (6, 'Mother')                              +­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­+
, (7, 'Uncle 1')                             | Grand­grand­ma | Grand­ma    |
, (8, 'Uncle 2')                             | Grand­grand­ma | Grand­uncle |
, (9, 'Father')                              | Grand­grand­ma | Grand­aunt  |
, (10, 'Me')                                 | Grand­ma       | Mother      |
, (11, 'Sister');                            | Grand­ma       | Uncle 1     |
                                             | Grand­ma       | Uncle 2     |
INSERT INTO relation (origid, destid)        | Grand­pa       | Mother      |
VALUES                                       | Grand­pa       | Uncle 1     |
  (1, 2), (1, 3), (1, 4)                     | Grand­pa       | Uncle 2     |
, (2, 6), (2, 7), (2, 8)                     | Mother         | Me          |
, (5, 6), (5, 7), (5, 8)                     | Mother         | Sister      |
, (6, 10), (6, 11)                           | Father         | Me          |
, (9, 10), (9, 11);                          | Father         | Sister      |
                                             +­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­+



                                   www.fromdual.com                                   27
Network queries

                                                       SELECT r.weight, r.seq, f.name
                                                         FROM relation AS r
SELECT GROUP_CONCAT(f.name SEPARATOR ' ­> ')             JOIN family AS f ON (r.linkid = f.id)
       AS path
       AS path                                          WHERE r.latch = 2
  FROM relation AS r
  FROM relation AS r
                                                          AND r.destid = 10;
  JOIN family AS f ON (r.linkid = f.id)
  JOIN family AS f ON (r.linkid = f.id)
 WHERE latch = 1
   AND origid = 1
   AND origid = 1
   AND destid = 10
   AND destid = 10                                     +­­­­­­­­+­­­­­­+­­­­­­­­­­­­­­­­+
ORDER BY seq;                                          | weight | seq  | name           |
                                                       +­­­­­­­­+­­­­­­+­­­­­­­­­­­­­­­­+
                                                       |      3 |    6 | Grand­grand­ma |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+         |      2 |    5 | Grand­pa       |
| path                                       |         |      2 |    4 | Grand­ma       |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+         |      1 |    3 | Father         |
| Grand­grand­ma ­> Grand­ma ­> Mother ­> Me |         |      1 |    2 | Mother         |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
                                                       |      0 |    1 | Me             |
                                                       +­­­­­­­­+­­­­­­+­­­­­­­­­­­­­­­­+
latch = 1: Find shortest path (Dijkstra)
latch = 1: Find shortest path (Dijkstra)
                                                       latch = 2: Find originating nodes
                                                                  (Breadth­first search)




                                           www.fromdual.com                                      28
Resume
●   SQL is good for complex queries
●   NoSQL is typically for simple queries
●   Be careful with performance numbers!
●   Architecture / coding becomes more
    complex
●   You can gain better performance

●   But it is interesting like hell!
                       www.fromdual.com     29
Literature
●   Using MySQL as a NoSQL - A story for exceeding 750,000 qps on a commodity server:
    http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html
●   950k reads per second on 1 datanode: http://jonasoreland.blogspot.com/2008/11/950k-reads-
    per-second-on-1-datanode.html
●   Scalable BLOB Streaming Infrastructure for MySQL and Drizzle:
    http://www.blobstreaming.org/
●   HandlerSocket: Why did our version not take off?
    http://pbxt.blogspot.com/2010/12/handlersocket-why-did-out-version-did.html
●   Using MySQL as a NoSQL: a story for exceeding 450000 qps with MariaDB:
    http://varokism.blogspot.com/2010/12/using-mysql-as-nosql-story-for_27.html
●   HANDLER Syntax: http://dev.mysql.com/doc/refman/5.5/en/handler.html
●   GRAPH Computation Engine – Documentation: http://openquery.com/graph/doc




                                        www.fromdual.com                                   30
Q&A


                Questions ?

                Discussion?


      We have some slots free to provide
      you personal consulting services...


                   www.fromdual.com         31

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

FOSDEM 2015: gdb tips and tricks for MySQL DBAs
FOSDEM 2015: gdb tips and tricks for MySQL DBAsFOSDEM 2015: gdb tips and tricks for MySQL DBAs
FOSDEM 2015: gdb tips and tricks for MySQL DBAs
 
High-availability with Galera Cluster for MySQL
High-availability with Galera Cluster for MySQLHigh-availability with Galera Cluster for MySQL
High-availability with Galera Cluster for MySQL
 
MySQL Parallel Replication: inventory, use-case and limitations
MySQL Parallel Replication: inventory, use-case and limitationsMySQL Parallel Replication: inventory, use-case and limitations
MySQL Parallel Replication: inventory, use-case and limitations
 
Tracing and profiling my sql (percona live europe 2019) draft_1
Tracing and profiling my sql (percona live europe 2019) draft_1Tracing and profiling my sql (percona live europe 2019) draft_1
Tracing and profiling my sql (percona live europe 2019) draft_1
 
MySQL/MariaDB Parallel Replication: inventory, use-case and limitations
MySQL/MariaDB Parallel Replication: inventory, use-case and limitationsMySQL/MariaDB Parallel Replication: inventory, use-case and limitations
MySQL/MariaDB Parallel Replication: inventory, use-case and limitations
 
MySQL Parallel Replication: inventory, use-cases and limitations
MySQL Parallel Replication: inventory, use-cases and limitationsMySQL Parallel Replication: inventory, use-cases and limitations
MySQL Parallel Replication: inventory, use-cases and limitations
 
Gdb basics for my sql db as (percona live europe 2019)
Gdb basics for my sql db as (percona live europe 2019)Gdb basics for my sql db as (percona live europe 2019)
Gdb basics for my sql db as (percona live europe 2019)
 
Riding the Binlog: an in Deep Dissection of the Replication Stream
Riding the Binlog: an in Deep Dissection of the Replication StreamRiding the Binlog: an in Deep Dissection of the Replication Stream
Riding the Binlog: an in Deep Dissection of the Replication Stream
 
MariaDB Server on macOS - FOSDEM 2022 MariaDB Devroom
MariaDB Server on macOS -  FOSDEM 2022 MariaDB DevroomMariaDB Server on macOS -  FOSDEM 2022 MariaDB Devroom
MariaDB Server on macOS - FOSDEM 2022 MariaDB Devroom
 
How to Monitor MySQL
How to Monitor MySQLHow to Monitor MySQL
How to Monitor MySQL
 
What's New in MySQL 5.7
What's New in MySQL 5.7What's New in MySQL 5.7
What's New in MySQL 5.7
 
Gdb basics for my sql db as (openfest 2017) final
Gdb basics for my sql db as (openfest 2017) finalGdb basics for my sql db as (openfest 2017) final
Gdb basics for my sql db as (openfest 2017) final
 
MySQLドライバの改良と軽量O/Rマッパーの紹介
MySQLドライバの改良と軽量O/Rマッパーの紹介MySQLドライバの改良と軽量O/Rマッパーの紹介
MySQLドライバの改良と軽量O/Rマッパーの紹介
 
Kvm optimizations
Kvm optimizationsKvm optimizations
Kvm optimizations
 
MySQL Parallel Replication (LOGICAL_CLOCK): all the 5.7 (and some of the 8.0)...
MySQL Parallel Replication (LOGICAL_CLOCK): all the 5.7 (and some of the 8.0)...MySQL Parallel Replication (LOGICAL_CLOCK): all the 5.7 (and some of the 8.0)...
MySQL Parallel Replication (LOGICAL_CLOCK): all the 5.7 (and some of the 8.0)...
 
Tuning Linux for Databases.
Tuning Linux for Databases.Tuning Linux for Databases.
Tuning Linux for Databases.
 
More on bpftrace for MariaDB DBAs and Developers - FOSDEM 2022 MariaDB Devroom
More on bpftrace for MariaDB DBAs and Developers - FOSDEM 2022 MariaDB DevroomMore on bpftrace for MariaDB DBAs and Developers - FOSDEM 2022 MariaDB Devroom
More on bpftrace for MariaDB DBAs and Developers - FOSDEM 2022 MariaDB Devroom
 
OpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto García
OpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto GarcíaOpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto García
OpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto García
 
Gluster volume snapshot
Gluster volume snapshotGluster volume snapshot
Gluster volume snapshot
 
The New MariaDB Offering - MariaDB 10, MaxScale and more
The New MariaDB Offering - MariaDB 10, MaxScale and moreThe New MariaDB Offering - MariaDB 10, MaxScale and more
The New MariaDB Offering - MariaDB 10, MaxScale and more
 

Destacado (9)

NoSQL with MySQL
NoSQL with MySQLNoSQL with MySQL
NoSQL with MySQL
 
MySQL - New Features 5.6
MySQL - New Features 5.6MySQL - New Features 5.6
MySQL - New Features 5.6
 
MySQL for Oracle DBAs
MySQL for Oracle DBAsMySQL for Oracle DBAs
MySQL for Oracle DBAs
 
MySQL Performance Tuning für Entwickler
MySQL Performance Tuning für EntwicklerMySQL Performance Tuning für Entwickler
MySQL Performance Tuning für Entwickler
 
OpenExpo: MySQL, Where are you going?
OpenExpo: MySQL, Where are you going?OpenExpo: MySQL, Where are you going?
OpenExpo: MySQL, Where are you going?
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQL
 
Froscon 2012 DWH
Froscon 2012 DWHFroscon 2012 DWH
Froscon 2012 DWH
 
MySQL configuration - The most important Variables
MySQL configuration - The most important VariablesMySQL configuration - The most important Variables
MySQL configuration - The most important Variables
 
FOSDEM 2012: New Features in MySQL 5.6
FOSDEM 2012: New Features in MySQL 5.6FOSDEM 2012: New Features in MySQL 5.6
FOSDEM 2012: New Features in MySQL 5.6
 

Similar a NoSQL with MySQL

Ukoug 2011 mysql_arch_for_orcl_dba
Ukoug 2011 mysql_arch_for_orcl_dbaUkoug 2011 mysql_arch_for_orcl_dba
Ukoug 2011 mysql_arch_for_orcl_dba
orablue11
 
UKOUG 2011: Practical MySQL Tuning
UKOUG 2011: Practical MySQL TuningUKOUG 2011: Practical MySQL Tuning
UKOUG 2011: Practical MySQL Tuning
FromDual GmbH
 
NewSQL Database Overview
NewSQL Database OverviewNewSQL Database Overview
NewSQL Database Overview
Steve Min
 
MySQL High Availability Solutions
MySQL High Availability SolutionsMySQL High Availability Solutions
MySQL High Availability Solutions
Lenz Grimmer
 
Mysqlhacodebits20091203 1260184765-phpapp02
Mysqlhacodebits20091203 1260184765-phpapp02Mysqlhacodebits20091203 1260184765-phpapp02
Mysqlhacodebits20091203 1260184765-phpapp02
Louis liu
 
Locality of (p)reference
Locality of (p)referenceLocality of (p)reference
Locality of (p)reference
FromDual GmbH
 
Fosdem2012 mariadb-5.3-query-optimizer-r2
Fosdem2012 mariadb-5.3-query-optimizer-r2Fosdem2012 mariadb-5.3-query-optimizer-r2
Fosdem2012 mariadb-5.3-query-optimizer-r2
Sergey Petrunya
 

Similar a NoSQL with MySQL (20)

Ukoug 2011 mysql_arch_for_orcl_dba
Ukoug 2011 mysql_arch_for_orcl_dbaUkoug 2011 mysql_arch_for_orcl_dba
Ukoug 2011 mysql_arch_for_orcl_dba
 
UKOUG 2011: Practical MySQL Tuning
UKOUG 2011: Practical MySQL TuningUKOUG 2011: Practical MySQL Tuning
UKOUG 2011: Practical MySQL Tuning
 
NewSQL Database Overview
NewSQL Database OverviewNewSQL Database Overview
NewSQL Database Overview
 
MySQL High Availability Solutions
MySQL High Availability SolutionsMySQL High Availability Solutions
MySQL High Availability Solutions
 
Mysqlhacodebits20091203 1260184765-phpapp02
Mysqlhacodebits20091203 1260184765-phpapp02Mysqlhacodebits20091203 1260184765-phpapp02
Mysqlhacodebits20091203 1260184765-phpapp02
 
MySQL High Availability Solutions
MySQL High Availability SolutionsMySQL High Availability Solutions
MySQL High Availability Solutions
 
MySQL Cluster (NDB) - Best Practices Percona Live 2017
MySQL Cluster (NDB) - Best Practices Percona Live 2017MySQL Cluster (NDB) - Best Practices Percona Live 2017
MySQL Cluster (NDB) - Best Practices Percona Live 2017
 
MongoDB Devops Madrid February 2012
MongoDB Devops Madrid February 2012MongoDB Devops Madrid February 2012
MongoDB Devops Madrid February 2012
 
mongodb tutorial
mongodb tutorialmongodb tutorial
mongodb tutorial
 
Squeak DBX
Squeak DBXSqueak DBX
Squeak DBX
 
Introduction to Galera Cluster
Introduction to Galera ClusterIntroduction to Galera Cluster
Introduction to Galera Cluster
 
HandlerSocket - A NoSQL plugin for MySQL
HandlerSocket - A NoSQL plugin for MySQLHandlerSocket - A NoSQL plugin for MySQL
HandlerSocket - A NoSQL plugin for MySQL
 
MariaDB und mehr - MariaDB Roadshow Summer 2014 Hamburg Berlin Frankfurt
MariaDB und mehr - MariaDB Roadshow Summer 2014 Hamburg Berlin FrankfurtMariaDB und mehr - MariaDB Roadshow Summer 2014 Hamburg Berlin Frankfurt
MariaDB und mehr - MariaDB Roadshow Summer 2014 Hamburg Berlin Frankfurt
 
"Advanced MySQL 5 Tuning" by Michael Monty Widenius @ eLiberatica 2007
"Advanced MySQL 5 Tuning" by Michael Monty Widenius @ eLiberatica 2007"Advanced MySQL 5 Tuning" by Michael Monty Widenius @ eLiberatica 2007
"Advanced MySQL 5 Tuning" by Michael Monty Widenius @ eLiberatica 2007
 
M|18 How Facebook Migrated to MyRocks
M|18 How Facebook Migrated to MyRocksM|18 How Facebook Migrated to MyRocks
M|18 How Facebook Migrated to MyRocks
 
Locality of (p)reference
Locality of (p)referenceLocality of (p)reference
Locality of (p)reference
 
Fosdem2012 mariadb-5.3-query-optimizer-r2
Fosdem2012 mariadb-5.3-query-optimizer-r2Fosdem2012 mariadb-5.3-query-optimizer-r2
Fosdem2012 mariadb-5.3-query-optimizer-r2
 
EVCache & Moneta (GoSF)
EVCache & Moneta (GoSF)EVCache & Moneta (GoSF)
EVCache & Moneta (GoSF)
 
Open stack HA - Theory to Reality
Open stack HA -  Theory to RealityOpen stack HA -  Theory to Reality
Open stack HA - Theory to Reality
 
MongoDB performance tuning and load testing, NOSQL Now! 2013 Conference prese...
MongoDB performance tuning and load testing, NOSQL Now! 2013 Conference prese...MongoDB performance tuning and load testing, NOSQL Now! 2013 Conference prese...
MongoDB performance tuning and load testing, NOSQL Now! 2013 Conference prese...
 

Más de FromDual GmbH

Más de FromDual GmbH (20)

MariaDB/MySQL pitfalls - And how to come out again...
MariaDB/MySQL pitfalls - And how to come out again...MariaDB/MySQL pitfalls - And how to come out again...
MariaDB/MySQL pitfalls - And how to come out again...
 
MariaDB / MySQL tripping hazard and how to get out again?
MariaDB / MySQL tripping hazard and how to get out again?MariaDB / MySQL tripping hazard and how to get out again?
MariaDB / MySQL tripping hazard and how to get out again?
 
PXC 5.5 to MariaDB 10.4 Galera Cluster Migration Workshop
PXC 5.5 to MariaDB 10.4 Galera Cluster Migration WorkshopPXC 5.5 to MariaDB 10.4 Galera Cluster Migration Workshop
PXC 5.5 to MariaDB 10.4 Galera Cluster Migration Workshop
 
IT Tage 2019 MariaDB 10.4 New Features
IT Tage 2019 MariaDB 10.4 New FeaturesIT Tage 2019 MariaDB 10.4 New Features
IT Tage 2019 MariaDB 10.4 New Features
 
MariaDB 10.4 New Features
MariaDB 10.4 New FeaturesMariaDB 10.4 New Features
MariaDB 10.4 New Features
 
MariaDB 10.2 New Features
MariaDB 10.2 New FeaturesMariaDB 10.2 New Features
MariaDB 10.2 New Features
 
MySQL für Oracle DBA's
MySQL für Oracle DBA'sMySQL für Oracle DBA's
MySQL für Oracle DBA's
 
MySQL Backup/Recovery
MySQL Backup/RecoveryMySQL Backup/Recovery
MySQL Backup/Recovery
 
MySQL Beispiele aus der Praxis - Wie setzen Kunden MySQL ein?
MySQL Beispiele aus der Praxis - Wie setzen Kunden MySQL ein?MySQL Beispiele aus der Praxis - Wie setzen Kunden MySQL ein?
MySQL Beispiele aus der Praxis - Wie setzen Kunden MySQL ein?
 
MySQL-Server im Teamwork - Replikation und Cluster
MySQL-Server im Teamwork - Replikation und ClusterMySQL-Server im Teamwork - Replikation und Cluster
MySQL-Server im Teamwork - Replikation und Cluster
 
Der Datenbank-Backup ist gemacht - was nun?
Der Datenbank-Backup ist gemacht - was nun?Der Datenbank-Backup ist gemacht - was nun?
Der Datenbank-Backup ist gemacht - was nun?
 
Weltweite Produktionsdatenverwaltung mit MySQL-Replikation
Weltweite Produktionsdatenverwaltung mit MySQL-ReplikationWeltweite Produktionsdatenverwaltung mit MySQL-Replikation
Weltweite Produktionsdatenverwaltung mit MySQL-Replikation
 
MySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA'sMySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA's
 
MySQL Security SLAC 2015
MySQL Security SLAC 2015MySQL Security SLAC 2015
MySQL Security SLAC 2015
 
MySQL Replikation - Die Eier legende Wollmilchsau?
MySQL Replikation - Die Eier legende Wollmilchsau?MySQL Replikation - Die Eier legende Wollmilchsau?
MySQL Replikation - Die Eier legende Wollmilchsau?
 
Reading MySQL fingerprints
Reading MySQL fingerprintsReading MySQL fingerprints
Reading MySQL fingerprints
 
MySQL Indexierung CeBIT 2014
MySQL Indexierung CeBIT 2014MySQL Indexierung CeBIT 2014
MySQL Indexierung CeBIT 2014
 
MySQL Cluster with Galera Cluster for MySQL
MySQL Cluster with Galera Cluster for MySQLMySQL Cluster with Galera Cluster for MySQL
MySQL Cluster with Galera Cluster for MySQL
 
MySQL Backup
MySQL BackupMySQL Backup
MySQL Backup
 
Need for Speed: Mysql indexing
Need for Speed: Mysql indexingNeed for Speed: Mysql indexing
Need for Speed: Mysql indexing
 

Último

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Último (20)

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 

NoSQL with MySQL

  • 1. HandlerSocket and similar Technologies - NoSQL for MySQL FOSDEM, Brussels 5./6. February 2011 Oli Sennhauser Senior MySQL Consultant at FromDual oli.sennhauser@fromdual.com www.fromdual.com 1
  • 2. Contents NoSQL for MySQL ➢ NoSQL Trends ➢ SQL Overhead ➢ HandlerSocket ➢ NDB-API ➢ BLOB Streaming Engine ➢ Handler Interface ➢ Graph Storage Engine www.fromdual.com 2
  • 3. About FromDual ● We provide neutral and vendor independent: ● Consulting (on-site and remote) ● Remote-DBA / MySQL Operation Services ● Support ● Training (DBA, Performance Tuning, Scale-Out, High Availability, MySQL Cluster) ● We are consulting partner of the Open Database Alliance (ODBA.org) ● Oracle Silver Partner (OPN) http://www.fromdual.com www.fromdual.com 3
  • 4. Trends NoSQL MySQL www.fromdual.com 4
  • 5. What is the problem? Storage Engine part SQL overhead ● SQL overhead is up to 70-80% for simple queries (~ 1 ms)! ● with NO SQL → we could be up to 5 times faster ● SQL is made for complex queries ● NoSQL typically solves simple queries www.fromdual.com 5
  • 6. Where does this overhead come from? Application / Client Thread Connection mysqld Cache Manager Parser Optimizer User Au- thentication Access Control Command Table Open Logging Dispatcher Cache (.frm, fh) Table Manager Query Query Cache Table Definition Cache Module Cache (tbl def.) Handler Interface MyISAM InnoDB Memory NDB PBXT Aria XtraDB Federated-X ... www.fromdual.com 6
  • 7. What can we do about? ● HandlerSocket (2010) ● NDB-API (1997!) ● PrimeBase Streaming Engine (2008) ● Handler Interface (2001/2011) ● OQGRAPH SE (2009) www.fromdual.com 7
  • 8. HandlerSocket ● October 20, 2010, Yoshinori Matsunobu: Using MySQL as a NoSQL - A story for ex- ceeding 750,000 qps on a commodity server www.fromdual.com 8
  • 10. Infos ● Compile yourself (easy!) ● 7.5 times more throughput?!? ● Works with 5.5.8 and MariaDB ● Faster than mem- cached!?! ● In Percona-Server 12.3 www.fromdual.com 10
  • 11. Features / functionality ● Different query patterns (see also handler interface later) ● Lots of concurrent connections ● Highly performant (200 – 700%) ● No duplicate cache (MySQL and memcached) ● No data inconsistency (MySQL and memcache) ● Crash-safe ● SQL access as well (for complex queries like reporting) ● No need to modify/rebuild MySQL ?!? ● Theoretically works for other storage engines as well (I did not test it). www.fromdual.com 11
  • 12. NDB-API ● 1997, Mikael Ronström: The NDB Cluster – A parallel data server for telecommunications applications ● November 25, 2008, Jonas Oreland: 950'000 reads per second on 1 datanode www.fromdual.com 12
  • 13. MySQL Cluster Application Application Application Application Application NDB-API NDB-API Load balancer SQL Node 1 SQL Node 2 SQL Node 3 ... Mgm Node 1 Mgm Node 2 Data Node 1 Data Node 2 Sw. Sw. Data Node 3 Data Node 4 www.fromdual.com 13
  • 15. SELECT // SELECT * FROM cars; const NdbDictionary::Dictionary* myDict= myNdb­>getDictionary(); const NdbDictionary::Table *myTable= myDict­>getTable("cars"); myTrans = myNdb­>startTransaction(); myScanOp = myTrans­>getNdbScanOperation(myTable);    myScanOp­>readTuples(NdbOperation::LM_CommittedRead) myRecAttr[0] = myScanOp­>getValue("REG_NO"); myRecAttr[1] = myScanOp­>getValue("BRAND"); myRecAttr[2] = myScanOp­>getValue("COLOR"); myTrans­>execute(NdbTransaction::NoCommit); while ((check = myScanOp­>nextResult(true)) == 0) {        std::cout << myRecAttr[0]­>u_32_value() << "t";   std::cout << myRecAttr[1]­>aRef() << "t";   std::cout << myRecAttr[2]­>aRef() << std::endl; } myNdb­>closeTransaction(myTrans); www.fromdual.com 15
  • 16. Benchmarks and numbers ● ./flexAsynch -ndbrecord -temp -con 4 -t 16 -p 312 -l 3 -a 2 -r 2 ● From the MySQL Cluster test suite (src/storage/ndb/test/ndbapi) ● 16 number of concurrent threads (-t) ● 4 concurrent connections (-con) 312 number of parallel operation per thread ● ● 2 number of records (-r ?) ● 3 iterations (-l) ● 1 32-bit word per attribute ● 2 attributes per table (8 bytes) (-a) ● 1 ndbmtd (1 NoOfRepl.) insert average: 506506/s min: 497508/s max: 522613/s stddev: 2% update average: 503664/s min: 495533/s max: 507833/s stddev: 1% delete average: 494225/s min: 474705/s max: 518272/s stddev: 3% read   average: 980386/s min: 942242/s max: 1028006/s stddev: 2% www.fromdual.com 16
  • 17. Learnings ● Observations ● CPU's not maxed out. "Somewhere" is potential !?! ● When you overdo: CPU is maxed out and performance drops to 14%! ● The fakes: ● Look at the parameters! ● All other setups: I got worse throughput ● IP instead of localhost: 89% throughput ● Learnings: ● Do not trust benchmarks you did not fake yourself! www.fromdual.com 17
  • 18. BLOB Streaming Project ● April 2008, Paul McCullagh: Introduction to the BLOB Streaming Project ● March 5 2010, Barry Leslie: Upload 1000+ BLOB's per second! www.fromdual.com 18
  • 19. BLOB's local and in the cloud www.fromdual.com 19
  • 20. Advantages of BLOB's in the database ● old: RDBMS are not fast in storing BLOB's → do NOT store BLOB's in the databases ● new: With NoSQL technologies it becomes much better! ● With PBSE: atomic transactions → No “dangling” references. ● BLOB's in the normal database Backup !?! ● BLOB's can be replicated ● BLOB's in the DB will scale better. Most file systems perform poorly when the number of files exceeds 2 million ? www.fromdual.com 20
  • 21. The Handler Interface ● October 2001, MySQL manual: A new HANDLER interface to MyISAM tables ● December 27, 2010, Stephane Varoqui: Using MySQL as a NoSQL: a story for exceeding 450'000 qps with MariaDB ● January 10, 2011, Stephane Varoqui: 20% to 50% improvement in MariaDB 5.3 Handler Interface using prepared statement www.fromdual.com 21
  • 22. Skipping overhead with Handler Interface Application / Client Thread Connection mysqld Cache Manager Parser Optimizer User Au- thentication Access Control Command Table Open Logging Dispatcher Cache (.frm, fh) Table Manager Query Query Cache Table Definition Cache Module Cache (tbl def.) Handler Interface MyISAM InnoDB Memory NDB PBXT Aria XtraDB Federated-X ... www.fromdual.com 22
  • 23. HANDLER Example # MySQL # SELECT * FROM family; HANDLER tbl OPEN HANDLER family OPEN; HANDLER tbl READ idx (..., ..., …) HANDLER family   WHERE ... LIMIT ...    READ `PRIMARY` = (id)   WHERE id = 1; HANDLER tbl READ idx FIRST HANDLER family CLOSE;   WHERE ... LIMIT ... HANDLER tbl READ idx NEXT   WHERE ... LIMIT ... # With MariaDB 5.3 HANDLER tbl READ idx PREV   WHERE ... LIMIT ... HANDLER family OPEN; HANDLER tbl READ idx LAST PREPARE stmt   WHERE ... LIMIT ...    FROM 'HANDLER family             READ `PRIMARY` = (id) HANDLER tbl READ FIRST            WHERE id = ?';   WHERE ... LIMIT ... set @id=1; HANDLER tbl READ NEXT EXECUTE stmt USING @id;   WHERE ... LIMIT ... DEALLOCATE PREPARE stmt; HANDLER family CLOSE; HANDLER tbl CLOSE Use persistent connections!!! www.fromdual.com 23
  • 24. Characteristics of the Handler Interface ● HANDLER is faster than SELECT: ● Less parsing involved ● No optimizer overhead ● Less query-checking overhead ● The table does not have to be locked between two handler requests ● No consistent look of the data (dirty reads are permitted) ● Some optimizations possible that SELECT does not allow ● Traverse the database in a manner that is difficult (or even impossible) to accomplish with SELECT www.fromdual.com 24
  • 25. A Graph Storage Engine ● May 5, 2009, Arjen Lentz: OQGRAPH Computation Engine for MySQL, MariaDB & Drizzle ● It's included in MariaDB 5.1 ff. ● And available for MySQL 5.0 ff. www.fromdual.com 25
  • 26. How does it feel? ● It is similar to MEMORY SE (persistency, locking, trx) ● We talk in: Node ● Node/Item/vertex and ● Edge/connection/link ● Edges have a direction Edge ● We can do networks and hierarchies ● (family relations, friends of friends, fastest way from a to b) ● To talk to the OQGRAPH SE we use the latches (which algorithm to use) ● It is a computational engine not a storage engine! www.fromdual.com 26
  • 27. Simple example: My family SELECT f1.name AS parent, f2.name AS child INSERT INTO family VALUES   FROM relation AS r   (1, 'Grand­grand­ma')   JOIN family f1 ON f1.id = r.origid , (2, 'Grand­ma')   JOIN family f2 ON f2.id = r.destid; , (3, 'Grand­uncle') , (4, 'Grand­aunt') +­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­+ , (5, 'Grand­pa') | parent         | child       | , (6, 'Mother') +­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­+ , (7, 'Uncle 1') | Grand­grand­ma | Grand­ma    | , (8, 'Uncle 2') | Grand­grand­ma | Grand­uncle | , (9, 'Father') | Grand­grand­ma | Grand­aunt  | , (10, 'Me') | Grand­ma       | Mother      | , (11, 'Sister'); | Grand­ma       | Uncle 1     | | Grand­ma       | Uncle 2     | INSERT INTO relation (origid, destid) | Grand­pa       | Mother      | VALUES | Grand­pa       | Uncle 1     |   (1, 2), (1, 3), (1, 4) | Grand­pa       | Uncle 2     | , (2, 6), (2, 7), (2, 8) | Mother         | Me          | , (5, 6), (5, 7), (5, 8) | Mother         | Sister      | , (6, 10), (6, 11) | Father         | Me          | , (9, 10), (9, 11); | Father         | Sister      | +­­­­­­­­­­­­­­­­+­­­­­­­­­­­­­+ www.fromdual.com 27
  • 28. Network queries SELECT r.weight, r.seq, f.name   FROM relation AS r SELECT GROUP_CONCAT(f.name SEPARATOR ' ­> ')   JOIN family AS f ON (r.linkid = f.id)        AS path        AS path  WHERE r.latch = 2   FROM relation AS r   FROM relation AS r    AND r.destid = 10;   JOIN family AS f ON (r.linkid = f.id)   JOIN family AS f ON (r.linkid = f.id)  WHERE latch = 1    AND origid = 1    AND origid = 1    AND destid = 10    AND destid = 10 +­­­­­­­­+­­­­­­+­­­­­­­­­­­­­­­­+ ORDER BY seq; | weight | seq  | name           | +­­­­­­­­+­­­­­­+­­­­­­­­­­­­­­­­+ |      3 |    6 | Grand­grand­ma | +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+ |      2 |    5 | Grand­pa       | | path                                       | |      2 |    4 | Grand­ma       | +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+ |      1 |    3 | Father         | | Grand­grand­ma ­> Grand­ma ­> Mother ­> Me | |      1 |    2 | Mother         | +­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+ |      0 |    1 | Me             | +­­­­­­­­+­­­­­­+­­­­­­­­­­­­­­­­+ latch = 1: Find shortest path (Dijkstra) latch = 1: Find shortest path (Dijkstra) latch = 2: Find originating nodes            (Breadth­first search) www.fromdual.com 28
  • 29. Resume ● SQL is good for complex queries ● NoSQL is typically for simple queries ● Be careful with performance numbers! ● Architecture / coding becomes more complex ● You can gain better performance ● But it is interesting like hell! www.fromdual.com 29
  • 30. Literature ● Using MySQL as a NoSQL - A story for exceeding 750,000 qps on a commodity server: http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html ● 950k reads per second on 1 datanode: http://jonasoreland.blogspot.com/2008/11/950k-reads- per-second-on-1-datanode.html ● Scalable BLOB Streaming Infrastructure for MySQL and Drizzle: http://www.blobstreaming.org/ ● HandlerSocket: Why did our version not take off? http://pbxt.blogspot.com/2010/12/handlersocket-why-did-out-version-did.html ● Using MySQL as a NoSQL: a story for exceeding 450000 qps with MariaDB: http://varokism.blogspot.com/2010/12/using-mysql-as-nosql-story-for_27.html ● HANDLER Syntax: http://dev.mysql.com/doc/refman/5.5/en/handler.html ● GRAPH Computation Engine – Documentation: http://openquery.com/graph/doc www.fromdual.com 30
  • 31. Q&A Questions ? Discussion? We have some slots free to provide you personal consulting services... www.fromdual.com 31