此博客用于个人学习,来源于网上,对知识点进行一个整理。
1. SpringBoot 与 MVC:
IOC 作为 SpringBoot 的核心之一,先简单看一下它的原理。
更多内容可以参考这篇博客:Spring 框架学习第三节:核心理念之一 —— IoC(控制反转)
以及了解 Spring MVC 的模块解析:
更多内容可以参考这篇博客:Spring MVC 框架学习第一节:MVC 的基本概念和入门
2. 数据表设计:
2.1 分析系统层级关系:
先介绍一下广告投放系统的一些基本概念和一些基本功能点,也就是广告投放系统里面要做什么事情,包含什么功能。
首先介绍四个概念:
- 用户账户:最高层级,用于定义广告主或代理商,只有有了用户才会有接下来的数据投放
- 推广计划 :一类品牌或产品广告投放的规划,自身并不定义太多关于广告自身的信息,它会将信息打包下放到推广单元层级
- 推广单元:一个确定的广告投放策略,描述了投放广告的规则信息,推广计划与推广单元是一对多的关系
- 推广单元维度限制:推广单元一般会做一些限制级别的动作,比如:关键词限制,只有广告词带有一些关键词才会命中推广单元;地域限制,上海的居民会看到上海的商品的广告信息;兴趣限制,喜欢篮球的更多推送体育方面的广告
- 广告创意:展示给用户看到的数据,可以是图片、文本或者一段视频,推广单元和广告创意是多对多的关系
接下来看一下四个概念的层级关系:
- 最高层级是推广账户级别,只有有了用户账户,才能在我们的平台上推广计划
- 第二层级是推广计划,一个推广计划一般是一个品牌,每个推广计划都有一些推广单元,是父子关系
- 第三层级是推广单元,分为关键词,地域,兴趣和人群,一个推广单元也被称为维度
- 最低层级是创意,创意也是一个单独的层级,它其实与任何一个层级相关联,同时它与推广单元是多对多的关系,每一个推广单元都可以去添加一个创意,每个创意也可以添加到推广单元上面,两者是多对多的
2.2 数据表设计:
数据表的设计与广告数据的核心要素是相对的,目的就是去表达各个要素。但是,数据表中的数据字段与类型定义是可以“自 由发挥”的,这需要与当前的具体业务进行匹配。
用户账户表:
用户账户(ad_user) | 含义 |
---|---|
username | 账户名称 |
token | 账户 token |
user_status | 账户状态 |
create_time | 创建时间 |
update_time | 更新时间 |
推广计划表:
推广计划(ad_plan) | 含义 |
---|---|
user_id | 标记当前记录所属用户 |
plan_name | 推广计划名称 |
plan_status | 推广计划状态 |
start_date | 推广计划开始时间 |
end_date | 推广计划结束时间 |
create_time | 创建时间 |
update_time | 更新时间 |
其中,推广的有效时间为推广计划的开始时间到结束时间,如果不属于这段时间,推广单元也就没有了意义。
推广单元与维度限制表:
推广单元(ad_unit) | 含义 |
---|---|
plan_id | 关联推广计划 id |
unit_name | 推广单元名称 |
unit_status | 推广单元状态 |
position_type | 广告位类型(开屏,贴片等) |
budget | 预算 |
create_time | 创建时间 |
update_time | 更新时间 |
关联词限制(ad_unit_keyword) | 含义 |
---|---|
unit_id | 关联推广单元 id |
keyword | 关键词 |
地域限制(ad_unit_it) | 含义 |
---|---|
unit_id | 关联推广单元 id |
province | 省 |
city | 市 |
兴趣限制(ad_unit_district) | 含义 |
---|---|
unit_id | 关联推广单元 id |
it_tag | 兴趣标签 |
创意、创意与推广单元关联关系表:
创意(ad_creative) | 含义 |
---|---|
name | 创意名称 |
type | 物料类型(图片,视频) |
material_type | 物料子类型(bmp,avi) |
height | 高度 |
width | 宽度 |
size | 物料大小,单位 KB |
duration | 持续时长,视频不为0 |
audit_status | 审核状态 |
user_id | 标记当前所属用户 |
url | 物料地址 |
create_time | 创建时间 |
update_time | 更新时间 |
创意与推广单元关联(createive_unit) | 含义 |
---|---|
creative_id | 关联创意 id |
unit_id | 关联推广单元 id |
3. 广告投放系统模块:
在 imooc-ad-service 下,创建 module:ad-sponsor。
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 指定父pom, 注意它是 imooc-ad-service 的子模块 -->
<parent>
<artifactId>imooc-ad-service</artifactId>
<groupId>com.imooc.ad</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<!-- 当前项目/模块的坐标, groupId从父模块中继承 -->
<artifactId>ad-sponsor</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<!-- 引入 Web 功能 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--
Eureka 客户端, 客户端向 Eureka Server 注册的时候会提供一系列的元数据信息, 例如: 主机, 端口, 健康检查url等
Eureka Server 接受每个客户端发送的心跳信息, 如果在某个配置的超时时间内未接收到心跳信息, 实例会被从注册列表中移除
-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 引入 Feign, 可以以声明的方式调用微服务 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 引入服务容错 Hystrix 的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<!-- 引入服务消费者 Ribbon 的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<!-- Java Persistence API, ORM 规范 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-da