老生常谈的问题,轮询或者websocket看实际情况选吧
数据库可以考虑采用redis,当然也可以mysql
给你看一下,我这边用的消息表,仅供参考,根据实际情况调整。我这边没有考虑分表问题
CREATE TABLE `tb_message` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`member_id` int(10) UNSIGNED NOT NULL COMMENT '用户ID',
`type` tinyint(3) UNSIGNED NOT NULL COMMENT '消息类型',
`is_read` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已读',
`create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
`read_time` timestamp(0) NOT NULL COMMENT '读取时间',
`is_delete` bit(1) NOT NULL COMMENT '是否删除',
`delete_time` timestamp(0) NOT NULL COMMENT '删除时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `member_id`(`member_id`, `is_delete`, `type`, `is_read`, `create_time`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 611 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
CREATE TABLE `tb_message_ex` (
`message_id` bigint(20) UNSIGNED NOT NULL COMMENT '消息ID',
`message` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '消息内容',
`data` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '消息数据',
PRIMARY KEY (`message_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;