2019-07-16 MongoDB和项目部署

总结这最近十天的工作和生活,就是一个字——折腾。

新工作的第一件事是做个数据统计分析平台。
前端用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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、查找/var目录下不属于root、lp、gdm的所有文件 find /var! \( -user root -...
    hl大宝阅读 1,490评论 0 0
  • 首先来看一下一个爬虫平台的设计,作为一个爬虫平台,需要支撑多种不同的爬虫方式,所以一般爬虫平台需要包括 1、爬虫规...
    闪现码狗阅读 5,546评论 0 0
  • day13 课程过半回顾总结 01. 第一阶段回顾:服务器硬件知识1.系统运维工作:网络安全运维云计算运维大数据运...
    ManBu_x阅读 1,828评论 0 1
  • PHP的进阶之路 越来越多的人进入开发这个圈子,踏上码农这个不归路。根据这些年在开发圈子总结的LNMP程序猿发展轨...
    新锐研一阅读 1,238评论 0 0
  • Kubeadm安装kubernetes 步骤一:安装kubeadm 1、使用命令“apt-get install ...
    陈明槐阅读 5,412评论 0 0

友情链接更多精彩内容