SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
www.fromdual.com




           Wir bauen uns ein
      Data Warehouse mit MySQL

       FrOSCon 2012, 26. August
      Hochschule Bonn-Rhein-Sieg

            Oli Sennhauser

Senior MySQL Consultant, FromDual GmbH

     oli.sennhauser@fromdual.com
                                           1 / 37
Was ist ein Data Warehouse?                           www.fromdual.com



●   Data Warehouse (Abk. DWH)
    ●   Datenbank :-)
    ●   Für Reporting und Datenanalyse
    ●   Meist fürs Management (→ politisch, vereinfacht!)
    ●   Über: Finanzkennzahlen, Produktionskennzahlen, etc.
●   Resultat:




                                                              2 / 37
Technische Sicht                                  www.fromdual.com



●   Datenquellen (OLTP System, Dateien, Fremdsysteme)
●   Datenaufbereitung (ETL)
●   Datenhaltung (DWH: Staging Area)
●   Datenauslieferung (DWH: Data Mart)




                                                          3 / 37
Grober Ablauf                                             www.fromdual.com



●   Datenquellen
    ●   Operative Datenbanken: OLTP (ODBC, JDBC)
        ●   MySQL, Oracle, PostgreSQL, etc.
    ●   Dateien (CSV, XML, ...)
        ●   Apache Log, Host-Systeme
●   Mit ETL-Jobs (Extract, Transform, Load)
    ●   Skripte (PHP, Perl, ...)
    ●   ETL Software (Pentaho, ...)
●   Ins DWH
    ●   Zuerst Staging Area
    ●   Dann Data Mart (Dimensional Model, Star Schema)
●   Report (SQL, Spreadsheet, Reporting-Software)

                                                                  4 / 37
Grobes Vorgehen                              www.fromdual.com




    Ich persönlich würde:
●   Den Gaul von hinten her aufzäumen:
    ●   Welchen Report brauche ich (= Z)?
    ●   Woher kommen die Daten dazu (= A)?
    ●   Wie komme ich von A nach Z?

●   Datenfriedhöfe: Wir sammeln mal, man kann
    ja nie wissen...


                                                     5 / 37
Beispiel                                        www.fromdual.com




●   Chef will:
    ●   Report über Download-Statistik unserer Produkte
●   Also folgenden Report (Mock-up):
    ●   „Welchen Report brauche ich?“ (= Z)
    ●   Download Charts nach Produkt, Version und Zeit!




                                                        6 / 37
Woher die Daten?                                  www.fromdual.com



●   Download Statistiken (= A):
    ●   Webserver Accesslog (access.log) → ~ CSV Datei
    ●   Verteilt auf mehreren Servern?
    ●   Was ist mit der Historie?
    ●   Produkt, Version und Zeit?
●   Beteiligte Parteien/Rollen?
    ●   Kunde (= Management), SysAdmin (Server, Backup),
        Software Entwicklung (Produkt, Version), DWH
        Entwickler, ERP, Marketing, CRM, DBA, ...



                                                          7 / 37
ETL Jobs                                               www.fromdual.com



●   ETL: Extract – Transform – Load
    ●   Extrahieren der Daten von externen Quellen
    ●   Transformieren der Daten entsprechend des Bedarfs
    ●   Laden der Daten ins Ziel (Staging Area oder DM)
●   Wie?
    ●   Skripte (PHP, Perl, Shell, ...)
    ●   Software (Pentaho, ...)
●   Warum überhaupt ETL?
    ●   Ich habe doch schon alle Daten in meiner DB!
    ●   Stimmt! Aber...

                                                               8 / 37
OLTP vs. OLAP                                                 www.fromdual.com



    Unterschiedliche Anwendungsmuster:
●   Operative DB
    ●   Online Transaction Processing (OLTP)
    ●   Beispiel: Webshop, ERP, VoIP Calls, etc.
    ●   Kurze, schnelle Zugriffe auf kleine Datenmengen
●   Reporting DB
    ●   Online Analytical Processing (OLAP)
    ●   Beispiel: Monatsrechnungen, Umsatzentwicklung, etc.
    ●   Langsamere Zugriffe auf grosse Datenmengen
●   Hybride (Web-Anwendungen) :-(
    ●   „Zeig mir die häufigst verkauften Produkte!“
    ●   „Was könnte sonst noch zu mir passen?“

                                                                      9 / 37
Zugriffsmuster                                     www.fromdual.com



●   DB's sind schnell, wenn Daten im RAM liegen:
    ●   OLTP kleine Datenmengen → RAM
    ●   OLAP grosse Datenmengen → Platte
●   Was passiert bei Kombination?
    ●   Sieht man sehr oft!
        → Daher wenn möglich/nötig trennen!




         OLTP                  Hybrid          OLAP


                                                           10 / 37
ETL Technisch                                                     www.fromdual.com



●   Extract
    ●   ODBC/JDBC + SQL
    ●   SELECT INTO OUTFILE → CSV
    ●   mysql ­­xml ­e 'SELECT * FROM test' > test.xml
●   Transform
    ●   Sortieren der Daten nach Primary Key (InnoDB)
    ●   DB's sind grundsätzlich langsam → wenn möglich ausserhalb der DB
        erledigen, schauen, welche Variante schneller ist, parallelisieren!
●   Load
    ●   Laden in Primary Key Sortierung (InnoDB)
    ●   Parallel laden
    ●   Single Row INSERT vs multi Row INSERT vs LOAD DATA INFILE


                                                                          11 / 37
Laden MyISAM vs. InnoDB                  www.fromdual.com




●   MyISAM, (PK Sortierung), keine Trx
    197 s (105 %)
●   InnoDB, PK Sortierung, autocommit = 1,
    innodb_flush_log_at_trx_commit = 1
    > 900 s (10 % der Daten) (4300 %!)
●   InnoDB, PK Sortierung, mit Trx,
    innodb_flush_log_at_trx_commit = 1
    188 s (= 100 %)


                                                 12 / 37
Laden nach PK sortiert                                      www.fromdual.com




●   InnoDB, PK Sortierung, mit Trx,
    innodb_flush_log_at_trx_commit = 1
    188 s (= 100 %)
●   InnoDB, KEINE PK Sortierung, mit Trx,
    innodb_flush_log_at_trx_commit = 1
    249 s (132 %)
●   Sortierung: ca. 4 s
    ●    („Datenbanken sind grundsätzlich langsam!“)
        shell> sort -t, -k9 -n test_rnd.sql > test_sorted.sql


                                                                    13 / 37
innodb_flush_log_at_trx_commit                           www.fromdual.com



●   InnoDB, PK Sortierung,
    autocommit = 1, innodb_flush_log_at_trx_commit = 0
    210 s (112 %)
●   InnoDB, PK Sortierung,
    autocommit = 1, innodb_flush_log_at_trx_commit = 1
    > 900 s (10 % der Daten) (4300 %!)
●   InnoDB, PK Sortierung,
    autocommit = 1, innodb_flush_log_at_trx_commit = 2
    236 s (126 %)

●   InnoDB, PK Sortierung, mit Trx,
    innodb_flush_log_at_trx_commit = 0
    186 s (97 %)
●   InnoDB, PK Sortierung, mit Trx,
    innodb_flush_log_at_trx_commit = 1
    188 s (= 100%)
●   InnoDB, PK Sortierung, mit Trx,
    innodb_flush_log_at_trx_commit = 2
    186 s (97 %)


                                                                 14 / 37
Parallel laden                               www.fromdual.com



●   MyISAM, PK Sortierung, keine Trx, parallel 4
    92 s (47 %, f = 2.1)
●   MyISAM, PK Sortierung, keine Trx
    197 s (= 100 %)

●   InnoDB, PK Sortierung, mit Trx,
    innodb_flush_log_at_trx_commit = 1
    188 s (= 100%)
●   InnoDB, PK Sortierung, mit Trx, parallel 4
    62 s (33%, f = 3.0)
                                                     15 / 37
Single row vs multi row                       www.fromdual.com



●   InnoDB, PK Sortierung, mit Trx, single row INSERT
    188 s (= 100%)
●   InnoDB, PK Sortierung, mit Trx, multi row INSERT
    64 s (= 34%, f = 2.9)
●   InnoDB, PK Sortierung, autocommit = 1, LOAD 
    DATA INFILE
    50 s (= 27%, f = 3.8)
●   InnoDB, PK Sortierung, autocommit = 1, INSERT 
    INTO SELECT
    45 s (= 24%, f = 4.2)

                                                      16 / 37
Weitere Ladehilfen                                                   www.fromdual.com



●   INSERT ON DUPLICATE KEY UPDATE
    ●   INSERT oder UPDATE
●   REPLACE INTO
    ●   INSERT oder DELETE + INSERT
●   Federated Storage Engine?
●   Transportable Tables? (MyISAM, oder InnoDB mit Percona
    Server)
●   Lade-Jobs erneut startbar machen!
    ●   Am 21. 8. laden wir Daten vom 20. 8.
    ●   Daten waren falsch
    ●   Am 22. 8. laden wir geflickten Daten vom 20. 8. und 21. 8.
    ●   Nochmal laden aber vorher löschen!?!

                                                                             17 / 37
Welche Storage Engine?                                           www.fromdual.com



●   MyISAM (Aria)
    ●   Nicht Crash-safe (Ausnahme: Aria!)
    ●   Table-Lock, schlecht bei Concurrency
    ●   Kleiner Footprint, schnell bei Full Table Scan
●   InnoDB (XtraDB)
    ●   Crash-safe
    ●   Row-Lock, gut bei Concurrency
    ●   Footprint ca. 2 x MyISAM
●   Infobright, InfiniDB, Tokutek
    ●   Spezialisiert (Columnar Storage Engine, Fractal Trees)
    ●   Proprietär, teuer
●   Spider SE?

                                                                         18 / 37
MySQL Konfiguration                           www.fromdual.com



●   InnoDB:
    ●   innodb_buffer_pool_size (RAM!)
    ●   innodb_log_file_size (Data load)
    ●   innodb_flus_log_at_trx_commit (Data load)
●   MyISAM:
    ●   key_buffer_size (RAM!)
    ●   bulk_insert_buffer_size (Bulk data load)
●   Query Cache?
●   MyISAM/InnoDB Tabellenkompression?
                                                      19 / 37
Staging Area                                                             www.fromdual.com




●   Zurück zum Beispiel Download-Statistik:
                      ETL – Job
          http     ● parse                               http_log
       accesslog   ● split                               Staging
                   ● load                                Tabelle

●   Data Staging Area /      CREATE TABLE `page_hits_raw` (
                               `host` varchar(32) DEFAULT NULL,

    Tabelle                    `remote_host` char(15) DEFAULT NULL,
                               `logname` varchar(64) DEFAULT NULL,
                               `user` varchar(64) DEFAULT NULL,
                               `ts` int(10) unsigned DEFAULT NULL,
                               `methode` varchar(12) DEFAULT NULL,
                               `request` varchar(1024) DEFAULT NULL,
                               `protocol` varchar(16) DEFAULT NULL,
                               `status` smallint(5) unsigned DEFAULT NULL,


    Noch kein Report
                               `bytes` mediumint(8) unsigned DEFAULT NULL,
●                              `referer` varchar(1024) DEFAULT NULL,
                               `user_agent` varchar(255) DEFAULT NULL,
                               `ua_engine_compatibility` varchar(255) DEFAULT NULL,

    möglich...                 `ua_operating_system` varchar(255) DEFAULT NULL,
                               `ua_platform` varchar(255) DEFAULT NULL,
                               `ua_browser_platform_details` varchar(255) DEFAULT NULL,
                               `ua_browser_enhancements` varchar(255) DEFAULT NULL
                             );




                                                                                    20 / 37
Relational vs. Dimensional                                             www.fromdual.com



●   OLTP                                ●   OLAP
    ●   Entity Relationship Model (ER       ●   Dimensional Model (Star Schema)
        Schema)                             ●   Stark denormalisiert
    ●   Normalisiert (3rd NF)               ●   Hohe Redundanz
    ●   Keine Redundanz                     ●   Einfaches Schema
    ●   Komplexes Schema                    ●   Wenige Tabellen und Joins
    ●   Vielen Tabellen und Joins               (Joins sind teuer!)
    ●   Hohe Schreib-Performance            ●   Hohe Lese-Performance




                                                                               21 / 37
Dimensional Schema Design                        www.fromdual.com




    Star Schema:
●   Fact Tabellen
    ●   Beinhaltet die Messwerte
        (Downloads der Produkte)
●   Dimension Tabellen
    ●   Einstiegspunkt für Fact Tabellen
    ●   Beschreibung des Geschäftspro-
        zesses
    ●   Oft „sortieren/gruppieren nach Produkt, nach
        Zeit, nach Version etc...“
                                                         22 / 37
Star Schema                                www.fromdual.com



 ●   „Downloads sortieren/gruppieren nach Produkt,
     nach Zeit und nach Version!“




                                                   23 / 37
Fact Tabellen                                              www.fromdual.com



●   Speichert numerisch Performance-Metriken
●   Werte sind additiv (1 download + 1 download)
●   Möglichst atomar (NICHT 7 downloads pro Tag!)
●   Selbe Granularität über ganze Tabelle (sonst Aggregate)
●   Wenig Spalten (Anz. Dim + 2 – 5 Facts) aber oft sehr viele
    Zeilen! → Grosse Tabellen, daher auf Datentypen achten!
●   Lokalität der Daten beeinflussbar:
    ●   InnoDB Primary Key → physische Sortierung der Zeilen
    ●   MyISAM: ALTER TABLE ... ORDER BY ... (teuer!)
    ●   Partitionen (RANGE, meist nach Zeit)!
●   Auf Dimension-Bus-Architektur passend

                                                                   24 / 37
Fact Beispiel                                                                www.fromdual.com




 CREATE TABLE `product_download_fact` (
    `product_id` tinyint(4) NOT NULL,
    `date_id` smallint(6) NOT NULL,
    `time_id` smallint(6) NOT NULL,
    `geo_id` smallint(6) NOT NULL,
    `customer_id` smallint(6) NOT NULL,
    `download` tinyint(4) NOT NULL,
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`id`),
    KEY `product_id` (`product_id`),
    KEY `date_id` (`date_id`),
    KEY `time_id` (`time_id`),
    KEY `geo_id` (`geo_id`)
 );

 +------------+---------+---------+--------+-------------+----------+----+
 | product_id | date_id | time_id | geo_id | customer_id | download | id |
 +------------+---------+---------+--------+-------------+----------+----+
 |          0 |    9483 |    1389 |     36 |          57 |        1 | 1 |
 |          0 |    9487 |    1395 |     36 |          79 |        1 | 2 |
 |          0 |    9489 |    1396 |     37 |          85 |        1 | 3 |
 |          0 |    9492 |    1376 |     34 |           5 |        1 | 4 |
 |          0 |    9492 |    1414 |     39 |           0 |        1 | 5 |
 |          0 |    9493 |    1365 |     32 |           0 |        1 | 6 |
 |          0 |    9494 |    1382 |     34 |          28 |        1 | 7 |
 |          1 |       2 |    1283 |     20 |           0 |        1 | 8 |
 |          1 |       7 |    1316 |     25 |          23 |        1 | 9 |
 |          1 |       8 |    1329 |     27 |          71 |        1 | 10 |
 +------------+---------+---------+--------+-------------+----------+----+




                                                                                     25 / 37
Dimension Tabellen                                                            www.fromdual.com



●   Einstieg und User Interface ins DWH (auf Fact Tabellen)
●   Gehören zu Fact Tabellen
●   Textbeschreiben des Geschäfts
●   Hoch redundant
●   Oft „sortieren/gruppieren nach Produkt, nach Zeit, nach Version etc...“
●   Haben viele und lange Spalten (50 – 100, hoch redundant)
    ●   MySQL Limitationen beachten!
●   Üblicherweise nur wenige Zeilen (< 1 Mio)
●   Hier findet Einschränkung (WHERE), Gruppierung (GROUP BY) und Sortierung
    (ORDER BY) statt
●   Verwendung in Report-Titeln
●   Gute Hierarchie ermöglicht „Slice and Dice“ („Scheibchen und Würfel schneiden“)
●   Abkürzungen und NULL Werte sind verpönt
●   Sollte in Dimensions Bus-Architektur passen



                                                                                      26 / 37
Dimension Beispiel                                                                                                         www.fromdual.com




CREATE TABLE product_dim (                             CREATE TABLE date_dim (
   id             smallint(5) unsigned NOT NULL A_I       id           smallint(5) unsigned NOT NULL A_I
, product_name    varchar(255) NOT NULL                , date          date NOT NULL
, product_version varchar(255) NOT NULL                , year          year(4) NOT NULL
, PRIMARY KEY (id)                                     , month         tinyint(3) unsigned NOT NULL
                                                       , month_en      enum('January','February'...
);
                                                       , month_de      enum('Januar','Februar'...
                                                       , day           tinyint(3) unsigned NOT NULL
+----+---------------------------+-----------------+   , last_day      tinyint(3) unsigned NOT NULL
| id | product_name              | product_version |   , weekday_en    enum('Monday','Tuesday','Wednesday'...
+----+---------------------------+-----------------+   , weekday_de    enum('Montag','Dienstag','Mittwoch'...
| 0 | Unknown                    | Unknown         |   , calendar_week tinyint(3) unsigned NOT NULL
| 1 | MySQL Performance Monitor | Unknown          |   , PRIMARY KEY (id)
| 2 | MySQL Performance Monitor | latest           |   );
| 11 | MySQL Performance Monitor | 0.9             |   +------+------------+------+-------+----------+-----+----------+------------+---------------+
| 12 | Database Control          | Unknown         |   | id   | date       | year | month | month_en | day | last_day | weekday_en | calendar_week |
                                                       +------+------------+------+-------+----------+-----+----------+------------+---------------+
| 13 | Database Control          | latest          |   | 4597 | 2012-08-01 | 2012 |     8 | August   |   1 |       30 | Wednesday |             31 |
                                                       | 4598 | 2012-08-02 | 2012 |     8 | August   |   2 |       29 | Thursday   |            31 |
| 14 | Database Control          | 0.1             |   | 4599 | 2012-08-03 | 2012 |     8 | August   |   3 |       28 | Friday     |            31 |
| 15 | MyEnv                     | Unknown         |   | 4600 | 2012-08-04 | 2012 |
                                                       | 4601 | 2012-08-05 | 2012 |
                                                                                        8 | August
                                                                                        8 | August
                                                                                                     |
                                                                                                     |
                                                                                                         4 |
                                                                                                         5 |
                                                                                                                   27 | Saturday
                                                                                                                   26 | Sunday
                                                                                                                                   |
                                                                                                                                   |
                                                                                                                                                31 |
                                                                                                                                                31 |
| 16 | MyEnv                     | latest          |   | 4602 | 2012-08-06 | 2012 |     8 | August   |   6 |       25 | Monday     |            32 |
                                                       | 4603 | 2012-08-07 | 2012 |     8 | August   |   7 |       24 | Tuesday    |            32 |
| 20 | MyEnv                     | 0.5             |   | 4604 | 2012-08-08 | 2012 |     8 | August   |   8 |       23 | Wednesday |             32 |
                                                       | 4605 | 2012-08-09 | 2012 |     8 | August   |   9 |       22 | Thursday   |            32 |
| 21 | Nagios Plugins            | Unknown         |   | 4606 | 2012-08-10 | 2012 |     8 | August   | 10 |        21 | Friday     |            32 |
| 25 | Nagios Plugins            | 0.3.1           |   +------+------------+------+-------+----------+-----+----------+------------+---------------+

+----+---------------------------+-----------------+




                                                                                                                                              27 / 37
DWH Bus Architektur   www.fromdual.com




                              28 / 37
ETL von Staging in Data Mart                            www.fromdual.com



                                    ETL – Job
                     http        ● parse              http_log
                  accesslog      ● split              Staging
                                 ● load               Tabelle



●   Kopieren von Staging in Data Mart            ETL – Job
                                                 ● Facts mit Dim

    ●   Skript oder SQL                            verlinken
    ●   INSERT INTO product_download_fact
        SELECT * FROM http_log ...
    ●   Ganz so einfach ist es meist nicht :-(     product_down-
                                                      load_fact
    ●   Job wieder aufsetzbar machen!
●   Fertig zum Reporting!
                                                                 29 / 37
Slowly Changing Dimenions                            www.fromdual.com



●   Relativ statisch aber nicht ganz
    ●   Beispiel: Kunde zieht um von A nach B
    ●   Report „Umsatz nach Bundesland“?
●   Type 1: Überschreiben der alten Werte
    ●   Einfach aber Historie geht verlohren
●   Type 2: Neuer Eintrag in Dimensionstabelle
    ●   Meistgebrauchte Lösung (Historie)
●   Type 3: Neue Spalte in Dimension
    ●   Report nach alt und neu möglich (Vergleich mit
        letztem Jahr!)

                                                             30 / 37
Reporting                               www.fromdual.com




●   SQL → Nicht ganz Manager tauglich :-(
●   Job: SELECT INTO OUTFILE →
    Spreadsheet (OO calc)
●   OO calc über ODBC/JDBC auf DB lassen
●   Reporting Tools (Pentaho, ...)




                                                31 / 37
SELECT → CSV → OO calc                                                                          www.fromdual.com




SELECT *
  FROM date_dim AS dd
  JOIN product_download_fact AS pdf ON pdf.date_id = dd.id
  JOIN product_dim AS pd ON pdf.product_id = pd.id
 WHERE pd.product_name = 'MySQL Performance Monitor'
   AND dd.year between 2007 and 2012
INTO OUTFILE '/tmp/oli/product_download_2007-2012.csv'
;

13852 rows in set (0.20 sec)

+-------+--------+--------------------+------------+---------+------+------------------------------------+
| table | type   | possible_keys      | key        | key_len | rows | Extra                              |
+-------+--------+--------------------+------------+---------+------+------------------------------------+
| pd    | ALL    | PRIMARY            | NULL       | NULL    |   26 | Using where                        |
| pdf   | ref    | product_id,date_id | product_id | 1       | 2365 | Using index condition              |
| dd    | eq_ref | PRIMARY            | PRIMARY    | 2       |    1 | Using index condition; Using where |
+-------+--------+--------------------+------------+---------+------+------------------------------------+




                                                                                                             32 / 37
OO calc → JDBC auf DB                  www.fromdual.com




●   MS Access oder MS Excel sind theoretisch
    auch möglich :-)
●   Connector/J (JDBC)
●   OO calc →
    gestorben :-(
●   Ggf. VIEW
    verwenden



                                               33 / 37
Reporting Tools                           www.fromdual.com




●   Pentaho Business Analytics OSS
●   JasperSoft (JasperReports) OSS
●   Crystal Reports, MicroStrategy, Cognos, ...




                                                  34 / 37
Ziel erreicht!                              www.fromdual.com




●   Zeit: ab 6 – 8 Wochen (30 – 40 d, € 25 - 35k)
                                                    35 / 37
Buchtipp                www.fromdual.com




●   The Data
    Warehouse Toolkit
●   Ralph Kimball &
    Margy Ross




                                36 / 37
Q&A                                                            www.fromdual.com




                               Fragen ?

                            Diskussion?

         Wir haben Zeit für ein persönliches Gespräch...

●   FromDual bietet neutral und unabhängig:
    ●   Beratung
    ●   Remote-DBA
    ●   Support für MySQL, Galera und Percona Server und MariaDB
    ●   Schulung
                                              www.fromdual.com
                                                                       37 / 37

Contenu connexe

Tendances

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-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 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
 
Internet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQLInternet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQLFromDual GmbH
 
MySQL Replication for Beginners
MySQL Replication for BeginnersMySQL Replication for Beginners
MySQL Replication for BeginnersFromDual GmbH
 
MySQL Backup/Recovery
MySQL Backup/RecoveryMySQL Backup/Recovery
MySQL Backup/RecoveryFromDual GmbH
 
DOAG 2011: MySQL Replication
DOAG 2011: MySQL ReplicationDOAG 2011: MySQL Replication
DOAG 2011: MySQL ReplicationFromDual GmbH
 

Tendances (8)

MySQL Beispiele aus der Praxis - Wie setzen Kunden MySQL ein?
MySQL Beispiele aus der Praxis - Wie setzen Kunden MySQL ein?MySQL Beispiele aus der Praxis - Wie setzen Kunden MySQL ein?
MySQL Beispiele aus der Praxis - Wie setzen Kunden MySQL ein?
 
MySQL-Server im Teamwork - Replikation und Cluster
MySQL-Server im Teamwork - Replikation und ClusterMySQL-Server im Teamwork - Replikation und Cluster
MySQL-Server im Teamwork - Replikation und Cluster
 
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
 
Internet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQLInternet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQL
 
MySQL Replication for Beginners
MySQL Replication for BeginnersMySQL Replication for Beginners
MySQL Replication for Beginners
 
MySQL Backup
MySQL BackupMySQL Backup
MySQL Backup
 
MySQL Backup/Recovery
MySQL Backup/RecoveryMySQL Backup/Recovery
MySQL Backup/Recovery
 
DOAG 2011: MySQL Replication
DOAG 2011: MySQL ReplicationDOAG 2011: MySQL Replication
DOAG 2011: MySQL Replication
 

Similaire à Froscon 2012 DWH

Data Warehouse (DWH) with MySQL
Data Warehouse (DWH) with MySQLData Warehouse (DWH) with MySQL
Data Warehouse (DWH) with MySQLFromDual GmbH
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLFromDual GmbH
 
MySQL HA and Security
MySQL HA and SecurityMySQL HA and Security
MySQL HA and SecurityFromDual 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
 
Datentransfer mit Oracle Tools
Datentransfer mit Oracle ToolsDatentransfer mit Oracle Tools
Datentransfer mit Oracle ToolsChristian Gohmann
 
Zentrales Logging mit Elasticsearch
Zentrales Logging mit ElasticsearchZentrales Logging mit Elasticsearch
Zentrales Logging mit ElasticsearchSimonSchneider24
 
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
 
Ü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
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als CodeJan Gehring
 
MySQL Performance Tuning für Entwickler
MySQL Performance Tuning für EntwicklerMySQL Performance Tuning für Entwickler
MySQL Performance Tuning für EntwicklerFromDual GmbH
 
20121008 io-performance
20121008 io-performance20121008 io-performance
20121008 io-performanceWerner Fischer
 
AdminCamp 2014: Quo Vadis – Wohin mit IBM Notes/Domino?
AdminCamp 2014: Quo Vadis – Wohin mit IBM Notes/Domino?AdminCamp 2014: Quo Vadis – Wohin mit IBM Notes/Domino?
AdminCamp 2014: Quo Vadis – Wohin mit IBM Notes/Domino?panagenda
 
mongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - GrundlagenmongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - Grundlageninovex GmbH
 
Fujitsu Storage Days 2017 - Rudolf Klassen - "Erfahrungsbericht ETERNUS DX200...
Fujitsu Storage Days 2017 - Rudolf Klassen - "Erfahrungsbericht ETERNUS DX200...Fujitsu Storage Days 2017 - Rudolf Klassen - "Erfahrungsbericht ETERNUS DX200...
Fujitsu Storage Days 2017 - Rudolf Klassen - "Erfahrungsbericht ETERNUS DX200...Fujitsu Central Europe
 
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
 
Zurück in die Zukunft - DNUG 2014 - Track 5.2
Zurück in die Zukunft - DNUG 2014 - Track 5.2Zurück in die Zukunft - DNUG 2014 - Track 5.2
Zurück in die Zukunft - DNUG 2014 - Track 5.2panagenda
 
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)Ulrike Schwinn
 

Similaire à Froscon 2012 DWH (20)

Data Warehouse (DWH) with MySQL
Data Warehouse (DWH) with MySQLData Warehouse (DWH) with MySQL
Data Warehouse (DWH) with MySQL
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQL
 
MySQL HA and Security
MySQL HA and SecurityMySQL HA and Security
MySQL HA and Security
 
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
 
Datentransfer mit Oracle Tools
Datentransfer mit Oracle ToolsDatentransfer mit Oracle Tools
Datentransfer mit Oracle Tools
 
Zentrales Logging mit Elasticsearch
Zentrales Logging mit ElasticsearchZentrales Logging mit Elasticsearch
Zentrales Logging mit Elasticsearch
 
Präsentation MySQL auf dem T3CM12
Präsentation MySQL auf dem T3CM12Präsentation MySQL auf dem T3CM12
Präsentation MySQL auf dem T3CM12
 
Ü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)
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
 
MySQL Performance Tuning für Entwickler
MySQL Performance Tuning für EntwicklerMySQL Performance Tuning für Entwickler
MySQL Performance Tuning für Entwickler
 
OpenCL Grundlagen
OpenCL GrundlagenOpenCL Grundlagen
OpenCL Grundlagen
 
20121008 io-performance
20121008 io-performance20121008 io-performance
20121008 io-performance
 
PHP Sucks?!
PHP Sucks?!PHP Sucks?!
PHP Sucks?!
 
AdminCamp 2014: Quo Vadis – Wohin mit IBM Notes/Domino?
AdminCamp 2014: Quo Vadis – Wohin mit IBM Notes/Domino?AdminCamp 2014: Quo Vadis – Wohin mit IBM Notes/Domino?
AdminCamp 2014: Quo Vadis – Wohin mit IBM Notes/Domino?
 
mongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - GrundlagenmongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - Grundlagen
 
Fujitsu Storage Days 2017 - Rudolf Klassen - "Erfahrungsbericht ETERNUS DX200...
Fujitsu Storage Days 2017 - Rudolf Klassen - "Erfahrungsbericht ETERNUS DX200...Fujitsu Storage Days 2017 - Rudolf Klassen - "Erfahrungsbericht ETERNUS DX200...
Fujitsu Storage Days 2017 - Rudolf Klassen - "Erfahrungsbericht ETERNUS DX200...
 
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
 
Zurück in die Zukunft - DNUG 2014 - Track 5.2
Zurück in die Zukunft - DNUG 2014 - Track 5.2Zurück in die Zukunft - DNUG 2014 - Track 5.2
Zurück in die Zukunft - DNUG 2014 - Track 5.2
 
Performance?!
Performance?!Performance?!
Performance?!
 
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
 

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 for Oracle DBAs
MySQL for Oracle DBAsMySQL for Oracle DBAs
MySQL for Oracle DBAsFromDual 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 for Oracle DBAs
MySQL for Oracle DBAsMySQL for Oracle DBAs
MySQL for Oracle DBAs
 
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
 

Froscon 2012 DWH

  • 1. www.fromdual.com Wir bauen uns ein Data Warehouse mit MySQL FrOSCon 2012, 26. August Hochschule Bonn-Rhein-Sieg Oli Sennhauser Senior MySQL Consultant, FromDual GmbH oli.sennhauser@fromdual.com 1 / 37
  • 2. Was ist ein Data Warehouse? www.fromdual.com ● Data Warehouse (Abk. DWH) ● Datenbank :-) ● Für Reporting und Datenanalyse ● Meist fürs Management (→ politisch, vereinfacht!) ● Über: Finanzkennzahlen, Produktionskennzahlen, etc. ● Resultat: 2 / 37
  • 3. Technische Sicht www.fromdual.com ● Datenquellen (OLTP System, Dateien, Fremdsysteme) ● Datenaufbereitung (ETL) ● Datenhaltung (DWH: Staging Area) ● Datenauslieferung (DWH: Data Mart) 3 / 37
  • 4. Grober Ablauf www.fromdual.com ● Datenquellen ● Operative Datenbanken: OLTP (ODBC, JDBC) ● MySQL, Oracle, PostgreSQL, etc. ● Dateien (CSV, XML, ...) ● Apache Log, Host-Systeme ● Mit ETL-Jobs (Extract, Transform, Load) ● Skripte (PHP, Perl, ...) ● ETL Software (Pentaho, ...) ● Ins DWH ● Zuerst Staging Area ● Dann Data Mart (Dimensional Model, Star Schema) ● Report (SQL, Spreadsheet, Reporting-Software) 4 / 37
  • 5. Grobes Vorgehen www.fromdual.com Ich persönlich würde: ● Den Gaul von hinten her aufzäumen: ● Welchen Report brauche ich (= Z)? ● Woher kommen die Daten dazu (= A)? ● Wie komme ich von A nach Z? ● Datenfriedhöfe: Wir sammeln mal, man kann ja nie wissen... 5 / 37
  • 6. Beispiel www.fromdual.com ● Chef will: ● Report über Download-Statistik unserer Produkte ● Also folgenden Report (Mock-up): ● „Welchen Report brauche ich?“ (= Z) ● Download Charts nach Produkt, Version und Zeit! 6 / 37
  • 7. Woher die Daten? www.fromdual.com ● Download Statistiken (= A): ● Webserver Accesslog (access.log) → ~ CSV Datei ● Verteilt auf mehreren Servern? ● Was ist mit der Historie? ● Produkt, Version und Zeit? ● Beteiligte Parteien/Rollen? ● Kunde (= Management), SysAdmin (Server, Backup), Software Entwicklung (Produkt, Version), DWH Entwickler, ERP, Marketing, CRM, DBA, ... 7 / 37
  • 8. ETL Jobs www.fromdual.com ● ETL: Extract – Transform – Load ● Extrahieren der Daten von externen Quellen ● Transformieren der Daten entsprechend des Bedarfs ● Laden der Daten ins Ziel (Staging Area oder DM) ● Wie? ● Skripte (PHP, Perl, Shell, ...) ● Software (Pentaho, ...) ● Warum überhaupt ETL? ● Ich habe doch schon alle Daten in meiner DB! ● Stimmt! Aber... 8 / 37
  • 9. OLTP vs. OLAP www.fromdual.com Unterschiedliche Anwendungsmuster: ● Operative DB ● Online Transaction Processing (OLTP) ● Beispiel: Webshop, ERP, VoIP Calls, etc. ● Kurze, schnelle Zugriffe auf kleine Datenmengen ● Reporting DB ● Online Analytical Processing (OLAP) ● Beispiel: Monatsrechnungen, Umsatzentwicklung, etc. ● Langsamere Zugriffe auf grosse Datenmengen ● Hybride (Web-Anwendungen) :-( ● „Zeig mir die häufigst verkauften Produkte!“ ● „Was könnte sonst noch zu mir passen?“ 9 / 37
  • 10. Zugriffsmuster www.fromdual.com ● DB's sind schnell, wenn Daten im RAM liegen: ● OLTP kleine Datenmengen → RAM ● OLAP grosse Datenmengen → Platte ● Was passiert bei Kombination? ● Sieht man sehr oft! → Daher wenn möglich/nötig trennen! OLTP Hybrid OLAP 10 / 37
  • 11. ETL Technisch www.fromdual.com ● Extract ● ODBC/JDBC + SQL ● SELECT INTO OUTFILE → CSV ● mysql ­­xml ­e 'SELECT * FROM test' > test.xml ● Transform ● Sortieren der Daten nach Primary Key (InnoDB) ● DB's sind grundsätzlich langsam → wenn möglich ausserhalb der DB erledigen, schauen, welche Variante schneller ist, parallelisieren! ● Load ● Laden in Primary Key Sortierung (InnoDB) ● Parallel laden ● Single Row INSERT vs multi Row INSERT vs LOAD DATA INFILE 11 / 37
  • 12. Laden MyISAM vs. InnoDB www.fromdual.com ● MyISAM, (PK Sortierung), keine Trx 197 s (105 %) ● InnoDB, PK Sortierung, autocommit = 1, innodb_flush_log_at_trx_commit = 1 > 900 s (10 % der Daten) (4300 %!) ● InnoDB, PK Sortierung, mit Trx, innodb_flush_log_at_trx_commit = 1 188 s (= 100 %) 12 / 37
  • 13. Laden nach PK sortiert www.fromdual.com ● InnoDB, PK Sortierung, mit Trx, innodb_flush_log_at_trx_commit = 1 188 s (= 100 %) ● InnoDB, KEINE PK Sortierung, mit Trx, innodb_flush_log_at_trx_commit = 1 249 s (132 %) ● Sortierung: ca. 4 s ● („Datenbanken sind grundsätzlich langsam!“) shell> sort -t, -k9 -n test_rnd.sql > test_sorted.sql 13 / 37
  • 14. innodb_flush_log_at_trx_commit www.fromdual.com ● InnoDB, PK Sortierung, autocommit = 1, innodb_flush_log_at_trx_commit = 0 210 s (112 %) ● InnoDB, PK Sortierung, autocommit = 1, innodb_flush_log_at_trx_commit = 1 > 900 s (10 % der Daten) (4300 %!) ● InnoDB, PK Sortierung, autocommit = 1, innodb_flush_log_at_trx_commit = 2 236 s (126 %) ● InnoDB, PK Sortierung, mit Trx, innodb_flush_log_at_trx_commit = 0 186 s (97 %) ● InnoDB, PK Sortierung, mit Trx, innodb_flush_log_at_trx_commit = 1 188 s (= 100%) ● InnoDB, PK Sortierung, mit Trx, innodb_flush_log_at_trx_commit = 2 186 s (97 %) 14 / 37
  • 15. Parallel laden www.fromdual.com ● MyISAM, PK Sortierung, keine Trx, parallel 4 92 s (47 %, f = 2.1) ● MyISAM, PK Sortierung, keine Trx 197 s (= 100 %) ● InnoDB, PK Sortierung, mit Trx, innodb_flush_log_at_trx_commit = 1 188 s (= 100%) ● InnoDB, PK Sortierung, mit Trx, parallel 4 62 s (33%, f = 3.0) 15 / 37
  • 16. Single row vs multi row www.fromdual.com ● InnoDB, PK Sortierung, mit Trx, single row INSERT 188 s (= 100%) ● InnoDB, PK Sortierung, mit Trx, multi row INSERT 64 s (= 34%, f = 2.9) ● InnoDB, PK Sortierung, autocommit = 1, LOAD  DATA INFILE 50 s (= 27%, f = 3.8) ● InnoDB, PK Sortierung, autocommit = 1, INSERT  INTO SELECT 45 s (= 24%, f = 4.2) 16 / 37
  • 17. Weitere Ladehilfen www.fromdual.com ● INSERT ON DUPLICATE KEY UPDATE ● INSERT oder UPDATE ● REPLACE INTO ● INSERT oder DELETE + INSERT ● Federated Storage Engine? ● Transportable Tables? (MyISAM, oder InnoDB mit Percona Server) ● Lade-Jobs erneut startbar machen! ● Am 21. 8. laden wir Daten vom 20. 8. ● Daten waren falsch ● Am 22. 8. laden wir geflickten Daten vom 20. 8. und 21. 8. ● Nochmal laden aber vorher löschen!?! 17 / 37
  • 18. Welche Storage Engine? www.fromdual.com ● MyISAM (Aria) ● Nicht Crash-safe (Ausnahme: Aria!) ● Table-Lock, schlecht bei Concurrency ● Kleiner Footprint, schnell bei Full Table Scan ● InnoDB (XtraDB) ● Crash-safe ● Row-Lock, gut bei Concurrency ● Footprint ca. 2 x MyISAM ● Infobright, InfiniDB, Tokutek ● Spezialisiert (Columnar Storage Engine, Fractal Trees) ● Proprietär, teuer ● Spider SE? 18 / 37
  • 19. MySQL Konfiguration www.fromdual.com ● InnoDB: ● innodb_buffer_pool_size (RAM!) ● innodb_log_file_size (Data load) ● innodb_flus_log_at_trx_commit (Data load) ● MyISAM: ● key_buffer_size (RAM!) ● bulk_insert_buffer_size (Bulk data load) ● Query Cache? ● MyISAM/InnoDB Tabellenkompression? 19 / 37
  • 20. Staging Area www.fromdual.com ● Zurück zum Beispiel Download-Statistik: ETL – Job http ● parse http_log accesslog ● split Staging ● load Tabelle ● Data Staging Area / CREATE TABLE `page_hits_raw` ( `host` varchar(32) DEFAULT NULL, Tabelle `remote_host` char(15) DEFAULT NULL, `logname` varchar(64) DEFAULT NULL, `user` varchar(64) DEFAULT NULL, `ts` int(10) unsigned DEFAULT NULL, `methode` varchar(12) DEFAULT NULL, `request` varchar(1024) DEFAULT NULL, `protocol` varchar(16) DEFAULT NULL, `status` smallint(5) unsigned DEFAULT NULL, Noch kein Report `bytes` mediumint(8) unsigned DEFAULT NULL, ● `referer` varchar(1024) DEFAULT NULL, `user_agent` varchar(255) DEFAULT NULL, `ua_engine_compatibility` varchar(255) DEFAULT NULL, möglich... `ua_operating_system` varchar(255) DEFAULT NULL, `ua_platform` varchar(255) DEFAULT NULL, `ua_browser_platform_details` varchar(255) DEFAULT NULL, `ua_browser_enhancements` varchar(255) DEFAULT NULL ); 20 / 37
  • 21. Relational vs. Dimensional www.fromdual.com ● OLTP ● OLAP ● Entity Relationship Model (ER ● Dimensional Model (Star Schema) Schema) ● Stark denormalisiert ● Normalisiert (3rd NF) ● Hohe Redundanz ● Keine Redundanz ● Einfaches Schema ● Komplexes Schema ● Wenige Tabellen und Joins ● Vielen Tabellen und Joins (Joins sind teuer!) ● Hohe Schreib-Performance ● Hohe Lese-Performance 21 / 37
  • 22. Dimensional Schema Design www.fromdual.com Star Schema: ● Fact Tabellen ● Beinhaltet die Messwerte (Downloads der Produkte) ● Dimension Tabellen ● Einstiegspunkt für Fact Tabellen ● Beschreibung des Geschäftspro- zesses ● Oft „sortieren/gruppieren nach Produkt, nach Zeit, nach Version etc...“ 22 / 37
  • 23. Star Schema www.fromdual.com ● „Downloads sortieren/gruppieren nach Produkt, nach Zeit und nach Version!“ 23 / 37
  • 24. Fact Tabellen www.fromdual.com ● Speichert numerisch Performance-Metriken ● Werte sind additiv (1 download + 1 download) ● Möglichst atomar (NICHT 7 downloads pro Tag!) ● Selbe Granularität über ganze Tabelle (sonst Aggregate) ● Wenig Spalten (Anz. Dim + 2 – 5 Facts) aber oft sehr viele Zeilen! → Grosse Tabellen, daher auf Datentypen achten! ● Lokalität der Daten beeinflussbar: ● InnoDB Primary Key → physische Sortierung der Zeilen ● MyISAM: ALTER TABLE ... ORDER BY ... (teuer!) ● Partitionen (RANGE, meist nach Zeit)! ● Auf Dimension-Bus-Architektur passend 24 / 37
  • 25. Fact Beispiel www.fromdual.com CREATE TABLE `product_download_fact` ( `product_id` tinyint(4) NOT NULL, `date_id` smallint(6) NOT NULL, `time_id` smallint(6) NOT NULL, `geo_id` smallint(6) NOT NULL, `customer_id` smallint(6) NOT NULL, `download` tinyint(4) NOT NULL, `id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`), KEY `product_id` (`product_id`), KEY `date_id` (`date_id`), KEY `time_id` (`time_id`), KEY `geo_id` (`geo_id`) ); +------------+---------+---------+--------+-------------+----------+----+ | product_id | date_id | time_id | geo_id | customer_id | download | id | +------------+---------+---------+--------+-------------+----------+----+ | 0 | 9483 | 1389 | 36 | 57 | 1 | 1 | | 0 | 9487 | 1395 | 36 | 79 | 1 | 2 | | 0 | 9489 | 1396 | 37 | 85 | 1 | 3 | | 0 | 9492 | 1376 | 34 | 5 | 1 | 4 | | 0 | 9492 | 1414 | 39 | 0 | 1 | 5 | | 0 | 9493 | 1365 | 32 | 0 | 1 | 6 | | 0 | 9494 | 1382 | 34 | 28 | 1 | 7 | | 1 | 2 | 1283 | 20 | 0 | 1 | 8 | | 1 | 7 | 1316 | 25 | 23 | 1 | 9 | | 1 | 8 | 1329 | 27 | 71 | 1 | 10 | +------------+---------+---------+--------+-------------+----------+----+ 25 / 37
  • 26. Dimension Tabellen www.fromdual.com ● Einstieg und User Interface ins DWH (auf Fact Tabellen) ● Gehören zu Fact Tabellen ● Textbeschreiben des Geschäfts ● Hoch redundant ● Oft „sortieren/gruppieren nach Produkt, nach Zeit, nach Version etc...“ ● Haben viele und lange Spalten (50 – 100, hoch redundant) ● MySQL Limitationen beachten! ● Üblicherweise nur wenige Zeilen (< 1 Mio) ● Hier findet Einschränkung (WHERE), Gruppierung (GROUP BY) und Sortierung (ORDER BY) statt ● Verwendung in Report-Titeln ● Gute Hierarchie ermöglicht „Slice and Dice“ („Scheibchen und Würfel schneiden“) ● Abkürzungen und NULL Werte sind verpönt ● Sollte in Dimensions Bus-Architektur passen 26 / 37
  • 27. Dimension Beispiel www.fromdual.com CREATE TABLE product_dim ( CREATE TABLE date_dim ( id smallint(5) unsigned NOT NULL A_I id smallint(5) unsigned NOT NULL A_I , product_name varchar(255) NOT NULL , date date NOT NULL , product_version varchar(255) NOT NULL , year year(4) NOT NULL , PRIMARY KEY (id) , month tinyint(3) unsigned NOT NULL , month_en enum('January','February'... ); , month_de enum('Januar','Februar'... , day tinyint(3) unsigned NOT NULL +----+---------------------------+-----------------+ , last_day tinyint(3) unsigned NOT NULL | id | product_name | product_version | , weekday_en enum('Monday','Tuesday','Wednesday'... +----+---------------------------+-----------------+ , weekday_de enum('Montag','Dienstag','Mittwoch'... | 0 | Unknown | Unknown | , calendar_week tinyint(3) unsigned NOT NULL | 1 | MySQL Performance Monitor | Unknown | , PRIMARY KEY (id) | 2 | MySQL Performance Monitor | latest | ); | 11 | MySQL Performance Monitor | 0.9 | +------+------------+------+-------+----------+-----+----------+------------+---------------+ | 12 | Database Control | Unknown | | id | date | year | month | month_en | day | last_day | weekday_en | calendar_week | +------+------------+------+-------+----------+-----+----------+------------+---------------+ | 13 | Database Control | latest | | 4597 | 2012-08-01 | 2012 | 8 | August | 1 | 30 | Wednesday | 31 | | 4598 | 2012-08-02 | 2012 | 8 | August | 2 | 29 | Thursday | 31 | | 14 | Database Control | 0.1 | | 4599 | 2012-08-03 | 2012 | 8 | August | 3 | 28 | Friday | 31 | | 15 | MyEnv | Unknown | | 4600 | 2012-08-04 | 2012 | | 4601 | 2012-08-05 | 2012 | 8 | August 8 | August | | 4 | 5 | 27 | Saturday 26 | Sunday | | 31 | 31 | | 16 | MyEnv | latest | | 4602 | 2012-08-06 | 2012 | 8 | August | 6 | 25 | Monday | 32 | | 4603 | 2012-08-07 | 2012 | 8 | August | 7 | 24 | Tuesday | 32 | | 20 | MyEnv | 0.5 | | 4604 | 2012-08-08 | 2012 | 8 | August | 8 | 23 | Wednesday | 32 | | 4605 | 2012-08-09 | 2012 | 8 | August | 9 | 22 | Thursday | 32 | | 21 | Nagios Plugins | Unknown | | 4606 | 2012-08-10 | 2012 | 8 | August | 10 | 21 | Friday | 32 | | 25 | Nagios Plugins | 0.3.1 | +------+------------+------+-------+----------+-----+----------+------------+---------------+ +----+---------------------------+-----------------+ 27 / 37
  • 28. DWH Bus Architektur www.fromdual.com 28 / 37
  • 29. ETL von Staging in Data Mart www.fromdual.com ETL – Job http ● parse http_log accesslog ● split Staging ● load Tabelle ● Kopieren von Staging in Data Mart ETL – Job ● Facts mit Dim ● Skript oder SQL verlinken ● INSERT INTO product_download_fact SELECT * FROM http_log ... ● Ganz so einfach ist es meist nicht :-( product_down- load_fact ● Job wieder aufsetzbar machen! ● Fertig zum Reporting! 29 / 37
  • 30. Slowly Changing Dimenions www.fromdual.com ● Relativ statisch aber nicht ganz ● Beispiel: Kunde zieht um von A nach B ● Report „Umsatz nach Bundesland“? ● Type 1: Überschreiben der alten Werte ● Einfach aber Historie geht verlohren ● Type 2: Neuer Eintrag in Dimensionstabelle ● Meistgebrauchte Lösung (Historie) ● Type 3: Neue Spalte in Dimension ● Report nach alt und neu möglich (Vergleich mit letztem Jahr!) 30 / 37
  • 31. Reporting www.fromdual.com ● SQL → Nicht ganz Manager tauglich :-( ● Job: SELECT INTO OUTFILE → Spreadsheet (OO calc) ● OO calc über ODBC/JDBC auf DB lassen ● Reporting Tools (Pentaho, ...) 31 / 37
  • 32. SELECT → CSV → OO calc www.fromdual.com SELECT * FROM date_dim AS dd JOIN product_download_fact AS pdf ON pdf.date_id = dd.id JOIN product_dim AS pd ON pdf.product_id = pd.id WHERE pd.product_name = 'MySQL Performance Monitor' AND dd.year between 2007 and 2012 INTO OUTFILE '/tmp/oli/product_download_2007-2012.csv' ; 13852 rows in set (0.20 sec) +-------+--------+--------------------+------------+---------+------+------------------------------------+ | table | type | possible_keys | key | key_len | rows | Extra | +-------+--------+--------------------+------------+---------+------+------------------------------------+ | pd | ALL | PRIMARY | NULL | NULL | 26 | Using where | | pdf | ref | product_id,date_id | product_id | 1 | 2365 | Using index condition | | dd | eq_ref | PRIMARY | PRIMARY | 2 | 1 | Using index condition; Using where | +-------+--------+--------------------+------------+---------+------+------------------------------------+ 32 / 37
  • 33. OO calc → JDBC auf DB www.fromdual.com ● MS Access oder MS Excel sind theoretisch auch möglich :-) ● Connector/J (JDBC) ● OO calc → gestorben :-( ● Ggf. VIEW verwenden 33 / 37
  • 34. Reporting Tools www.fromdual.com ● Pentaho Business Analytics OSS ● JasperSoft (JasperReports) OSS ● Crystal Reports, MicroStrategy, Cognos, ... 34 / 37
  • 35. Ziel erreicht! www.fromdual.com ● Zeit: ab 6 – 8 Wochen (30 – 40 d, € 25 - 35k) 35 / 37
  • 36. Buchtipp www.fromdual.com ● The Data Warehouse Toolkit ● Ralph Kimball & Margy Ross 36 / 37
  • 37. Q&A www.fromdual.com Fragen ? Diskussion? Wir haben Zeit für ein persönliches Gespräch... ● FromDual bietet neutral und unabhängig: ● Beratung ● Remote-DBA ● Support für MySQL, Galera und Percona Server und MariaDB ● Schulung www.fromdual.com 37 / 37