SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
HandlerSocket und ähnliche
Technologien - NoSQL für MySQL


     DOAG SIG Development:
  DB-Programmierung mal anders
       Kassel, 9. Juni 2011

            Oli Sennhauser
     Senior MySQL Consultant, FromDual GmbH

      oli.sennhauser@fromdual.com


                  www.fromdual.com            1
FromDual GmbH
●   Wit bieten neutral und Hersteller unabhängig:
    ●   Beratung für MySQL
    ●   Remote-DBA / MySQL Betrieb
    ●   Support (ex. MySQL Basic und Silber)
    ●   Schulung für MySQL
●   Wir sind Consulting Partner der Open Database
    Alliance (ODBA.org)
●   Oracle Silver Partner (OPN)


                         www.fromdual.com           2
Inhalt

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




                        www.fromdual.com   3
Trends
MySQL                       NoSQL




         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 Overhead?
             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      PBMS        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)
●   Memcached (ab 2006, 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
                                                      Application / Client


                   Connection                mysqld                                        Connection
                    Manager                                     Parser                      Manager
                                               Optimizer
                     User Au-                                                               HandlerSocket
                   thentication
                                                                                               Plugin
                                            Access Control         Table Manager
                       Command
                       Dispatcher

                   Query Cache                                                         SE-API   Worker
                     Module                                                                     Threads
                                          Handler Interface

     MyISAM   InnoDB     Memory     NDB       PBMS    Aria    XtraDB   Federated-X   ...
                                                       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
Neuere Resultate
●   Michael Ronström, April/Mai 2011:
    ●   6.82M reads per second
    ●
        2.46M updates per second
                                      MySQL Cluster Performance
                        8000000

                        7000000

                        6000000

                        5000000

                        4000000                                     Read / s
                  ops




                                                                    Update / s
                        3000000

                        2000000

                        1000000

                             0
                                  4           8           16   32
                                           # data nodes


●   Mehr als lineares Skalieren scheint möglich (Caching-Effekte)!
                                         www.fromdual.com                        18
Und wenn wir uns das nicht antun
wollen?
●   Ab MySQL Cluster 7.1 (7.0)




                    www.fromdual.com   19
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             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               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            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                                    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                                 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                    25
Neu aus den MySQL Labs
●   Memcached Plugin für InnoDB (5.6)




                    www.fromdual.com    26
Neu aus den MySQL Labs
●   Memcached API für MySQL Cluster (7.2)




                    www.fromdual.com        27
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         28
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                   29
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                                     30
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
                                                        WHERE   r.latch = 2
  FROM relation AS r
  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                                        31
Sharding mit der Spider-SE




             www.fromdual.com   32
Ü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
Memcached-API              ja / ja        nein    C++, Perl, Ruby, PHP,
                                                  Java, Pyhton, ...




                               www.fromdual.com                           33
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        34
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                                 35
Q&A


                Fragen ?

              Diskussion?


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


                 www.fromdual.com           36

Contenu connexe

Tendances

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
 
MySQL Hochverfügbarkeitslösungen
MySQL HochverfügbarkeitslösungenMySQL Hochverfügbarkeitslösungen
MySQL HochverfügbarkeitslösungenLenz Grimmer
 
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 ClusterFromDual GmbH
 
MySQL Hochverfügbarkeitslösungen
MySQL HochverfügbarkeitslösungenMySQL Hochverfügbarkeitslösungen
MySQL HochverfügbarkeitslösungenLenz Grimmer
 
MySQL - New Features 5.6
MySQL - New Features 5.6MySQL - New Features 5.6
MySQL - New Features 5.6FromDual GmbH
 
MySQL Backup/Recovery
MySQL Backup/RecoveryMySQL Backup/Recovery
MySQL Backup/RecoveryFromDual GmbH
 
Lehmanns Rails Erweitern
Lehmanns Rails ErweiternLehmanns Rails Erweitern
Lehmanns Rails Erweiternjan_mindmatters
 
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'sFromDual GmbH
 
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?FromDual GmbH
 
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?FromDual GmbH
 
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
 
MySQL für Oracle DBA's
MySQL für Oracle DBA'sMySQL für Oracle DBA's
MySQL für Oracle DBA'sFromDual GmbH
 
Zend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDBZend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDBRalf Eggert
 
Weltweite Produktionsdatenverwaltung mit MySQL-Replikation
Weltweite Produktionsdatenverwaltung mit MySQL-ReplikationWeltweite Produktionsdatenverwaltung mit MySQL-Replikation
Weltweite Produktionsdatenverwaltung mit MySQL-ReplikationFromDual GmbH
 
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
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch CachingAOE
 
Webanwendungen mit Apache HBase entwickeln
Webanwendungen mit Apache HBase entwickelnWebanwendungen mit Apache HBase entwickeln
Webanwendungen mit Apache HBase entwickelnRoman Roelofsen
 

Tendances (20)

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
 
MySQL Hochverfügbarkeitslösungen
MySQL HochverfügbarkeitslösungenMySQL Hochverfügbarkeitslösungen
MySQL Hochverfügbarkeitslösungen
 
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
 
NoSQL with MySQL
NoSQL with MySQLNoSQL with MySQL
NoSQL with MySQL
 
MySQL Hochverfügbarkeitslösungen
MySQL HochverfügbarkeitslösungenMySQL Hochverfügbarkeitslösungen
MySQL Hochverfügbarkeitslösungen
 
MySQL - New Features 5.6
MySQL - New Features 5.6MySQL - New Features 5.6
MySQL - New Features 5.6
 
MySQL Backup/Recovery
MySQL Backup/RecoveryMySQL Backup/Recovery
MySQL Backup/Recovery
 
Lehmanns Rails Erweitern
Lehmanns Rails ErweiternLehmanns Rails Erweitern
Lehmanns Rails Erweitern
 
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
 
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?
 
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 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 für Oracle DBA's
MySQL für Oracle DBA'sMySQL für Oracle DBA's
MySQL für Oracle DBA's
 
MySQL Backup
MySQL BackupMySQL Backup
MySQL Backup
 
Zend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDBZend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDB
 
Weltweite Produktionsdatenverwaltung mit MySQL-Replikation
Weltweite Produktionsdatenverwaltung mit MySQL-ReplikationWeltweite Produktionsdatenverwaltung mit MySQL-Replikation
Weltweite Produktionsdatenverwaltung mit MySQL-Replikation
 
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
 
Query Result Caching
Query Result CachingQuery Result Caching
Query Result Caching
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
 
Webanwendungen mit Apache HBase entwickeln
Webanwendungen mit Apache HBase entwickelnWebanwendungen mit Apache HBase entwickeln
Webanwendungen mit Apache HBase entwickeln
 

En vedette

MySQL Performance Tuning für Entwickler
MySQL Performance Tuning für EntwicklerMySQL Performance Tuning für Entwickler
MySQL Performance Tuning für EntwicklerFromDual 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
 
MySQL for Oracle DBAs
MySQL for Oracle DBAsMySQL for Oracle DBAs
MySQL for Oracle DBAsFromDual 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
 

En vedette (7)

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?
 
NoSQL with MySQL
NoSQL with MySQLNoSQL with MySQL
NoSQL with MySQL
 
MySQL for Oracle DBAs
MySQL for Oracle DBAsMySQL for Oracle DBAs
MySQL for Oracle DBAs
 
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
 

Similaire à DOAG: NoSQL with MySQL

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
 
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
 
OOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDBOOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDBTobias Trelle
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBTobias Trelle
 
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
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Ulrike Schwinn
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!OPEN KNOWLEDGE 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
 
SimpleDB - Chancen einer Cloud Datenbank
SimpleDB - Chancen einer Cloud DatenbankSimpleDB - Chancen einer Cloud Datenbank
SimpleDB - Chancen einer Cloud DatenbankONE Schweiz
 
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
 
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
 
Webinar DynamoDB deutsch
Webinar DynamoDB deutschWebinar DynamoDB deutsch
Webinar DynamoDB deutschAWS Germany
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?QAware GmbH
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Josef Adersberger
 
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET Куранкова Татьяна
 

Similaire à DOAG: NoSQL with MySQL (20)

Renderscript in Android 3.x
Renderscript in Android 3.xRenderscript in Android 3.x
Renderscript in Android 3.x
 
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
 
Präsentation MySQL auf dem T3CM12
Präsentation MySQL auf dem T3CM12Präsentation MySQL auf dem T3CM12
Präsentation MySQL auf dem T3CM12
 
OOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDBOOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDB
 
Scaling Rails
Scaling RailsScaling Rails
Scaling Rails
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
 
XenServer und Storage
XenServer und StorageXenServer und Storage
XenServer und Storage
 
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
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
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
 
SimpleDB - Chancen einer Cloud Datenbank
SimpleDB - Chancen einer Cloud DatenbankSimpleDB - Chancen einer Cloud Datenbank
SimpleDB - Chancen einer Cloud Datenbank
 
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
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
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
 
Webinar DynamoDB deutsch
Webinar DynamoDB deutschWebinar DynamoDB deutsch
Webinar DynamoDB deutsch
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?
 
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET
 

Plus 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 HA and Security
MySQL HA and SecurityMySQL HA and Security
MySQL HA and SecurityFromDual GmbH
 
MySQL High Availability Solutions
MySQL High Availability SolutionsMySQL High Availability Solutions
MySQL High Availability SolutionsFromDual GmbH
 
MySQL Performance Tuning Variables
MySQL Performance Tuning VariablesMySQL Performance Tuning Variables
MySQL Performance Tuning VariablesFromDual GmbH
 

Plus de FromDual GmbH (19)

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 HA and Security
MySQL HA and SecurityMySQL HA and Security
MySQL HA and Security
 
MySQL High Availability Solutions
MySQL High Availability SolutionsMySQL High Availability Solutions
MySQL High Availability Solutions
 
MySQL Security
MySQL SecurityMySQL Security
MySQL Security
 
MySQL Performance Tuning Variables
MySQL Performance Tuning VariablesMySQL Performance Tuning Variables
MySQL Performance Tuning Variables
 

DOAG: NoSQL with MySQL

  • 1. HandlerSocket und ähnliche Technologien - NoSQL für MySQL DOAG SIG Development: DB-Programmierung mal anders Kassel, 9. Juni 2011 Oli Sennhauser Senior MySQL Consultant, FromDual GmbH oli.sennhauser@fromdual.com www.fromdual.com 1
  • 2. FromDual GmbH ● Wit bieten neutral und Hersteller unabhängig: ● Beratung für MySQL ● Remote-DBA / MySQL Betrieb ● Support (ex. MySQL Basic und Silber) ● Schulung für MySQL ● Wir sind Consulting Partner der Open Database Alliance (ODBA.org) ● Oracle Silver Partner (OPN) www.fromdual.com 2
  • 3. Inhalt NoSQL für MySQL ➢ NoSQL Trends ➢ SQL Overhead ➢ HandlerSocket ➢ NDB-API ➢ BLOB Streaming Engine ➢ Handler Interface ➢ Graph Storage Engine www.fromdual.com 3
  • 4. Trends MySQL NoSQL 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 Overhead? 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 PBMS 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) ● Memcached (ab 2006, 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 Application / Client Connection mysqld Connection Manager Parser Manager Optimizer User Au- HandlerSocket thentication Plugin Access Control Table Manager Command Dispatcher Query Cache SE-API Worker Module Threads Handler Interface MyISAM InnoDB Memory NDB PBMS Aria XtraDB Federated-X ... 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. Neuere Resultate ● Michael Ronström, April/Mai 2011: ● 6.82M reads per second ● 2.46M updates per second MySQL Cluster Performance 8000000 7000000 6000000 5000000 4000000 Read / s ops Update / s 3000000 2000000 1000000 0 4 8 16 32 # data nodes ● Mehr als lineares Skalieren scheint möglich (Caching-Effekte)! www.fromdual.com 18
  • 19. Und wenn wir uns das nicht antun wollen? ● Ab MySQL Cluster 7.1 (7.0) www.fromdual.com 19
  • 20. 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 20
  • 21. 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 21
  • 22. 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 22
  • 23. Ü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 23
  • 24. 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 24
  • 25. 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 25
  • 26. Neu aus den MySQL Labs ● Memcached Plugin für InnoDB (5.6) www.fromdual.com 26
  • 27. Neu aus den MySQL Labs ● Memcached API für MySQL Cluster (7.2) www.fromdual.com 27
  • 28. 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 28
  • 29. 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 29
  • 30. 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 30
  • 31. 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 WHERE r.latch = 2 FROM relation AS r 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 31
  • 32. Sharding mit der Spider-SE www.fromdual.com 32
  • 33. Ü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 Memcached-API ja / ja nein C++, Perl, Ruby, PHP, Java, Pyhton, ... www.fromdual.com 33
  • 34. 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 34
  • 35. 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 35
  • 36. Q&A Fragen ? Diskussion? Wir haben noch Zeit für persönliche und indviduelle Beratungen... www.fromdual.com 36