我正在开发一个连接到 mysql 后端的应用程序。与 snapchat 有点类似,一旦当前用户从他们关注的用户那里获得照片并看到他们,他们就再也看不到这些照片了。但是,我不能只从数据库中删除图片,上传图片的用户仍然需要查看它们。所以我想出了一个有趣的设计,我想知道它好不好。
上传图片时,我还将创建一个 mysql 事件,该事件将在图片上传后的同一天运行,同时删除自身。如果我一直有人上传照片,那么就会一直创建事件。这如何影响 mysql 数据库。这甚至可以扩展吗?
我正在开发一个连接到 mysql 后端的应用程序。与 snapchat 有点类似,一旦当前用户从他们关注的用户那里获得照片并看到他们,他们就再也看不到这些照片了。但是,我不能只从数据库中删除图片,上传图片的用户仍然需要查看它们。所以我想出了一个有趣的设计,我想知道它好不好。
上传图片时,我还将创建一个 mysql 事件,该事件将在图片上传后的同一天运行,同时删除自身。如果我一直有人上传照片,那么就会一直创建事件。这如何影响 mysql 数据库。这甚至可以扩展吗?
不,不可扩展:删除单个记录很快,但是如果您的数量增加,您就会遇到麻烦。但是,您确实有一个使用分区的经典案例:
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));
然后,您可以按照习惯插入,每天删除一次分区(对所有数据使用 1 个事件),并每天创建一次新分区(使用删除旧分区的相同事件)。
为了确保一张照片可以存活 24 小时(最少),分区清理必须延迟 1 天(所以前天清理,而不是昨天本身)。
您的查询中的日期过滤器仍然需要从数据库中获取图像,以防止图像比显示的日期更早。