~mysqlatfacebook/mysqlatfacebook/tools

« back to all changes in this revision

Viewing changes to prefetch/custom_query_prefetch.py

  • Committer: Domas Mituzas
  • Date: 2011-12-03 19:55:54 UTC
  • Revision ID: domas@facebook.com-20111203195554-xvvgeq6gw01cs4yq
Replication prefetcher:
* binlog.py - binlog reading class
* readahead.py - main chassis for replication event prefetching
* mysql.py - helper MySQL class
* rewriters.py - helper query 'rewrite' routines
* custom_query_prefetch.py - example for query-specific prefetcher
* fake_updates_prefetch.py - InnoDB fake changes based prefetcher

Licensed under Apache License 2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/local/bin/python2.6 -Wignore::DeprecationWarning
 
2
 
 
3
""" Example prefetcher for a single query """
 
4
 
 
5
import re
 
6
 
 
7
delete_re = re.compile("DELETE FROM `(\w+)` WHERE `id` = '(\d+)' AND `type` = '(\d+)' ")
 
8
def delete_rewrite(event):
 
9
    """ Rewrite DELETE query into few SELECTs on different indexes """
 
10
    try:
 
11
        table, id, type = delete_re.findall(event.query)[0]
 
12
        return (
 
13
            "SELECT 1 FROM `%s`.`%s`  WHERE id = %s " % (event.db, table, id),
 
14
            "SELECT 1 FROM `%s`.`%s` FORCE INDEX (idtype) "\
 
15
                "WHERE id = %s and type = %s" % (event.db, table, id, type),
 
16
        )
 
17
    except:
 
18
        return None
 
19
 
 
20
 
 
21
import readahead
 
22
import sys
 
23
 
 
24
prefetch = readahead.Prefetch()
 
25
prefetch.rewriter = None
 
26
prefetch.runners = 64
 
27
prefetch.prefixes = [
 
28
    ("DELETE", delete_rewrite),
 
29
]
 
30
 
 
31
if __name__ == "__main__":
 
32
    prefetch.run()