Search code examples
iosmysqlmysql-event

iOS and Mysql Events


I'm working on an app that connects to a mysql backend. It's a little simliar to snapchat in that once the current user gets the pics from the users they follow and see them they can never again see these pics. However, I can't just delete the pics from the database, the user who uploaded the pic still needs to see them. So I've come up with an interesting design and I want to know if its good or not.

When uploading the pic I would also create a mysql event that would run the same time exactly one day after the pic was uploaded deleting itself. If I have people uploading pics all the time events would be created all the time. How does this effect the mysql database. Is this even scalable?


Solution

  • No, not scalable: Deleting of single records is quick, however if your volume increases, you run into trouble. You do however have a classic case for using partitioning:

    Create table your_images (insert_date DATE,some_image BLOB, some_owner INT)
    ENGINE=InnoDB /* row_format=compressed key_block_size=4 */
    PARTITION BY RANGE COLUMNS (insert_date) 
    PARTITION p01 VALUES LESS THAN ('2015-07-12'),
    PARTITION p02 VALUES LESS THAN ('2015-07-03'),
    PARTITION p0x VALUES LESS THAN (ETC),
    PARTITION p0n VALUES LESS THAN (MAXVALUE));
    

    You can then insert just as you are used to, drop the partitions once per day (using 1 event for all your data), and create new partitions also once per day (using the same event which is dropping your old partitions).

    To make certain a photo lives for 24 hours (minimum), the partition cleanup has to occur with a 1 day delay (So cleanup the day before yesterday, not yessterday itself).

    A date filter in your query getting the image from the database is still needed to prevent the images from older then a day being displayed.