of 32 /32
www.fromdual.com 1 Grazer Linuxtage 2011, Graz 9. April 2011 Oli Sennhauser Senior MySQL Consultant bei FromDual GmbH [email protected] HandlerSocket und ähnliche Technologien - NoSQL für MySQL

NoSQL with MySQL

Embed Size (px)

Text of NoSQL with MySQL

  • 1.HandlerSocket und hnlicheTechnologien - NoSQL fr MySQL Grazer Linuxtage 2011, Graz 9. April 2011Oli SennhauserSenior MySQL Consultant bei FromDual [email protected]

2. InhaltNoSQL fr MySQLNoSQL TrendsSQL OverheadHandlerSocketNDB-APIBLOB Streaming EngineHandler InterfaceGraph Storage Enginewww.fromdual.com 2 3. ber FromDual Wir bieten neutral und Hersteller unabhngig:Beratung (on-site und remote)Remote-DBA / MySQL BetriebSupportSchulung (DBA, Performance Tuning, Scale-Out,High Availability, MySQL Cluster) Wir sind Consulting Partner der Open DatabaseAlliance (ODBA.org) Oracle Silver Partner (OPN) www.fromdual.com 3 4. TrendsNoSQLMySQL www.fromdual.com 4 5. Wo liegt das Problem?Storage Engine Anteil SQL OverheadSQL Overhead ist 70 80% fr einfache Queries (~ 1ms)!mit NO SQL knnten wir bis zu 5 x schneller werdenSQL ist gemacht fr komplexe Abfragen NoSQL lst typischerweise einfache Abfragenwww.fromdual.com 5 6. Woher rhrt der Ovderhead? Application / ClientThreadConnectionmysqldCacheManager Parser OptimizerUser Au-thenticationAccess ControlCommand Table OpenLoggingDispatcher Cache (.frm, fh) Table Manager QueryQuery CacheTable Definition CacheModule Cache (tbl def.) Handler InterfaceMyISAM InnoDBMemory NDBPBXTAria XtraDBFederated-X ...www.fromdual.com6 7. Was knnen 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 serverwww.fromdual.com8 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.com9 10. Infos Selber compilieren (einfach!) 7.5 mal mehr Durchsatz?!? Funktioniert mit MySQL 5.5.8 und MariaDB Schneller als mem-cached!?! Im Percona-Server12.3 www.fromdual.com10 11. Features / FunktionalittErmglicht ganz andere Abfragemuster (siehe auch HandlerInterface)Viele concurrent ConnectionsHochperformant (200 700%)Keinen doppelten Cache (vs. MySQL und memcached)Keine Dateninkonsistenz (vs. MySQL und memcached) Crash-safe SQL Zugriff ebenfalls mglich (z. B. fr komplexeReportingabfragen) MySQL muss nicht modifiziert/neu gebaut werden?!?Funktioniert theoretisch auch fr andere Storage Engines (ichhabs nicht ausprobiert). www.fromdual.com 11 12. NDB-API 1997, Mikael Ronstrm:The NDB Cluster A parallel data server fortelecommunications applications 25. November 2008, Jonas Oreland:950000 reads per second on 1 datanode www.fromdual.com12 13. MySQL ClusterApplication ApplicationApplication Application Application NDB-API NDB-API Load balancer SQL Node 1SQL Node 2SQL Node 3 ...Mgm Node 1Mgm Node 2 Data Node 1Data Node 2 Sw.Sw. Data Node 3Data Node 4www.fromdual.com13 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 u_32_value() 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.com28 29. bersichtTechnologie r/wTrx SprachenMySQL ja / jajaalle, SQLHandlerSocket ja / janeinC++, Perl, Ruby, PHP, Java, Pyhton, ...NDB-API (MySQL Cluster) ja / jajaC++, Java, (SQL)PBSEja / jajaC++, SQLHandler Interfaceja / nein neinalle, SQLOQGRAPH SEja / janeinalle, SQLwww.fromdual.com 29 30. Zusammenfassung SQL ist gut fr komplexe Abfragen NoSQL blicherweise fr einfache Abfragen Vorsicht mit Performance-Zahlen! Architektur / Programmierung wirdkomplexer Bessere Performance ist mglich Aber es ist verdammt interessant!www.fromdual.com30 31. Literatur Using MySQL as a NoSQL - A story for exceeding 750,000 qps on a commodityserver: 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&AFragen ?Diskussion?Wir haben noch Zeit fr persnliche und indviduelle Beratungen... www.fromdual.com 32