Академический Документы
Профессиональный Документы
Культура Документы
Giuseppe Maxia,
MySQL Community Team Lead
Database Group,
Sun Microsystems Inc
giuseppe.maxia@sun.com
Creative programming?
Creative programming?
WTF?
Creative programming?
WTF?
bright ideas
Creative programming?
hacking!
WTF?
bright ideas
About me
22 years in IT
consultant
MySQL community
QA developer
MySQL Community Team Lead
About me
database hacker
creative programmer
??
Agenda
Database programming blues
Stored routines
Triggers
Views
Events
Federated
Blackhole
Creative loops
MySQL Proxy
2008 CommunityOne Conference | developers.sun.com/events/communityone | 6
Agenda
Database programming blues
Stored routines
Triggers
Views
Events
Federated
Blackhole
Creative loops
MySQL Proxy
2008 CommunityOne Conference | developers.sun.com/events/communityone | 6
Agenda
Database programming blues
Stored routines
Triggers
Views
Events
Federated
Blackhole
Creative loops
MySQL Proxy
2008 CommunityOne Conference | developers.sun.com/events/communityone | 6
Agenda
Database programming blues
Stored routines
Triggers
Views
Events
Federated
Blackhole
Creative loops
Revisiting Triggers
MySQL Proxy
2008 CommunityOne Conference | developers.sun.com/events/communityone | 7
"I (love|hate)\s*([Ff]\w*)\s*REGEXP"
SELECT t.id
FROM (SELECT id2 FROM other
WHERE b = 2) AS t
WHERE a > (SELECT MAX(x) FROM z);
database handling
bring the
logic at
application
level
database handling
database
C/C++
Java
Perl
PHP
.NET
2008 CommunityOne Conference | developers.sun.com/events/communityone | 12
database handling
too many languages
Java class
database
C/C++
Java
Perl
PHP
Perl library
PHP library
.NET
2008 CommunityOne Conference | developers.sun.com/events/communityone | 13
database handling
database handling
database
C/C++
stored
routines
library
Java
Perl
PHP
.NET
2008 CommunityOne Conference | developers.sun.com/events/communityone | 15
database handling
database handling
database
C/C++
Proxy
library
Java
Perl
PHP
.NET
Agenda
Database programming blues
Stored routines
Triggers
Views
Events
Federated
Blackhole
Creative loops
Revisiting Triggers
MySQL Proxy
2008 CommunityOne Conference | developers.sun.com/events/communityone | 18
Agenda
Database programming blues
Stored routines
Triggers
Views
Events
Federated
Blackhole
Creative loops
Revisiting Triggers
MySQL Proxy
2008 CommunityOne Conference | developers.sun.com/events/communityone | 22
Triggers - HACKS!
wait.
Strong combination with FEDERATED and
BLACKHOLE
Agenda
Database programming blues
Stored routines
Triggers
Views
Events
Federated
Blackhole
Creative loops
Revisiting Triggers
MySQL Proxy
2008 CommunityOne Conference | developers.sun.com/events/communityone | 26
Views
no storage
look like tables
can aggregate data
can insert data
can save time
but can also become horribly inefficient
Agenda
Database programming blues
Stored routines
Triggers
Views
Events
Federated
Blackhole
Creative loops
Revisiting Triggers
MySQL Proxy
2008 CommunityOne Conference | developers.sun.com/events/communityone | 31
Events
CREATE EVENT e1
ON SCHEDULE
AT NOW() + INTERVAL 10 minute
DO
CALL clean_employee_recs();
Events
CREATE EVENT e1
ON SCHEDULE
EVERY 5 minute
DO
CALL import_recs_from_file();
Agenda
Database programming blues
Stored routines
Triggers
Events
Federated
Blackhole
Creative loops
Revisiting Triggers
MySQL Proxy
2008 CommunityOne Conference | developers.sun.com/events/communityone | 35
table t1f
federated
table t1
MyISAM
2008 CommunityOne Conference | developers.sun.com/events/communityone | 36
base
table
SELECT ID
FROM table_name
WHERE x = 10
expected
~ 100 records
SELECT ID
FROM table_name
filter
returns
1 million records
SELECT ID
FROM table_name
WHERE x = 10
expected
~ 100 records
base
table
SELECT ID
FROM table_name
WHERE x = 10
returns
100 records
Agenda
Database programming blues
Stored routines
Triggers
Views
Events
Federated
Blackhole
Creative loops
Revisiting Triggers
MySQL Proxy
2008 CommunityOne Conference | developers.sun.com/events/communityone | 40
Blackhole
The NON-STORAGE engine
like /dev/null in Unix
used for triggers and replication relay
record
record
record
record
binary log
triggers
Agenda
Database programming blues
Stored routines
Triggers
Views
Events
Federated
Blackhole
Creative loops
Revisiting Triggers
MySQL Proxy
2008 CommunityOne Conference | developers.sun.com/events/communityone | 42
cascade triggers
BASE TABLE
before insert
after insert
before update
after update
before delete
after delete
t1
2008 CommunityOne Conference | developers.sun.com/events/communityone | 44
cascade triggers
BASE TABLE
before insert
Federated
TABLE
before insert
after insert
before update
after insert
after update
after update
before delete
before delete
after delete
after delete
t1
before update
t1_f1
2008 CommunityOne Conference | developers.sun.com/events/communityone | 44
triggers on request
Federated
TABLE
before insert
either
BASE TABLE
after update
t1_f1
after delete
Federated
TABLE
or
before insert
after insert
before update
t1
t1_f2
before delete
blackhole triggers
BASE TABLE
before insert
blackhole
TABLE
t1
BASE TABLE
t1_b1
t2
2008 CommunityOne Conference | developers.sun.com/events/communityone | 46
remote execution
blackhole
table
before insert
t1
Federated
TABLE
t1_f1
remote execution
VIEW
function
v1
Federated
TABLE
t1_f1
Agenda
Database programming blues
Stored routines
Triggers
Views
Events
Federated
Blackhole
Creative loops
Revisiting Triggers
MySQL Proxy
2008 CommunityOne Conference | developers.sun.com/events/communityone | 49
loops
or why do we have to endure this?
loops with CURSORS
dreadful syntax
INEFFICIENT (temporary table created)
loops alternatives ... coming soon
data to
process
crc
flag
cursor
temporary
loop
table
handler
crc
2008 CommunityOne Conference | developers.sun.com/events/communityone | 51
data to
process
crc
blackhole
table
crc
2008 CommunityOne Conference | developers.sun.com/events/communityone | 54
IT'S FASTER!!!
2008 CommunityOne Conference | developers.sun.com/events/communityone | 56
loops with
MySQL stored routines library
call
for_each_table_value_complete(
'db_name', 'table_name',
'id', null, null, '',
'set @crc=MD5(concat(@crc,$I1))',
'set @crc=""',
'select @crc','',
'once');
Agenda
Database programming blues
Stored routines
Triggers
Views
Events
Federated
Blackhole
Creative loops
Revisiting Triggers
MySQL Proxy
2008 CommunityOne Conference | developers.sun.com/events/communityone | 59
MySQL Proxy
So, what about "make coffee" ?
MySQL
Proxy
Lua script
connection
hook
function
function
function
read query
hook
function
read result
hook
function
Lua script
connection
hook
function
function
function
read query
hook
function
read result
hook
function
??
Perl ?
PHP?
Javascript?
[whatever]?
EMBEDDED systems
Widely used (lighttpd)
EMBEDDED systems
Widely used (lighttpd)
lighttpd, like MySQL
Proxy, was created by
Jan Kneschke
2008 CommunityOne Conference | developers.sun.com/events/communityone | 67
injecting
queries
injecting
queries
Debugging
server
proxy
client
diagnostics
text
2008 CommunityOne Conference | developers.sun.com/events/communityone | 71
Debugging scripts
server
proxy
proxy
diagnostics
text
diagnostics
text
client
pivot tables
loops
client
proxy
client
fake packets
e.g.
connectors
Summary
MySQL is open to development creativity
Know your bricks
stored routines, triggers, views, events
dynamic engines (Federated, Blackhole)
MySQL Proxy
Put them together : be creative
Q&A
Let's talk!
80