PrimeBase XT PBXT - ein Storage Engine Plugin für MySQL, Fachhochschule Wedel 13.06.07 SNAP Innovation GmbH
Einleitung Ulrich Zimmer Ulrich Zimmer, Geschäftsführer von SNAP Innovation GmbH Lenz Grimmer, MySQL Community Relations Manager, Mitteleuropa Die MySQL Storage Engine Architektur, Chef-Entwickler SNAP Was ist PBXT & MVCC? Design und Implementierung BLOB Streaming Wie können Sie sich beteiligen?
SNAP Innovation Ulrich Zimmer Seit 1996, 28 Beschäftigte Publishing Markt Print-to-Web Systemintegration & Customizing Softwareentwicklung PrimeBase SQL Database Server Entwickelt für den Publishing Markt BLOB support, full-text indexing und replication PrimeBase XT und PBXT
MySQL AB overview Lenz Grimmer MySQL AB - http://www.mysql mysql.com/ Developer of the popular MySQL Server and related applications and services > 350 employees in > 25 Ländern (e.g. USA, Sweden, Germany, Russia and Ireland) > 10 offices worldwide (e.g. Uppsala, Cupertino, München) ~ 2/3 of all employees work from home Communication via E-Mail, VoIP und IRC/Chat Privately held stock corporation supported by VCs with OSS Expertise (Benchmark, Index, Intel, Red Hat, SAP, etc.)
Engine Architecture Lenz Grimmer http://solutions.mysql.com/engines.html
MySQL Community Sites Lenz Grimmer Downloads/Docs: http://dev.mysql mysql.com/ MySQL Forge: http://forge.mysql mysql.com/ Project directory / Code Snippets / Community Wiki / Worklog Planet MySQL: http://planetmysql //planetmysql.org/ Blog-Aggregator / Also available in German, French and Spanish MySQL Forums: http://forums.mysql mysql.com/ MySQL Mailinglists: http://lists.mysql mysql.com/ Bug DB/Source trees http://bugs.mysql mysql.com/ http://svn //svn.mysql.com/ http://mysql //mysql.bkbits.net/ http://svn //svn.mysql.com/fisheye/
Was ist PBXT? PBXT (PrimeBase XT) transactional storage engine für MySQL Komplett neu entworfen und implementiert PBXT ist open source, released unter GNU Public License (GPL) Das Projekt (Ein standalone build für 5.1) wird bei SourceForge.net gehosted: http://sourceforge //sourceforge.net/projects/pbxt
Geschichte Nov. 2005: Erste Implementierung für MySQL 4.1. Mär.. 2006: Source code released unter GPL. Sept. 2006: Beta release für 5.1. Okt.. 2006: Standalone pluggable storage engine. Feb. 2007: Foreign key support. Mär.. 2007: Windows version released. Apr. 2007: Start des BLOB Streaming Projekts für MySQL.
Transaktionen & ACID Atomarität Alles oder nichts. Konsistenz Keine Regelverletzung, z.b. unique columns, foreign Key Referenzen. Isolation Transaktionen werden nicht von anderen parallel laufenden beeinflusst. Dauerhaftigkeit Das Ergebnis einer Transaktion hat Bestand.
ISOLATION: MVCC - Locking Konventionelles Database Locking System Verwendet READ- und WRITE-locks Writer blockieren Reader und Writer Deadlock Effekte sind wahrscheinlicher Pessimistic locking MVCC - Multi Version Concurrency Control Jede Transaktion bekommt eine vollständige Momentaufnahme der Datenbank (Snapshot( Snapshot) Lesen blockiert nicht Update -Konflikte sind möglich Optimistic locking
Datenstruktur von Tabellen Eine Tabelle besteht aus einer Anzahl Rows.. Jede Row hat eine feste Unique ID. Jede Row hat eine Liste von Records,, die auch Variationen (oder Versions) ) genannt werden. Die letzte Variation ist am Beginn der Liste. Jede Variation enthält eine Transaction ID. Jeder Variation-Record besteht aus einer Komponente mit fester Länge und einer Komponente mit variabler Länge (einem Überlauf).
Wie funktioniert MVCC? Alle Variationen sind indiziert (Unique( Indexes sind eine Illusion). Unabhänging davon ob Index Scan oder Sequential Scan - alle Variationen werden untersucht. Jede Transaktion entscheidet selbst, welche der Variationen sichtbar sind. Eine Variation ist sichtbar, wenn sie committed war, bevor die Transaktion gestartet wurde. Dazu wird die Transaction ID innerhalb des Records verwendet.
Verwendete Dateien für PBXT Ausführen der folgenden Statements: CREATE TABLE Notes ( ID INT AUTO_INCREMENT PRIMARY KEY, UserName CHAR(35), CreateTime DATETIME, Text VARCHAR(500) ) ENGINE=PBXT; INSERT Notes (UserName, CreateTime, Text) VALUES ( MyName",( NOW(), "This is a short text"); Erzeugt die Dateien: [pmc:/usr/local/mysql]] build% ll data/test/ total 80 0 drwx - 10 build wheel 340 Apr 10 11:25. 0 drwx - 13 build wheel 442 Apr 10 11:23.. 8 -rw-rw - 1 build wheel 2048 Apr 10 11:25 Notes-1.xtr 24 -rw-rw 1 build wheel 8666 Apr 10 11:25 Notes.frm 8 -rw-rw 1 build wheel 137 Apr 10 11:25 Notes.xtd 8 -rw-rw 1 build wheel 4096 Apr 10 11:25 Notes.xti 8 -rw-rw 1 build wheel 33 Apr 10 11:25 Notes_1.xtl 8 -rw-rw 1 build wheel 65 Apr 10 11:23 db.opt 8 -rw-rw 1 build wheel 22 Apr 10 11:25 xtlog-1.xt 8 -rw-rw 1 build wheel 59 Apr 10 11:25 xtlog-2.xt
File Data Struktur.xtr Row Index File n-2 n-1 Row ID n n+1 n+2.xtd Handle Data File Link to previous variation 123, abc Feste Länge record data 123, xyz.xtl Data Log File ghijklmno, 2/24/1990, RSTUVW, 321 Variable Länge Überlauf record data Handle Data
ATOMARITÄT: Konventionelles Recovery Alle Daten werden zuerst in ein Log geschrieben, auch das before image. Beim Commit wird ein flush auf dem Log ausgeführt. Dirty cache pages werden im Hintergrund in die Datenbank geschrieben. Beim Restart liest der Server das Log. Zunächst wird alles zurückgerollt, das nicht committed war. Dann werden alle Schreiboperationen auf committete Transaktionen ausgeführt. Checkpoints begrenzen die Menge der Daten, die bearbeitet werden muss.
ATOMARITÄT in PBXT PBXT schreibt Daten nur einmal. Die Transaktions-Logfiles enthalten eine Referenz auf die Datenbank Records. Records werden nie am Ort aktualisiert. Daher braucht das before image nicht gespeichert zu werden. Kein Recovery - einfach Start der garbage collection. Der Garbage Collector entfernt nicht committete Daten
Garbage Collection Garbage Collection umfasst Identifikation und Entfernen/Rückgabe von unbenutzem Platz. GC wird in PBXT durch 2 low-priority, Hintergrund-Threads durchgeführt. Sie werden Sweeper und Compactor genannt. Garbage Collection funktioniert ohne irgendeinen Teil der Datenbank zu locken.
Der Sweeper Scannt das Transaction Log. Rolled back: Entfernt die Variations. Committed: Entfernt ältere Variations,, die nicht mehr sichtbar sind. Variable Length Data Komponente: Wird als Garbage für den Compactor gekennzeichnet.
Der Compactor Garbage count im Header des Data Log. Überwacht den Garbage Pegel. Compaction: Scannen des Data Log. Kopieren von referenzierten Records in ein neues Log. Aktualisieren der Referenzen. Löschen das alten Logs.
Design.xti User Threads xtlog.xt Xaction Logs Index File.xtr Row Index File Index/ Block Cache Row Cache Sweeper Thread.xtd Handle Data File Data Logs.xtl Compactor Thread
Ziele des BLOB Streaming Projekts Speichern von BLOBs jeder Größe in der Datenbank. Streaming von BLOB Daten direkt in und aus der Datenbank. Programmierung eines skalierbaren Back-End,, dass jeglichen Durchsatzanforderungen genügt. Zur Verfügung stellen eines offenen Systems, das von allen Engines verwendet werden kann. Zur Verfügung stellen einer Standard Client API für Anwendungen, die in die existierende MySQL API integriert sind. Implementierung des Systems mit minimalen (oder keinen) Änderung der MySQL Code Base.
Vorteile Operationen können in atomaren Transaktionen ausgeführt werden. BLOBs sind Teil des Backup. BLOBs können repliziert werden. Falls nicht ein spezielles File-System verwendet wird, werden BLOBs in der Datenbank besser skaliert.
BLOB Streaming Architektur Other Storage Engine User Application MySQL Client API BSC API BLOB Streaming Client API Extension MySQL Server Front-end Stream-based Protocol (HTTP) Streaming Enabled Engine BLOB Streaming Engine Serverside Streaming API
Ein BLOB Streaming Beispiel Nehmen wir die folgende Tabelle an: use test; CREATE TABLE notes_tab ( n_id INTEGER PRIMARY KEY, n_text BLOB ) ENGINE=pbxt; INSERT notes_tab VALUES (1, "This is a BLOB streaming test!"); Geben Sie im Browser die folgende URL ein: http://localhost:8080/test/notes_tab/n_text/n_id=1
Wo wir Unterstützung benötigen Performance: tuning und testing Google Summer of Code Project: PAT: A Performance Analysis Tool for MySQL Storage Engine PBXT By Jin Chen, Ph.D. student, University of Toronto http://mysqlperformance //mysqlperformance.blogspot.com Community Arbeit Aufbau von Beispielen und Anleitungen Blogging FAQ web site Forum, news group, e-mail support
Fragen & Diskussion Ulrich Zimmer Lenz Grimmer www.primebase.com/xt pbxt.blogspot blogspot.com www.blobstreaming.org