Facebook: embedding extra information in to the
MySQL replication stream
Patrick Galbraith
patg at grazr.com
Wed Apr 2 19:56:13 UTC 2008
Brian Aker wrote:
> Hi!
>
> On Apr 2, 2008, at 12:35 PM, Gabriel Laden wrote:
>
>> Quote:
>> Fortunately MySQL is open source software, meaning we can actually
>> change the way it works by modifying the code. We did just that—
>> embedding extra information in to the MySQL replication stream that
>> allows us to properly update memcached in Virginia. This ensures that
>> the cache and the database are always in sync.
>>
Hi there!
I have written Memcached Functions for MySQL for things like this. You
can have a setup where certain data you want to automatically be set in
memcached can be done with triggers that call these functions, depending
on what you have to store.
I have been meaning to write a users guide showing how you can leverage
these functions.
From my livejournal blog at http://capttofu.livejournal.com:
CREATE TABLE `jsoncache` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`memcache_key` varchar(32) DEFAULT NULL,
`json` mediumtext,
PRIMARY KEY (`id`)
)
mysql> delimiter | mysql> CREATE TRIGGER `jsoncache_trigger` BEFORE
INSERT ON `jsoncache` FOR EACH ROW begin set @id= concat('jsoncache:',
NEW.id); set @tt= memc_set(@id, NEW.json); set NEW.memcache_key = @id; end |
Query OK, 0 rows affected (0.05 sec)
mysql>delimiter ;
mysql> insert into jsoncache (json) values ('{{json stuff}}');
Query OK, 1 row affected (0.00 sec)
mysql> select * from jsoncache;
+----+--------------+----------------+
| id | memcache_key | json |
+----+--------------+----------------+
| 1 | jsoncache:1 | {{json stuff}} |
+----+--------------+----------------+
1 row in set (0.00 sec)
mysql> select memc_get('jsoncache:1');
+-------------------------+
| memc_get('jsoncache:1') |
+-------------------------+
| {{json stuff}} |
+-------------------------+
1 row in set (0.00 sec)
Hope this helps!
--Patrick
>>
>> Was this code change released by Facebook ? We have exactly such a
>> need for this type of setup.
>
>
> No, it was not. You can emulate this behavior by using the MySQL UDF
> in your queries, which is a better route to go for supportability.
> http://tangent.org/586/Memcached_Functions_for_MySQL.html
>
> Cheers,
> -Brian
>
> --
> _______________________________________________________
> Brian "Krow" Aker, brian at tangent.org
> Seattle, Washington
> http://krow.net/ <-- Me
> http://tangent.org/ <-- Software
> _______________________________________________________
> You can't grep a dead tree.
>
>
>
--
Patrick Galbraith, Senior Programmer
Grazr - Easy feed grazing and sharing
http://www.grazr.com
Satyam Eva Jayate - Truth Alone Triumphs
Mundaka Upanishad
More information about the memcached
mailing list