总结这最近十天的工作和生活,就是一个字——折腾。
新工作的第一件事是做个数据统计分析平台。
前端用Angular,后端用Express,数据库用MongoDB。前两个还算熟悉,MongoDB是初次接触了,学了一下发现真是强大,在此记录一下学习过程。
一、MongoDB安装和启动
1、Windows
首先官网下载安装包https://www.mongodb.com/download-center/community下载好之后安装,一路Next。默认会装个可视化的交互界 面,用来查看数据什么的都很方便。打开这个可视化软件,直接点击连接就可以看到了。
2、Linux
下载地址同上。把文件放到自己喜欢的目录,例如 /download/mongodb-linux-x86_64-4.0.10.tgz
然后解压文件 tar -zxvf mongodb-linux-x86_64-4.0.10.tgz
MongoDB默认使用 /data/db 作为存储数据库的目录,但如果没有这个目录,他也不会自动创建的。所以我先手动创建 mkdir -p /data/db
然后进入MongoDB的bin目录下,我的放在 /usr/local/mongodb/bin ,执行启动命令
./mongod --fork --logpath=/usr/local/mongodb/log/mongodb1.log
虽然直接在mongodb/bin下执行 ./mongod 就可以启动,但是想要后台一直运行,就要加 --fork ,加了这个参数后会提示你必须指定logpath。
3、参考资料
写起来只有寥寥几句,但探索的过程实在漫长,看到的这篇文章给了我很大帮助,感谢这个作者
https://www.cnblogs.com/luotianshuai/p/5523171.html
二、MongoDB使用
1、导入数据
因为游戏已经上线了,才开始做数据分析平台,为了不让宝贵的线上数据流失,已经提前约定好数据格式,让游戏先去埋点了。这样等分析平台做好,可以直接结合收集好的数据来使用。所以我们这里也不用造假数据了,直接去线上偷一波真数据来用。
首先用mongodump命令导出数据 mongodump --db MyDataBaseName 这样就会导出一份Bson格式的数据。
然后将数据放到要导入的主机上,执行 mongorestore -d dataBaseName bsonPath
2、实战应用
关于mongo的语法,我基本是看这篇文章入门的https://blog.csdn.net/lk142500/article/details/84171819 ,之后就是项目中的实际应用。
由于在统计平台规划之前,先要让上线的游戏开始埋点,根本来不及规划数据格式,因此在自定义事件的数据格式里加入了一个Object类型,让客户端随便传,统一保存在这个Object下,并且统一存成String类型。这是前提,我在分析数据时就遇到了下面的问题:
mongo的聚合(aggregate)可以极其方便的完成数据统计,但是无法做类型数据转换,用数值当字符串比较大小可不是我们想要的。$where可以实现在查询中进行类型转换,但却不能在聚合中使用。。。数据源是不能动的,只好采用find+$where筛选数据+手写统计分析的算法来实现了。不过这样的好处是扩展会更方便了,不然以后终究会遇到聚合无法实现的数据分析的,到那时再大改结构不如现在就写好。
果然,自己写逻辑比学语法轻松多了
三、Git升级
中间还遇到一次Linux上git需要更新的问题,参考了这里https://segmentfault.com/a/1190000007134786 ,不一样的是我的阿里云连不上GitHub,只好本地下载好压缩包再用Xftp传上去的。
四、崩溃了
新装的东西总是 -bash: xxx: command not found 感觉需要重启(不)刷新什么的操作一下,网上看到可以用 init 命令,就试了一下 inin 1 结果悲剧了,Xshell连不上了,慌了一下发现了这里https://www.cnblogs.com/cherish010/p/9591129.html 然后用 init 3 再重启一下就好了。但依然还是command not found ,后来参考了这个https://www.cnblogs.com/yangjian-java/p/6693498.html,还有就是添加软连接,例如
ln -s /root/.nvm/versions/node/v12.6.0/bin/node /usr/local/bin/node
五、部署
1、上传
本地开发了一些功能,需要放到外网上看一下,就先来个简单粗暴的VSCode+sftp插件https://www.jianshu.com/p/0724921285d4还有这个https://blog.csdn.net/sunny327/article/details/81866785
2、启动
这里用了pm2
在Windows上是直接npm start,linux要换成 pm2 start npm --name MyAppName -- start
启动后可以 pm2 list 命令查看所有进程,还可以pm2 show MyAppName查看状态以及pm2log路径,遇到个Permission denied的错误,需要该权限,使用命令 chmod 777 fileName 参考https://blog.csdn.net/aaronthon/article/details/82883566
还遇到了端口被占用的问题,解决方法如下
netstat -ntulp 查询所有使用的端口
netstat -ntulp | grep 端口号 查看具体端口号使用情况
lsof -i:端口号 查看端口被哪个进程占用
kill -9 进程pid 如果需要杀死这个进程,使用这个命令
3、访问
又遇到问题了,Angular服务跑起来,其他电脑却不能访问,参考这里https://blog.csdn.net/weixin_34337381/article/details/92633804
但其实这样部署是有问题的,应该只把angular项目build出的文件放到服务器就可以了,这里采用nginx代理,至于具体怎么操作,明天在学。
六、最后
今天在A岛看倒放串,好欢乐啊https://adnmb2.com/t/16047311