SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
HandlerSocket und ähnliche
Technologien - NoSQL für MySQL


       Grazer Linuxtage 2011, Graz
               9. April 2011

                Oli Sennhauser
        Senior MySQL Consultant bei FromDual GmbH

          oli.sennhauser@fromdual.com



                      www.fromdual.com              1
Inhalt

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




                        www.fromdual.com   2
Über FromDual
●   Wir bieten neutral und Hersteller unabhängig:
    ●
        Beratung (on-site und remote)
    ●
        Remote-DBA / MySQL Betrieb
    ●
        Support
    ●
        Schulung (DBA, Performance Tuning, Scale-Out,
        High Availability, MySQL Cluster)
●   Wir sind Consulting Partner der Open Database
    Alliance (ODBA.org)
●   Oracle Silver Partner (OPN)

                         www.fromdual.com               3
Trends
                            NoSQL




MySQL


         www.fromdual.com           4
Wo liegt das Problem?

                        Storage Engine Anteil



                         SQL Overhead




●
    SQL Overhead ist 70 – 80% für einfache Queries (~ 1
    ms)!
●
    mit NO SQL → könnten wir bis zu 5 x schneller werden
●
    SQL ist gemacht für komplexe Abfragen
●   NoSQL löst typischerweise einfache Abfragen
                        www.fromdual.com               5
Woher rührt der Ovderhead?
             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
Was können wir dagegen tun?
●   HandlerSocket (2010)
●   NDB-API (1997!)
●   PrimeBase Streaming Engine (2008)
●   Handler Interface (2001/2011)
●   OQGRAPH SE (2009)




                      www.fromdual.com   7
HandlerSocket
●   20. Oktober 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
●   Selber compilieren (einfach!)
●   7.5 mal mehr Durchsatz?!?
●   Funktioniert mit MySQL 5.5.8 und MariaDB
●   Schneller als mem-
    cached!?!
●   Im Percona-Server
    12.3

                     www.fromdual.com          10
Features / Funktionalität
●
    Ermöglicht ganz andere Abfragemuster (siehe auch Handler
    Interface)
●
    Viele concurrent Connections
●
    Hochperformant (200 – 700%)
●
    Keinen doppelten Cache (vs. MySQL und memcached)
●
    Keine Dateninkonsistenz (vs. MySQL und memcached)
●   Crash-safe
●   SQL Zugriff ebenfalls möglich (z. B. für komplexe
    Reportingabfragen)
●   MySQL muss nicht modifiziert/neu gebaut werden?!?
●
    Funktioniert theoretisch auch für andere Storage Engines (ich
    hab's nicht ausprobiert).

                             www.fromdual.com                       11
NDB-API
●   1997, Mikael Ronström:
    The NDB Cluster – A parallel data server for
    telecommunications applications
●   25. November 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 und Zahlen
●    ./flexAsynch -ndbrecord -temp -con 4 -t
     16 -p 312 -l 3 -a 2 -r 2
●    Aus der 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                    ●   2 number of records (-r ?)
     thread                                                  ●   1 32-bit word per attribute
●    3 iterations (-l)
                                                             ●   1 ndbmtd (1 NoOfRepl.)
●    2 attributes per table (8 bytes) (-a)

    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
Lehren
●   Beobachtungen:
    ●
        CPU's sind nicht am Limit. "Igendwo" ist noch Potential !?!
    ●
        Wenn übertrieben wird: CPU ist überlastet und Performance
        fällt auf 14%!
●   Schummeleien:
    ●
        Schau die Parameter genau an!
    ●
        Mit allen anderen Konfigurationen erhielt ich schlechteren
        Duchrsatz!
    ●
        Sobald eine IP anstatt localhost verwendet wird: 89%
        Durchsatz
●   Lehren:
    ●
        Traue keinen Benchmarks, die Du nicht selber manipuliert
        hast!
                              www.fromdual.com                        17
BLOB Streaming Projekt
●   April 2008, Paul McCullagh: Introduction to
    the BLOB Streaming Project
●   5. März 2010, Barry Leslie: Upload 1000+
    BLOB's per second!




                     www.fromdual.com             18
BLOB's lokal und in der Cloud




             www.fromdual.com   19
Vorteile von BLOB's in der
Datenbank
●   alt: RDBMS sind nicht schnell mit dem Speichern von
    BLOB's → BLOB's NICHT in der Datenbank speichern
●
    neu: Mit NoSQL Technologien wird es viel besser!
●
    Mit PBSE: atomare Transaktionen → Keine ins
    Nirgendwo zeigende Referenzen.
●
    BLOB's im normalen Datenbank-Backup !?!
●
    BLOB's können repliziert werden
●
    BLOB's in der DB skallieren besser. Die meisten
    Filesysteme performen schlecht mit mehr als 2
    Millionen Dateien ?

                        www.fromdual.com               20
Das Handler Interface
●   Oktober 2001, MySQL Handbuch: A new
    HANDLER interface to MyISAM tables
●   27. Dezember 2010, Stephane Varoqui:
    Using MySQL as a NoSQL: a story for
    exceeding 450'000 qps with MariaDB
●   10. Januar 2011, Stephane Varoqui: 20% to
    50% improvement in MariaDB 5.3 Handler
    Interface using prepared statement


                    www.fromdual.com            21
Überspringen des Overheads mit
dem 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 Beispiel
# 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
Charakteristik des Handler
Interfaces
●   HANDLER ist schneller als SELECT:
    ●
        Weniger Parsing
    ●
        Kein Optimizer Overhead
    ●
        Weniger Query-Checking Overhead
    ●
        Die Tabelle muss zwischen zwei Handler-Anfragen nicht
        gelocket werden
●   KEINE konsistente Sicht auf die Daten (dirty reads sind
    erlaubt)
●   Optimierungen sind möglich, welche SELECT nicht zulässt
●   Traversieren der Daten auf eine Art, welche schwierig bis
    unmöglich mit SELECT zu erlangen ist

                            www.fromdual.com                    24
Eine Graphen Storage Engine
●   5. Mai 2009, Arjen Lentz: OQGRAPH
    Computation Engine for MySQL, MariaDB &
    Drizzle




●   In MariaDB 5.1 ff.
●   Verfügbar für MySQL 5.0 ff.
                     www.fromdual.com         25
Wie fühlt sich das an?
●   Es ist ähnlich wie die MEMORY SE (Persistenz, Locking,
    trx)
                                        Node
●   Wir sprechen in:
    ●
        Node/Item/Vertex und
    ●
        Edge/Connection/Link
●   Edges haben eine Richtung                    Edge
●   Wir können Netzwerke und Hierarchien abbilden
    ●
        (Familienbeziehungen, Freunde von Freunden, kürzeste
        Strecke von A nach B)
●   Um mit der OQGRAPH SE zu sprechen brauchen wir
    “latches” (welcher Algorithmus zu verwenden ist)
●   Es ist eine “computational engine” nicht eine Storage
    Engine!
                            www.fromdual.com                   26
Einfaches Beispiel: Meine Familie

                                             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
Netzwerk-Abfragen

                                                       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
  FROM relation AS r
                                                        WHERE   r.latch = 2
  JOIN family AS f ON (r.linkid = f.id)                   AND   r.destid = 10;
 WHERE latch = 1
   AND origid = 1
   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 = 2: Find originating nodes
                                                                  (Breadth-first search)




                                           www.fromdual.com                                        28
Übersicht


Technologie               r/w          Trx         Sprachen
MySQL                       ja / ja          ja    “alle”, SQL
HandlerSocket               ja / ja        nein    C++, Perl, Ruby, PHP,
                                                   Java, Pyhton, ...
NDB-API (MySQL Cluster)     ja / ja          ja    C++, Java, (SQL)
PBSE                        ja / ja          ja    C++, SQL
Handler Interface          ja / nein       nein    “alle”, SQL
OQGRAPH SE                  ja / ja        nein    “alle”, SQL




                                www.fromdual.com                           29
Zusammenfassung
●   SQL ist gut für komplexe Abfragen
●   NoSQL üblicherweise für einfache Abfragen
●   Vorsicht mit Performance-Zahlen!
●   Architektur / Programmierung wird
    komplexer
●   Bessere Performance ist möglich

●   Aber es ist verdammt interessant!

                    www.fromdual.com        30
Literatur
●   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                                 31
Q&A


                Fragen ?

              Diskussion?


  Wir haben noch Zeit für persönliche und
         indviduelle Beratungen...


                 www.fromdual.com           32

Más contenido relacionado

La actualidad más candente

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 MySQLFromDual GmbH
 
DOAG 2011: MySQL Replication
DOAG 2011: MySQL ReplicationDOAG 2011: MySQL Replication
DOAG 2011: MySQL ReplicationFromDual GmbH
 
MySQL Replication for Beginners
MySQL Replication for BeginnersMySQL Replication for Beginners
MySQL Replication for BeginnersFromDual GmbH
 
DOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance TuningDOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance TuningFromDual GmbH
 
MySQL Performance Tuning für Entwickler
MySQL Performance Tuning für EntwicklerMySQL Performance Tuning für Entwickler
MySQL Performance Tuning für EntwicklerFromDual GmbH
 
DOAG 2010: MySQL Architekturen für Oracle DBA's
DOAG 2010: MySQL Architekturen für Oracle DBA'sDOAG 2010: MySQL Architekturen für Oracle DBA's
DOAG 2010: MySQL Architekturen für Oracle DBA'sFromDual GmbH
 
FROSCON 2011: MySQL Replication
FROSCON 2011: MySQL ReplicationFROSCON 2011: MySQL Replication
FROSCON 2011: MySQL ReplicationFromDual GmbH
 
FROSCON 2011: MySQL Performance Tuning
FROSCON 2011: MySQL Performance TuningFROSCON 2011: MySQL Performance Tuning
FROSCON 2011: MySQL Performance TuningFromDual GmbH
 
Internet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQLInternet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQLFromDual GmbH
 
DAOG SIG: HA Architekturen mit MySQL
DAOG SIG: HA Architekturen mit MySQLDAOG SIG: HA Architekturen mit MySQL
DAOG SIG: HA Architekturen mit MySQLFromDual GmbH
 
DOAG SIG: MySQL Replikation, Scale-Out, Master- Master Replikation, Backup
DOAG SIG: MySQL Replikation, Scale-Out, Master- Master Replikation, BackupDOAG SIG: MySQL Replikation, Scale-Out, Master- Master Replikation, Backup
DOAG SIG: MySQL Replikation, Scale-Out, Master- Master Replikation, BackupFromDual GmbH
 
MySQL Hochverfügbarkeitslösungen
MySQL HochverfügbarkeitslösungenMySQL Hochverfügbarkeitslösungen
MySQL HochverfügbarkeitslösungenLenz Grimmer
 
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQLInternet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQLFromDual GmbH
 
MySQL HA and Security
MySQL HA and SecurityMySQL HA and Security
MySQL HA and SecurityFromDual GmbH
 
Microservices and Container Management with Mesosphere DC/OS
Microservices and Container Management with Mesosphere DC/OSMicroservices and Container Management with Mesosphere DC/OS
Microservices and Container Management with Mesosphere DC/OSRalf Ernst
 
MySQL High Availability Solutions
MySQL High Availability SolutionsMySQL High Availability Solutions
MySQL High Availability SolutionsFromDual GmbH
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLFromDual GmbH
 
MySQL Hochverfügbarkeitslösungen
MySQL HochverfügbarkeitslösungenMySQL Hochverfügbarkeitslösungen
MySQL HochverfügbarkeitslösungenLenz Grimmer
 

La actualidad más candente (20)

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
 
DOAG 2011: MySQL Replication
DOAG 2011: MySQL ReplicationDOAG 2011: MySQL Replication
DOAG 2011: MySQL Replication
 
MySQL Replication for Beginners
MySQL Replication for BeginnersMySQL Replication for Beginners
MySQL Replication for Beginners
 
DOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance TuningDOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance Tuning
 
MySQL Performance Tuning für Entwickler
MySQL Performance Tuning für EntwicklerMySQL Performance Tuning für Entwickler
MySQL Performance Tuning für Entwickler
 
DOAG 2010: MySQL Architekturen für Oracle DBA's
DOAG 2010: MySQL Architekturen für Oracle DBA'sDOAG 2010: MySQL Architekturen für Oracle DBA's
DOAG 2010: MySQL Architekturen für Oracle DBA's
 
FROSCON 2011: MySQL Replication
FROSCON 2011: MySQL ReplicationFROSCON 2011: MySQL Replication
FROSCON 2011: MySQL Replication
 
FROSCON 2011: MySQL Performance Tuning
FROSCON 2011: MySQL Performance TuningFROSCON 2011: MySQL Performance Tuning
FROSCON 2011: MySQL Performance Tuning
 
Internet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQLInternet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQL
 
DAOG SIG: HA Architekturen mit MySQL
DAOG SIG: HA Architekturen mit MySQLDAOG SIG: HA Architekturen mit MySQL
DAOG SIG: HA Architekturen mit MySQL
 
DOAG SIG: MySQL Replikation, Scale-Out, Master- Master Replikation, Backup
DOAG SIG: MySQL Replikation, Scale-Out, Master- Master Replikation, BackupDOAG SIG: MySQL Replikation, Scale-Out, Master- Master Replikation, Backup
DOAG SIG: MySQL Replikation, Scale-Out, Master- Master Replikation, Backup
 
MySQL Hochverfügbarkeitslösungen
MySQL HochverfügbarkeitslösungenMySQL Hochverfügbarkeitslösungen
MySQL Hochverfügbarkeitslösungen
 
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQLInternet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
 
MySQL HA and Security
MySQL HA and SecurityMySQL HA and Security
MySQL HA and Security
 
Microservices and Container Management with Mesosphere DC/OS
Microservices and Container Management with Mesosphere DC/OSMicroservices and Container Management with Mesosphere DC/OS
Microservices and Container Management with Mesosphere DC/OS
 
MySQL High Availability Solutions
MySQL High Availability SolutionsMySQL High Availability Solutions
MySQL High Availability Solutions
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQL
 
MySQL Hochverfügbarkeitslösungen
MySQL HochverfügbarkeitslösungenMySQL Hochverfügbarkeitslösungen
MySQL Hochverfügbarkeitslösungen
 
Hazelcast
HazelcastHazelcast
Hazelcast
 

Destacado

MySQL for Oracle DBAs
MySQL for Oracle DBAsMySQL for Oracle DBAs
MySQL for Oracle DBAsFromDual GmbH
 
OpenExpo: MySQL, Where are you going?
OpenExpo: MySQL, Where are you going?OpenExpo: MySQL, Where are you going?
OpenExpo: MySQL, Where are you going?FromDual GmbH
 
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.6FromDual GmbH
 
MySQL configuration - The most important Variables
MySQL configuration - The most important VariablesMySQL configuration - The most important Variables
MySQL configuration - The most important VariablesFromDual GmbH
 

Destacado (6)

MySQL for Oracle DBAs
MySQL for Oracle DBAsMySQL for Oracle DBAs
MySQL for Oracle DBAs
 
NoSQL with MySQL
NoSQL with MySQLNoSQL with MySQL
NoSQL with MySQL
 
OpenExpo: MySQL, Where are you going?
OpenExpo: MySQL, Where are you going?OpenExpo: MySQL, Where are you going?
OpenExpo: MySQL, Where are you going?
 
Froscon 2012 DWH
Froscon 2012 DWHFroscon 2012 DWH
Froscon 2012 DWH
 
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
 
MySQL configuration - The most important Variables
MySQL configuration - The most important VariablesMySQL configuration - The most important Variables
MySQL configuration - The most important Variables
 

Similar a NoSQL with MySQL

Data Warehouse (DWH) with MySQL
Data Warehouse (DWH) with MySQLData Warehouse (DWH) with MySQL
Data Warehouse (DWH) with MySQLFromDual GmbH
 
Back to Basics - Webinar 6: Produktivsetzung einer Anwendung
Back to Basics - Webinar 6: Produktivsetzung einer AnwendungBack to Basics - Webinar 6: Produktivsetzung einer Anwendung
Back to Basics - Webinar 6: Produktivsetzung einer AnwendungMongoDB
 
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im ÜberblickBig Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im ÜberblickKarin Patenge
 
Präsentation MySQL auf dem T3CM12
Präsentation MySQL auf dem T3CM12Präsentation MySQL auf dem T3CM12
Präsentation MySQL auf dem T3CM12Stefan Frömken
 
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDASchulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDAJörn Dinkla
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als CodeJan Gehring
 
SimpleDB - Chancen einer Cloud Datenbank
SimpleDB - Chancen einer Cloud DatenbankSimpleDB - Chancen einer Cloud Datenbank
SimpleDB - Chancen einer Cloud DatenbankONE Schweiz
 
mongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - GrundlagenmongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - Grundlageninovex GmbH
 
200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollen200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollenUwe Küchler
 
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfOSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfNETWAYS
 
Streaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlStreaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlMatthias Niehoff
 
Spezialitäten der Oracle Lizenzierung - DOAG Konferenz 2010 - OPITZ CONSULTI...
Spezialitäten der Oracle Lizenzierung -  DOAG Konferenz 2010 - OPITZ CONSULTI...Spezialitäten der Oracle Lizenzierung -  DOAG Konferenz 2010 - OPITZ CONSULTI...
Spezialitäten der Oracle Lizenzierung - DOAG Konferenz 2010 - OPITZ CONSULTI...OPITZ CONSULTING Deutschland
 
The pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developersThe pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developersFDeitelhoff
 

Similar a NoSQL with MySQL (16)

Data Warehouse (DWH) with MySQL
Data Warehouse (DWH) with MySQLData Warehouse (DWH) with MySQL
Data Warehouse (DWH) with MySQL
 
Back to Basics - Webinar 6: Produktivsetzung einer Anwendung
Back to Basics - Webinar 6: Produktivsetzung einer AnwendungBack to Basics - Webinar 6: Produktivsetzung einer Anwendung
Back to Basics - Webinar 6: Produktivsetzung einer Anwendung
 
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im ÜberblickBig Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
 
Präsentation MySQL auf dem T3CM12
Präsentation MySQL auf dem T3CM12Präsentation MySQL auf dem T3CM12
Präsentation MySQL auf dem T3CM12
 
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDASchulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
 
SimpleDB - Chancen einer Cloud Datenbank
SimpleDB - Chancen einer Cloud DatenbankSimpleDB - Chancen einer Cloud Datenbank
SimpleDB - Chancen einer Cloud Datenbank
 
mongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - GrundlagenmongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - Grundlagen
 
200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollen200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollen
 
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfOSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
 
Streaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlStreaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der Wahl
 
Scaling Rails
Scaling RailsScaling Rails
Scaling Rails
 
Spezialitäten der Oracle Lizenzierung - DOAG Konferenz 2010 - OPITZ CONSULTI...
Spezialitäten der Oracle Lizenzierung -  DOAG Konferenz 2010 - OPITZ CONSULTI...Spezialitäten der Oracle Lizenzierung -  DOAG Konferenz 2010 - OPITZ CONSULTI...
Spezialitäten der Oracle Lizenzierung - DOAG Konferenz 2010 - OPITZ CONSULTI...
 
Cache me if you can
Cache me if you canCache me if you can
Cache me if you can
 
Best Practices 
Java und JVM in Containern
Best Practices 
Java und JVM in ContainernBest Practices 
Java und JVM in Containern
Best Practices 
Java und JVM in Containern
 
The pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developersThe pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developers
 

Más de FromDual GmbH

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...FromDual GmbH
 
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?FromDual GmbH
 
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 WorkshopFromDual GmbH
 
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 FeaturesFromDual GmbH
 
MariaDB 10.4 New Features
MariaDB 10.4 New FeaturesMariaDB 10.4 New Features
MariaDB 10.4 New FeaturesFromDual GmbH
 
MariaDB 10.2 New Features
MariaDB 10.2 New FeaturesMariaDB 10.2 New Features
MariaDB 10.2 New FeaturesFromDual GmbH
 
PERFORMANCE_SCHEMA and sys schema
PERFORMANCE_SCHEMA and sys schemaPERFORMANCE_SCHEMA and sys schema
PERFORMANCE_SCHEMA and sys schemaFromDual GmbH
 
MySQL Security SLAC 2015
MySQL Security SLAC 2015MySQL Security SLAC 2015
MySQL Security SLAC 2015FromDual GmbH
 
MySQL Replikation - Die Eier legende Wollmilchsau?
MySQL Replikation - Die Eier legende Wollmilchsau?MySQL Replikation - Die Eier legende Wollmilchsau?
MySQL Replikation - Die Eier legende Wollmilchsau?FromDual GmbH
 
Reading MySQL fingerprints
Reading MySQL fingerprintsReading MySQL fingerprints
Reading MySQL fingerprintsFromDual GmbH
 
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 MySQLFromDual GmbH
 
MySQL always-up with Galera Cluster
MySQL always-up with Galera ClusterMySQL always-up with Galera Cluster
MySQL always-up with Galera ClusterFromDual GmbH
 
MySQL Indexierung CeBIT 2014
MySQL Indexierung CeBIT 2014MySQL Indexierung CeBIT 2014
MySQL Indexierung CeBIT 2014FromDual GmbH
 
Need for Speed: Mysql indexing
Need for Speed: Mysql indexingNeed for Speed: Mysql indexing
Need for Speed: Mysql indexingFromDual GmbH
 
MySQL Performance Tuning Variables
MySQL Performance Tuning VariablesMySQL Performance Tuning Variables
MySQL Performance Tuning VariablesFromDual GmbH
 

Más de FromDual GmbH (17)

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
 
PERFORMANCE_SCHEMA and sys schema
PERFORMANCE_SCHEMA and sys schemaPERFORMANCE_SCHEMA and sys schema
PERFORMANCE_SCHEMA and sys schema
 
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
 
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 always-up with Galera Cluster
MySQL always-up with Galera ClusterMySQL always-up with Galera Cluster
MySQL always-up with Galera Cluster
 
HA with Galera
HA with GaleraHA with Galera
HA with Galera
 
MySQL Indexierung CeBIT 2014
MySQL Indexierung CeBIT 2014MySQL Indexierung CeBIT 2014
MySQL Indexierung CeBIT 2014
 
Need for Speed: Mysql indexing
Need for Speed: Mysql indexingNeed for Speed: Mysql indexing
Need for Speed: Mysql indexing
 
MySQL Security
MySQL SecurityMySQL Security
MySQL Security
 
MySQL Performance Tuning Variables
MySQL Performance Tuning VariablesMySQL Performance Tuning Variables
MySQL Performance Tuning Variables
 

NoSQL with MySQL

  • 1. HandlerSocket und ähnliche Technologien - NoSQL für MySQL Grazer Linuxtage 2011, Graz 9. April 2011 Oli Sennhauser Senior MySQL Consultant bei FromDual GmbH oli.sennhauser@fromdual.com www.fromdual.com 1
  • 2. Inhalt NoSQL für MySQL ➢ NoSQL Trends ➢ SQL Overhead ➢ HandlerSocket ➢ NDB-API ➢ BLOB Streaming Engine ➢ Handler Interface ➢ Graph Storage Engine www.fromdual.com 2
  • 3. Über FromDual ● Wir bieten neutral und Hersteller unabhängig: ● Beratung (on-site und remote) ● Remote-DBA / MySQL Betrieb ● Support ● Schulung (DBA, Performance Tuning, Scale-Out, High Availability, MySQL Cluster) ● Wir sind Consulting Partner der Open Database Alliance (ODBA.org) ● Oracle Silver Partner (OPN) www.fromdual.com 3
  • 4. Trends NoSQL MySQL www.fromdual.com 4
  • 5. Wo liegt das Problem? Storage Engine Anteil SQL Overhead ● SQL Overhead ist 70 – 80% für einfache Queries (~ 1 ms)! ● mit NO SQL → könnten wir bis zu 5 x schneller werden ● SQL ist gemacht für komplexe Abfragen ● NoSQL löst typischerweise einfache Abfragen www.fromdual.com 5
  • 6. Woher rührt der Ovderhead? 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. Was können wir dagegen tun? ● HandlerSocket (2010) ● NDB-API (1997!) ● PrimeBase Streaming Engine (2008) ● Handler Interface (2001/2011) ● OQGRAPH SE (2009) www.fromdual.com 7
  • 8. HandlerSocket ● 20. Oktober 2010, Yoshinori Matsunobu: Using MySQL as a NoSQL - A story for ex- ceeding 750,000 qps on a commodity server www.fromdual.com 8
  • 9. 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
  • 10. Infos ● Selber compilieren (einfach!) ● 7.5 mal mehr Durchsatz?!? ● Funktioniert mit MySQL 5.5.8 und MariaDB ● Schneller als mem- cached!?! ● Im Percona-Server 12.3 www.fromdual.com 10
  • 11. Features / Funktionalität ● Ermöglicht ganz andere Abfragemuster (siehe auch Handler Interface) ● Viele concurrent Connections ● Hochperformant (200 – 700%) ● Keinen doppelten Cache (vs. MySQL und memcached) ● Keine Dateninkonsistenz (vs. MySQL und memcached) ● Crash-safe ● SQL Zugriff ebenfalls möglich (z. B. für komplexe Reportingabfragen) ● MySQL muss nicht modifiziert/neu gebaut werden?!? ● Funktioniert theoretisch auch für andere Storage Engines (ich hab's nicht ausprobiert). www.fromdual.com 11
  • 12. NDB-API ● 1997, Mikael Ronström: The NDB Cluster – A parallel data server for telecommunications applications ● 25. November 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
  • 14. 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
  • 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 und Zahlen ● ./flexAsynch -ndbrecord -temp -con 4 -t 16 -p 312 -l 3 -a 2 -r 2 ● Aus der 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 ● 2 number of records (-r ?) thread ● 1 32-bit word per attribute ● 3 iterations (-l) ● 1 ndbmtd (1 NoOfRepl.) ● 2 attributes per table (8 bytes) (-a) 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. Lehren ● Beobachtungen: ● CPU's sind nicht am Limit. "Igendwo" ist noch Potential !?! ● Wenn übertrieben wird: CPU ist überlastet und Performance fällt auf 14%! ● Schummeleien: ● Schau die Parameter genau an! ● Mit allen anderen Konfigurationen erhielt ich schlechteren Duchrsatz! ● Sobald eine IP anstatt localhost verwendet wird: 89% Durchsatz ● Lehren: ● Traue keinen Benchmarks, die Du nicht selber manipuliert hast! www.fromdual.com 17
  • 18. BLOB Streaming Projekt ● April 2008, Paul McCullagh: Introduction to the BLOB Streaming Project ● 5. März 2010, Barry Leslie: Upload 1000+ BLOB's per second! www.fromdual.com 18
  • 19. BLOB's lokal und in der Cloud www.fromdual.com 19
  • 20. Vorteile von BLOB's in der Datenbank ● alt: RDBMS sind nicht schnell mit dem Speichern von BLOB's → BLOB's NICHT in der Datenbank speichern ● neu: Mit NoSQL Technologien wird es viel besser! ● Mit PBSE: atomare Transaktionen → Keine ins Nirgendwo zeigende Referenzen. ● BLOB's im normalen Datenbank-Backup !?! ● BLOB's können repliziert werden ● BLOB's in der DB skallieren besser. Die meisten Filesysteme performen schlecht mit mehr als 2 Millionen Dateien ? www.fromdual.com 20
  • 21. Das Handler Interface ● Oktober 2001, MySQL Handbuch: A new HANDLER interface to MyISAM tables ● 27. Dezember 2010, Stephane Varoqui: Using MySQL as a NoSQL: a story for exceeding 450'000 qps with MariaDB ● 10. Januar 2011, Stephane Varoqui: 20% to 50% improvement in MariaDB 5.3 Handler Interface using prepared statement www.fromdual.com 21
  • 22. Überspringen des Overheads mit dem 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 Beispiel # 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. Charakteristik des Handler Interfaces ● HANDLER ist schneller als SELECT: ● Weniger Parsing ● Kein Optimizer Overhead ● Weniger Query-Checking Overhead ● Die Tabelle muss zwischen zwei Handler-Anfragen nicht gelocket werden ● KEINE konsistente Sicht auf die Daten (dirty reads sind erlaubt) ● Optimierungen sind möglich, welche SELECT nicht zulässt ● Traversieren der Daten auf eine Art, welche schwierig bis unmöglich mit SELECT zu erlangen ist www.fromdual.com 24
  • 25. Eine Graphen Storage Engine ● 5. Mai 2009, Arjen Lentz: OQGRAPH Computation Engine for MySQL, MariaDB & Drizzle ● In MariaDB 5.1 ff. ● Verfügbar für MySQL 5.0 ff. www.fromdual.com 25
  • 26. Wie fühlt sich das an? ● Es ist ähnlich wie die MEMORY SE (Persistenz, Locking, trx) Node ● Wir sprechen in: ● Node/Item/Vertex und ● Edge/Connection/Link ● Edges haben eine Richtung Edge ● Wir können Netzwerke und Hierarchien abbilden ● (Familienbeziehungen, Freunde von Freunden, kürzeste Strecke von A nach B) ● Um mit der OQGRAPH SE zu sprechen brauchen wir “latches” (welcher Algorithmus zu verwenden ist) ● Es ist eine “computational engine” nicht eine Storage Engine! www.fromdual.com 26
  • 27. Einfaches Beispiel: Meine Familie 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. Netzwerk-Abfragen 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 FROM relation AS r WHERE r.latch = 2 JOIN family AS f ON (r.linkid = f.id) AND r.destid = 10; WHERE latch = 1 AND origid = 1 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 = 2: Find originating nodes (Breadth-first search) www.fromdual.com 28
  • 29. Übersicht Technologie r/w Trx Sprachen MySQL ja / ja ja “alle”, SQL HandlerSocket ja / ja nein C++, Perl, Ruby, PHP, Java, Pyhton, ... NDB-API (MySQL Cluster) ja / ja ja C++, Java, (SQL) PBSE ja / ja ja C++, SQL Handler Interface ja / nein nein “alle”, SQL OQGRAPH SE ja / ja nein “alle”, SQL www.fromdual.com 29
  • 30. Zusammenfassung ● SQL ist gut für komplexe Abfragen ● NoSQL üblicherweise für einfache Abfragen ● Vorsicht mit Performance-Zahlen! ● Architektur / Programmierung wird komplexer ● Bessere Performance ist möglich ● Aber es ist verdammt interessant! www.fromdual.com 30
  • 31. Literatur ● 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 31
  • 32. Q&A Fragen ? Diskussion? Wir haben noch Zeit für persönliche und indviduelle Beratungen... www.fromdual.com 32