一、数据仓库概念
二、项目需求及架构设计
2.1 项目需求分析
2.2 项目框架
2.2.1 技术选型
2.2.2 系统数据流程设计
2.2.3 框架版本选型
2.2.4服务器选型
三、数据生成模块
3.1 埋点数据基本格式
公共字段:基本所有安卓手机都包含的字段
业务字段:埋点上报的字段,有具体的业务类型
3.2 事件日志数据
3.2.1 商品列表页(loading)
3.2.2 商品点击(display)
3.2.3 商品详情页(newsdetail)
3.2.4 广告(ad)
3.2.5 消息通知(notification)
3.2.6 用户前台活跃(active_foreground)
3.2.7 用户后台活跃(active_background)
3.2.8 评论(comment)
3.2.9 收藏(favorites)
3.2.10 点赞(praise)
3.4 数据生成脚本
3.4.1 创建Maven工程
1)创建log-collector
2)创建一个包名:com.atguigu.appclient
3)在com.atguigu.appclient包下创建一个类,AppMain。
4)在pom.xml文件中添加如下内容
<!--版本号统一-->
<properties>
<slf4j.version>1.7.20</slf4j.version>
<logback.version>1.0.7</logback.version>
</properties>
<dependencies>
<!--阿里巴巴开源json解析框架-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.51</version>
</dependency>
<!--日志生成框架-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
</dependencies>
<!--编译打包插件-->
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin </artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.atguigu.appclient.AppMain</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
3.4.2 公共字段Bean
1)创建包名:com.atguigu.bean
2)在com.atguigu.bean包下依次创建如下bean对象
四、maven
4.1目前的技术在开发中存在的问题
①一个项目就是一个工程
如果一个项目非常庞大,就不适合继续使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作
借助于maven就可以将一个项目拆分成多个工程
②项目中需要的jar包必须手动复制,粘贴到WEB-INF/lib目录下
带来的问题是:同样的jar包文件重复出现在不同的项目工程中,一方面浪费存储空间,另外也让工程比较臃肿
借助maven,可以将jar包仅仅保存在仓库中,有需要使用的工程引用这个文件接口,并不需要真的把jar包复制过来。
③jar包需要别人替我们准备好,或到官网下载
不同技术的官网提供jar包下载的形式是五花八门的。
有些技术的官网就是通过maven或svn等专门的工具来提供下载的。
如果是以不规范的方式下载的jar包,那么其中的内容很可能也是不规范的。
借助于maven可以以一种规范的方式下载jar包,因为所有知名框架或第三方工具的jar包已经按照统一的规范存放在了 maven的中央仓库中。
以规范的方式下载的jar包,内容也是可靠的
Tips:“统一的规范”不仅是对IT开发领域非常重要,对于整个人类社会都是非常重要的。
④一个jar包依赖的其他jar包需要自己手动加到项目中
FileUpload组件–>IO组件。commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar。
如果所有jar包之间的依赖关系都需要程序员自己非常清楚的了解,那么就会极大的增加学习成本。
maven会自动的将被依赖的jar包导入进来。
4.2maven是什么
①maven是一款服务于Java平台的自动化构建工具。
make-->Ant-->Maven-->Gradle
②构建:
[1]概念:以“Java源文件”,“框架配置文件”,“JSP”,“HTML”,“图片”等资源为原材料去“生产”一个可以运行的项目的过程
[2]编译:Java源文件[User.java]-->编译-->Class字节码文件[User.class]-->交给JVM去执行
[3]部署:一个BS项目最终运行的并不是动态Web工程本身,而是这个动态Web工程“编译的结果”
五、TestFastJson
package com.atsyf;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/*
1.Gson:new Gson()返回一个Gson对象
Gson.toJson():将Java对象转化为Json
Gson.fromJson():将JSON字符串转化为Java对象
2.FastJson:
JSON:z最核心的类
toJSONString(Object):将Java对象转化为JSON
parseObject(String,Class),将JSON转为Java对象
JSONObject:代表一个JSON对象,本质使用Map实现
{属性名:属性值,...}
put:向对象中添加属性
get:查询指定的属性值
JSONArray:代表一个JSON数组
[{},{},{}]
add:向array中添加元素
get:通过索引来取出
*/
public class TestFastJson {
public void testFastJson()throws Exception{
JSONObject jsonObject = new JSONObject();
jsonObject.put("name","jack");
jsonObject.put("age",18);
jsonObject.put("gender","male");
System.out.println(jsonObject);
}
public void testFastJson1()throws Exception{
String str="{\"gender\":\"male\",\"name\":\"jack\",\"age\":18}";
Person p=new JSON(){}.parseObject(str,Person.class);
System.out.println(p);
}
public void testFastJson2()throws Exception{
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("name","jack");
jsonObject1.put("age",18);
jsonObject1.put("gender","male");
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("name","jack");
jsonObject2.put("age",19);
jsonObject2.put("gender","male");
JSONArray jsonArray=new JSONArray();
jsonArray.add(jsonObject1);
jsonArray.add(jsonObject2);
System.out.println(jsonArray);
}
}
package com.atsyf;
public class Person {
private String name;
private Integer age;
private String gender;
public Person() {
}
public Person(String name, Integer age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}