专栏名称: 苏小林
目录
相关文章推荐
AustinDatabases  ·  ORACLE 最终会把 MySQL ... ·  21 小时前  
数据中心运维管理  ·  机房巡检必须关注的指标 ·  2 天前  
数据中心运维管理  ·  大数据中心建设方案 ·  4 天前  
数据中心运维管理  ·  数据中心2025年的可持续性趋势 ·  1 周前  
数据中心运维管理  ·  机房精密空调基础知识 ·  6 天前  
51好读  ›  专栏  ›  苏小林

论坛系统架构设计和商业模型分析

苏小林  · 掘金  ·  · 2020-02-28 05:46

正文

阅读 127

论坛系统架构设计和商业模型分析

参与了论坛系统的开发,总结一下

技术栈

  1. 使用git进行代码版本控制
  2. 使用jumpserver管理服务器资产权限
  3. 使用kafka做消息队列系统
  4. 使用elasticsearch存放大批量关联数据
  5. 使用内部研发的代码部署审核系统
  6. 使用yii1框架(历史遗留系统了)
  7. 使用qconf做分布式配置中心
  8. 使用logrotate做日志轮转
  9. 使用sphinx做文本分词和搜索
  10. 使用confluence做文档管理
  11. 使用禅道做项目bug管理

内容主表设计

内容系统内容表主体主要是存放内容公有的字段,比如帖子标题、帖子类型、浏览数等

一些特殊的字段,比如帖子内容字段因为占用空间比较大(通常是text数据类型),并不适合放在内容主体表中(影响查询速度),可以单独创建一张表来进行存储

CREATE TABLE `tb_subject` (
  `subject_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL DEFAULT '',
  `subject_type` text NOT NULL DEFAULT 0,
  `uid` bigint(20) unsigned NOT NULL DEFAULT 0,
  `view_cnt` int(11) NOT NULL DEFAULT 0,
  `display_yn` tinyint(1) NOT NULL DEFAULT 1,
  `create_date` datetime NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',
  `update_date` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '更新时间',
  PRIMARY KEY (`subject_id`),
  KEY `idx_uid` (`uid`,`create_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='贴子主体表';
复制代码

帖子内容文本类型的字段通常设计一张新表来单独存储

CREATE TABLE `tb_subject_content` (
  `subject_id` int(11) unsigned NOT NULL DEFAULT 0,
  `content` text DEFAULT NULL COMMENT '帖子内容',
  PRIMARY KEY (`post_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='贴子内容';
复制代码

扩展属性表设计

对非标准的内容数据进行结构化存储,比如帖子的标签、关键词等(只有部分帖子有,并且数量不固定)

CREATE TABLE `tb_column_info` (
  `column_id` int(11) unsigned NOT NULL DEFAULT 0,
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `extend_type` mediumint(6) NOT NULL DEFAULT 0,
  `extend_id` int(11) unsigned NOT NULL DEFAULT 0,
  `extend_status` tinyint(1) NOT NULL DEFAULT 0,
  `extend_content` varchar(500) NOT NULL DEFAULT '',
  `create_time` datetime NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`column_id`,`id`),
  KEY `idx_id` (`id`),
  KEY `idx_column_id` (`extend_id`,`extend_type`,`extend_status`,`column_id`),
  KEY `idx_type_time` (`extend_type`,`extend_status`,`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='属性扩展表';
复制代码

分类/标签 表设计

分类表有两种设计方案,一种是专为帖子主体表设计一个分类表,和帖子id进行强关联,另一种是设计一张通用的分类表,可以和帖子以外的内容进行关联,比如新闻内容,一般采用通用的分类表设计,这样可以最大限度的减少重复的分类表的维护,分类表设计参考如下:

CREATE TABLE `tb_tag` (
  `tag_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `tag_name` varchar(255) NOT NULL DEFAULT '',
  `tag_type` tinyint(3) NOT NULL
                            

                            





请到「今天看啥」查看全文

推荐文章
数据中心运维管理  ·  机房巡检必须关注的指标
2 天前
数据中心运维管理  ·  大数据中心建设方案
4 天前
数据中心运维管理  ·  数据中心2025年的可持续性趋势
1 周前
数据中心运维管理  ·  机房精密空调基础知识
6 天前
德鲁克博雅管理  ·  不要工作忙碌,却还在原地踏步!
7 年前