首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

mac下Android开发环境搭建

之前一段时间在学习ios的开发,近一段时间想着也接触下Android开发,以来加深对移动端开发的理解。这里根据自己配置Android开发环境的过程,比较详细的来总结下自己的安装过程,希望对一些正准备配置Android开发环境的小伙伴们有一定帮助。 1.Java JDK 需要先说明下,OS X系统是自带有Java JDK1.6的。不过这里我安装的是JDK7,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html。见下图: 下载后,双击安装,如下图: 2.ADT(Android Develop Bundle) 下载地址:http://developer.android.com/sdk/index.html 如下图: 下载成功后,安装: 解压开发工具包后可看到底下有两个文件夹:eclipse和sdk。其中eclipse这个目录里有我们编程用的集成开发环境,而sdk这个目录里放的是和 android 开发相关的资源,具体到里面每个目录做什么,这里我就先不详细展开。 注意:尽量将解压的开发工具包放在一级目录下。有时你放在用中文命名的目录下,运行Eclipse会报错。 3.运行eclipse。 进入到eclipse目录下,运行Eclipse。之后会提示你工程文件夹放哪里,这个你可以自己设置路径(不要放在中文目录下),也可以使用默认路径。 有可能运行Eclipse时,会弹出如下图信息。这时也不用慌张,直接点击“安装” ,安装Java SE 6 runtime成功后,就可以运行Eclipse了。 进行到这里,mac下Android的开发环境就基本大功告成了,是不是so easy? 本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3525895.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Centos6.5搭建smokeping服务

1.安装所需软件包。 yuminstall-yperlperl-Net-Telnetperl-Net-DNSperl-LDAPperl-libwww-perlperl-IO-Socket-SSLperl-Socket6perl-Time-HiResperl-ExtUtils-MakeMakerrrdtoolrrdtool-perlcurlhttpdhttpd-develgccmakewgetlibxml2-devellibpng-develglibpangopango-develfreetypefreetype-develfontconfigcairocairo-devellibart_lgpllibart_lgpl-develpoptpopt-devellibidnlibidn-devel 2.创建一个放置软件包的常用目录。 mkdir/smokeping/tools–p 3.下载fping软件包,并且解压,编译安装。 wgethttp://fping.org/dist/fping-3.10.tar.gz tar-zxvffping-3.10.tar.gz cdfping-3.10/ ./configure make&&makeinstall cd.. 4.下载echoping并且解压,编译安装。 wgethttp://fossies.org/linux/misc/old/echoping-6.0.2.tar.gz tar-zxvfechoping-6.0.2.tar.gz cdechoping-6.0.2/ ./configure make&&makeinstall 5.下载smokeping并且解压,编译安装。 wgethttp://oss.oetiker.ch/smokeping/pub/smokeping-2.6.9.tar.gz tar-zxvfsmokeping-2.6.9.tar.gz cdsmokeping-2.6.9/ ./setup/build-perl-modules.sh/usr/local/smokeping/thirdparty ./configure--prefix=/usr/local/smokeping gmakeinstall 6.创建三个文件目录和一个日志文件,并且设置属主和属组均为apache。 cd/usr/local/smokeping/ mkdir{cache,data,var} touch/var/log/smokeping.log chownapache.apache/var/log/smokeping.log chmod600/usr/local/smokeping/etc/smokeping_secrets.dist chown-Rapache.apachedata/ chown-Rapache.apachevar/ chown-Rapache.apachecache/ 7.修改相应的配置文件。 cd/usr/local/smokeping/htdocs/ mvsmokeping.fcgi.distsmokeping.fcgi cd/usr/local/smokeping/etc/ mvconfig.distconfig 8.配置apache配置文件和smokeping的配置文件。 在/etc/httpd/conf/httpd.con末尾添加以下加行: Alias/cache"/usr/local/smokeping/cache/" Alias/cropper"/usr/local/smokeping/htdocs/cropper/" Alias/smokeping"/usr/local/smokeping/htdocs/smokeping.fcgi" <Directory"/usr/local/smokeping"> AllowOverrideNone OptionsAll AddHandlercgi-script.fcgi.cgi Orderallow,deny Allowfromall DirectoryIndexsmokeping.fcgi </Directory> smokeping配置文件如下所示: cat/usr/local/smokeping/etc/config ***General*** owner=PeterRandom contact=some@address.nowhere mailhost=my.mail.host sendmail=/usr/sbin/sendmail #NOTE:donotputtheImageCachebelowcgi-bin #sinceallfilesundercgi-binwillbeexecuted...thisisnot #goodforp_w_picpaths. imgcache=/usr/local/smokeping/cache imgurl=cache datadir=/usr/local/smokeping/data piddir=/usr/local/smokeping/var cgiurl=http://10.104.96.155/smokeping.cgi smokemail=/usr/local/smokeping/etc/smokemail.dist tmail=/usr/local/smokeping/etc/tmail.dist #specifythistogetsysloglogging syslogfacility=local0 #eachprobeisnowruninitsownprocess #disablethistoreverttotheoldbehaviour #concurrentprobes=no ***Alerts*** to=alertee@address.somewhere from=smokealert@company.xy +someloss type=loss #inpercent pattern=>0%,*12*,>0%,*12*,>0% comment=loss3timesinarow ***Database*** step=300 pings=20 #consfnmrhbstepstotal AVERAGE0.511008 AVERAGE0.5124320 MIN0.5124320 MAX0.5124320 AVERAGE0.5144720 MAX0.5144720 MIN0.5144720 ***Presentation*** template=/usr/local/smokeping/etc/basepage.html.dist charset=utf-8 +charts menu=Charts title=Themostinterestingdestinations ++stddev sorter=StdDev(entries=>4) title=TopStandardDeviation menu=StdDeviation format=StandardDeviation%f ++max sorter=Max(entries=>5) title=TopMaxRoundtripTime menu=byMax format=MaxRoundtripTime%fseconds ++loss sorter=Loss(entries=>5) title=TopPacketLoss menu=Loss format=PacketsLost%f ++median sorter=Median(entries=>5) title=TopMedianRoundtripTime menu=byMedian format=MedianRTT%fseconds +overview width=600 height=50 range=10h +detail width=600 height=200 unison_tolerance=2 "Last3Hours"3h "Last30Hours"30h "Last10Days"10d "Last400Days"400d #+hierarchies #++owner #title=HostOwner #++location #title=Location ***Probes*** +FPing binary=/usr/local/sbin/fping ***Slaves*** secrets=/usr/local/smokeping/etc/smokeping_secrets.dist +boomer display_name=boomer color=0000ff +slave2 display_name=another color=00ff00 ***Targets*** probe=FPing menu=Top title=NetworkLatencyGrapher remark=WelcometotheSmokePingwebsiteofxxxCompany.\ Hereyouwilllearnallaboutthelatencyofournetwork. +Test menu=Targets #parents=owner:/Test/Jameslocation:/ ++James menu=James title=James alerts=someloss slaves=boomerslave2 host=james.address ++MultiHost menu=Multihost title=JamesandJamesasseenfromBoomer host=/Test/James/Test/James~boomer ++Localhost menu=Localhost title=Localhost alerts=someloss #slaves=boomerslave2 host=10.104.96.155 +Other menu=网络及节点监控 title=监控统计 ++dianxin menu=电信网络监控 title=电信网络监控列表 host=/Other/dianxin/dianxin-bj/Other/dianxin/dianxin-sh/Other/dianxin/dianxin-gz/Other/dianxin/dianxin-sz/Other/dianxin/dianxin-tj/Other/dianxin/dianxin-sy/Other/dianxin/dianxin-xa/Other/dianxin/dianxin-jn/Other/dianxin/dianxin-cd/Other/dianxin/dianxin-hf/Other/dianxin/dianxin-wh/Other/dianxin/dianxin-zz/Other/dianxin/dianxin-cs/Other/dianxin/dianxin-nj/Other/dianxin/dianxin-hz/Other/dianxin/dianxin-xm/Other/dianxin/dianxin-nn/Other/dianxin/dianxin-ty/Other/dianxin/dianxin-cc/Other/dianxin/dianxin-lz/Other/dianxin/dianxin-nn/Other/dianxin/dianxin-xn/Other/dianxin/dianxin-hk/Other/dianxin/dianxin-fz/Other/dianxin/dianxin-gy/Other/dianxin/dianxin-km/Other/dianxin/dianxin-xj/Other/dianxin/dianxin-xz/Other/dianxin/dianxin-heb/Other/dianxin/dianxin-hhht +++dianxin-bj menu=北京电信 title=北京电信 alerts=someloss host=106.37.232.114 +++dianxin-sh menu=上海电信 title=上海电信 alerts=someloss host=202.96.209.133 +++dianxin-gz menu=广州电信 title=广州电信 alerts=someloss host=219.137.229.134 +++dianxin-sz menu=深圳电信 title=深圳电信 alerts=someloss host=202.96.154.15 +++dianxin-tj menu=天津电信 title=天津电信 alerts=someloss host=219.150.32.132 +++dianxin-sy menu=沈阳电信 title=沈阳电信 alerts=someloss host=219.148.204.66 +++dianxin-xa menu=西安电信 title=西安电信 alerts=someloss host=117.35.68.4 +++dianxin-jn menu=济南电信 title=济南电信 alerts=someloss host=219.146.0.253 +++dianxin-cd menu=成都电信 title=成都电信 alerts=someloss host=61.139.2.69 +++dianxin-hf menu=合肥电信 title=合肥电信 alerts=someloss host=220.178.75.134 +++dianxin-wh menu=武汉电信 title=武汉电信 alerts=someloss host=221.232.129.35 +++dianxin-zz menu=郑州电信 title=郑州电信 alerts=someloss host=123.52.19.15 +++dianxin-cs menu=长沙电信 title=长沙电信 alerts=someloss host=202.103.96.253 +++dianxin-nj menu=南京电信 title=南京电信 alerts=someloss host=218.2.135.1 +++dianxin-hz menu=杭州电信 title=杭州电信 alerts=someloss host=202.96.96.68 +++dianxin-xm menu=厦门电信 title=厦门电信 alerts=someloss host=202.101.103.54 +++dianxin-nn menu=南宁电信 title=南宁电信 alerts=someloss host=202.103.225.254 +++dianxin-ty menu=太原电信 title=太原电信 alerts=someloss host=59.49.77.1 +++dianxin-cc menu=长春电信 title=长春电信 alerts=someloss host=219.149.194.55 +++dianxin-lz menu=兰州电信 title=兰州电信 alerts=someloss host=202.100.64.68 +++dianxin-nc menu=南昌电信 title=南昌电信 alerts=someloss host=202.101.224.68 +++dianxin-xn menu=西宁电信 title=西宁电信 alerts=someloss host=202.100.138.68 +++dianxin-hk menu=海口电信 title=海口电信 alerts=someloss host=202.100.192.1 +++dianxin-fz menu=福州电信 title=福州电信 alerts=someloss host=218.85.157.99 +++dianxin-gy menu=贵阳电信 title=贵阳电信 alerts=someloss host=202.98.198.167 +++dianxin-km menu=昆明电信 title=昆明电信 alerts=someloss host=222.172.200.68 +++dianxin-xj menu=新疆电信 title=新疆电信 alerts=someloss host=61.128.114.133 +++dianxin-xz menu=西藏电信 title=西藏电信 alerts=someloss host=202.98.224.2 +++dianxin-heb menu=哈尔滨电信 title=哈尔滨电信 alerts=someloss host=219.150.32.132 +++dianxin-hhht menu=呼和浩特电信 title=呼和浩特电信 alerts=someloss host=121.56.12.12 ++liantong menu=联通网络监控 title=联通网络监控列表 host=/Other/liantong/liantong-bj/Other/liantong/liantong-sh/Other/liantong/liantong-gz/Other/liantong/liantong-sz/Other/liantong/liantong-tj/Other/liantong/liantong-sy/Other/liantong/liantong-xa/Other/liantong/liantong-jn/Other/liantong/liantong-qd/Other/liantong/liantong-cd/Other/liantong/liantong-ah/Other/liantong/liantong-wh/Other/liantong/liantong-zz/Other/liantong/liantong-cs/Other/liantong/liantong-nj/Other/liantong/liantong-hz/Other/liantong/liantong-xm/Other/liantong/liantong-nn/Other/liantong/liantong-nc/Other/liantong/liantong-ty/Other/liantong/liantong-xn/Other/liantong/liantong-gz/Other/liantong/liantong-fz/Other/liantong/liantong-lz/Other/liantong/liantong-km/Other/liantong/liantong-xj/Other/liantong/liantong-xz/Other/liantong/liantong-heb/Other/liantong/liantong-hhht +++liantong-bj menu=北京联通 title=北京联通 alerts=someloss host=202.106.196.253 +++liantong-sh menu=上海联通 title=上海联通 alerts=someloss host=210.22.70.253 +++liantong-gz menu=广州联通 title=广州联通 alerts=someloss host=221.4.66.66 +++liantong-sz menu=深圳联通 title=深圳联通 alerts=someloss host=210.21.196.6 +++liantong-tj menu=天津联通 title=天津联通 alerts=someloss host=202.99.96.1 +++liantong-sy menu=沈阳联通 title=沈阳联通 alerts=someloss host=202.96.75.1 +++liantong-xa menu=西安联通 title=西安联通 alerts=someloss host=221.11.1.67 +++liantong-jn menu=济南联通 title=济南联通 alerts=someloss host=202.102.152.3 +++liantong-qd menu=青岛联通 title=青岛联通 alerts=someloss host=202.102.128.68 +++liantong-cd menu=成都联通 title=成都联通 alerts=someloss host=119.6.6.6 +++liantong-ah menu=安徽联通 title=安徽联通 alerts=someloss host=218.104.78.2 +++liantong-wh menu=武汉联通 title=武汉联通 alerts=someloss host=218.104.111.122 +++liantong-zz menu=郑州联通 title=郑州联通 alerts=someloss host=218.29.122.70 +++liantong-cs menu=长沙联通 title=长沙联通 alerts=someloss host=58.20.127.238 +++liantong-nj menu=南京联通 title=南京联通 alerts=someloss host=221.6.4.66 +++liantong-hz menu=杭州联通 title=杭州联通 alerts=someloss host=221.12.31.58 +++liantong-xm menu=厦门联通 title=厦门联通 alerts=someloss host=218.104.128.106 +++liantong-nn menu=南宁联通 title=南宁联通 alerts=someloss host=221.7.136.68 +++liantong-nc menu=南昌联通 title=南昌联通 alerts=someloss host=220.248.192.10 +++liantong-ty menu=太原联通 title=太原联通 alerts=someloss host=202.99.192.66 +++liantong-xn menu=西宁联通 title=西宁联通 alerts=someloss host=221.207.12.130 +++liantong-gy menu=贵阳联通 title=贵阳联通 alerts=someloss host=221.13.30.242 +++liantong-fz menu=福州联通 title=福州联通 alerts=someloss host=58.22.96.6 +++liantong-lz menu=兰州联通 title=兰州联通 alerts=someloss host=221.7.34.1 +++liantong-km menu=昆明联通 title=昆明联通 alerts=someloss host=221.3.131.11 +++liantong-xj menu=新疆联通 title=新疆联通 alerts=someloss host=60.13.184.49 +++liantong-xz menu=西藏联通 title=西藏联通 alerts=someloss host=221.13.65.38 +++liantong-heb menu=哈尔滨联通 title=哈尔滨联通 alerts=someloss host=202.97.224.1 +++liantong-hhht menu=呼和浩特联通 title=呼和浩特联通 alerts=someloss host=202.99.224.67 ++yidong menu=移动网络监控 title=移动网络监控列表 host=/Other/yidong/yidong-bj/Other/yidong/yidong-sh/Other/yidong/yidong-gz/Other/yidong/yidong-sz/Other/yidong/yidong-tj/Other/yidong/yidong-sy/Other/yidong/yidong-xa/Other/yidong/yidong-jn/Other/yidong/yidong-qd/Other/yidong/yidong-cd/Other/yidong/yidong-hf/Other/yidong/yidong-wh/Other/yidong/yidong-zz/Other/yidong/yidong-cs/Other/yidong/yidong-nj/Other/yidong/yidong-nc/Other/yidong/yidong-gy/Other/yidong/yidong-fz/Other/yidong/yidong-lz/Other/yidong/yidong-km/Other/yidong/yidong-hz/Other/yidong/yidong-nn/Other/yidong/yidong-wlmq/Other/yidong/yidong-ls +++yidong-bj menu=北京移动 title=北京移动 alerts=someloss host=211.136.17.107 +++yidong-sh menu=上海移动 title=上海移动 alerts=someloss host=211.136.150.25 +++yidong-gz menu=广州移动 title=广州移动 alerts=someloss host=221.179.38.7 +++yidong-sz menu=深圳移动 title=深圳移动 alerts=someloss host=120.196.165.7 +++yidong-tj menu=天津移动 title=天津移动 alerts=someloss host=211.137.160.5 +++yidong-sy menu=沈阳移动 title=沈阳移动 alerts=someloss host=211.137.32.178 +++yidong-xa menu=西安移动 title=西安移动 alerts=someloss host=218.200.48.238 +++yidong-jn menu=济南移动 title=济南移动 alerts=someloss host=211.137.191.26 +++yidong-qd menu=青岛移动 title=青岛移动 alerts=someloss host=211.137.186.224 +++yidong-cd menu=成都移动 title=成都移动 alerts=someloss host=211.137.96.205 +++yidong-hf menu=合肥移动 title=合肥移动 alerts=someloss host=211.138.180.2 +++yidong-wh menu=武汉移动 title=武汉移动 alerts=someloss host=211.137.59.2 +++yidong-zz menu=郑州移动 title=郑州移动 alerts=someloss host=211.138.30.66 +++yidong-cs menu=长沙移动 title=长沙移动 alerts=someloss host=111.8.55.1 +++yidong-nj menu=南京移动 title=南京移动 alerts=someloss host=221.130.48.1 +++yidong-hz menu=杭州移动 title=杭州移动 alerts=someloss host=120.199.7.10 +++yidong-nn menu=南宁移动 title=南宁移动 alerts=someloss host=211.138.245.180 +++yidong-nc menu=南昌移动 title=南昌移动 alerts=someloss host=211.141.90.68 +++yidong-gy menu=贵阳移动 title=贵阳移动 alerts=someloss host=211.139.5.1 +++yidong-fz menu=福州移动 title=福州移动 alerts=someloss host=211.138.151.1 +++yidong-lz menu=兰州移动 title=兰州移动 alerts=someloss host=218.203.160.1 +++yidong-km menu=昆明移动 title=昆明移动 alerts=someloss host=211.139.29.1 +++yidong-wlmq menu=乌鲁木齐移动 title=乌鲁木齐移动 alerts=someloss host=218.202.152.131 +++yidong-ls menu=拉萨移动 title=拉萨移动 alerts=someloss host=211.139.73.35 9.分别启动smokeping和httpd。 /usr/local/smokeping/bin/smokeping ps-ef|grepsmoke hadoop2184819908011:20pts/100:00:00grepsmoke root17713110Sep27?00:00:38/usr/local/smokeping/bin/smokeping[FPing] /etc/init.d/httpdstart -ef|grephttpd hadoop2224519908011:21pts/100:00:00grephttpd root17715210Sep27?00:00:00/usr/sbin/httpd apache1771541771520Sep27?00:00:00/usr/sbin/httpd apache1771551771520Sep27?00:00:00/usr/sbin/httpd apache1771561771520Sep27?00:00:00/usr/sbin/httpd apache1771571771520Sep27?00:00:00/usr/sbin/httpd apache1771581771520Sep27?00:00:00/usr/sbin/httpd apache1771591771520Sep27?00:00:00/usr/sbin/httpd apache1771601771520Sep27?00:00:00/usr/sbin/httpd apache1771611771520Sep27?00:00:00/usr/sbin/httpd apache1773731771520Sep27?00:00:00/usr/sbin/httpd apache1773781771520Sep27?00:00:00/usr/sbin/httpd apache1797261771520Sep27?00:00:00/usr/sbin/httpd 10.让smokeping界面支持中文 安装字体 yum-yinstallwqy-zenhei-fonts.noarch 编辑smokeping的配置文件vim/usr/local/smokeping/etc/config 第50行添加 charset=utf-8#添加此行 编辑Graphs.pm这个文件vim/usr/local/smokeping/lib/Smokeping/Graphs.pm#第147行下边插入下边一行 '--fontTITLE:20:"WenQuanYiZenHeiMono"', 11.访问地址,看下是否可以出现smokeping页面。

优秀的个人博客,低调大师

Ubuntu Docker Registry 搭建私有仓库

服务器版本 Ubuntu 16.04 LTS。 安装命令: $ docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry Registry 服务默认会将镜像保存在/var/lib/registry目录下,上面命令设置保存目录在/opt/registry下,我们可以看下 Registry 容器状态: $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e2b1ffd9072e registry "/entrypoint.sh /e..." 2 hours ago Up About an hour 0.0.0.0:5000->5000/tcp stoic_davinci 接着,我们登录另外一台服务器,将本地的已有的镜像文件推送到私有仓库中,首先,我们需要将镜像的tag标记为要推送到私有仓库,示例: $ docker tag hwapp:v2 40.125.207.78:5000/hwapp:v3 然后,我们看下镜像文件列表: $ docker images docker images REPOSITORY TAG IMAGE ID CREATED SIZE 40.125.207.78:5000/hwapp v3 fe28b19b4410 24 hours ago 1.63GB hwapp v2 fe28b19b4410 24 hours ago 1.63GB hwapp v1 8a28e2e870d4 25 hours ago 1.63GB microsoft/aspnetcore latest 0f2330f1a843 26 hours ago 280MB microsoft/dotnet latest a7dd4972fc95 6 days ago 1.63GB 最后,我们就可以将40.125.207.78:5000/hwapp:v3镜像文件,推送到私有仓库了: $ docker push 40.125.207.78:5000/hwapp:v3 可能会出现下面的错误: $ docker push 40.125.207.78:5000/hwapp:v3 The push refers to a repository [40.125.207.78:5000/hwapp] Get https://40.125.207.78:5000/v1/_ping: http: server gave HTTP response to HTTPS client 解决方式,在本服务器操作,而不是私有仓库所在服务器(如果已有daemon.json文件,进行修改即可): $ touch /etc/docker/daemon.json $ echo '{ "insecure-registries": ["40.125.207.78:5000"] }' > /etc/docker/daemon.json $ service docker restart 然后,再执行下推送命令就可以了,我们也可以直接构建成要推送私有仓库的镜像,示例: $ docker build -t 40.125.207.78:5000/hwapp:v4 . 然后,再执行下推送命令: $ docker push 40.125.207.78:5000/hwapp:v4 推送成功之后,我们可以检查下私有仓库里的镜像文件: $ curl http://40.125.207.78:5000/v2/_catalog {"repositories":["hwapp"]} $ curl http://40.125.207.78:5000/v2/hwapp/tags/list {"name":"hwapp","tags":["v3","v4"]} 然后,我们就可以拉取私有仓库里的镜像文件了: $ docker pull 40.125.207.78:5000/hwapp:v4 本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/ubuntu-docker-registry.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

在docker 中搭建gitlab环境

docker run --name gitlab -it -p 10022:22 -p 10080:80 -p 4433:443 \ --env 'GITLAB_SECRETS_DB_KEY_BASE=Rpwq35wjLJ5N6CrkvdXsqTDHsh6XG3QkhdtRTkt87fvLwzvlmtdNWMCwNjDj5Xk9' \ --env 'DB_HOST=192.168.1.58' --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=root' --env 'DB_PASS=admin' \ --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \ --env 'REDIS_HOST=192.168.1.58' --env 'REDIS_PORT=6379' \ --volume /data/gitlab/gitlab:/home/git/data \ docker.io/sameersbn/gitlab docker run --name gitlab-mysql -d \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' --env 'DB_PASS=admin' \ --volume /data/gitlab/mysql:/var/lib/mysql \ docker.io/sameersbn/mysql docker run --name gitlab-redis -d \ --volume /data/gitlab/redis:/var/lib/redis \ docker.io/sameersbn/redis docker run --name gitlab -d \ --link gitlab-mysql:mysql --link gitlab-redis:redisio \ --publish 10022:22 --publish 10080:80 \ --env 'GITLAB_PORT=10080' --env 'GITLAB_HOST=192.168.1.58' --env 'GITLAB_SSH_PORT=10022' \ --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ docker.io/sameersbn/gitlab docker run --name gitlab-ci -d \ --link gitlab-mysql:mysql --link gitlab-ci-redis:redisio \ --publish 10081:80 \ --env 'GITLAB_CI_PORT=10081' --env 'GITLAB_CI_HOST=192.168.1.58' --env 'GITLAB_URL=http://192.168.1.58:10080' \ --env 'GITLAB_APP_ID=xxx' --env 'GITLAB_APP_SECRET=yyy' \ --volume /srv/docker/gitlab-ci/gitlab-ci:/home/git/gitlab_ci/data \ quay.io/sameersbn/gitlab-ci docker run --name gitlab-ci-runner -it --rm \ -v /opt/gitlab-ci-runner:/home/gitlab_ci_runner/data \ sameersbn/gitlab-ci-runner docker run --name gitlab-ci-multi-runner -d --restart=always \ --volume /opt/gitlab-ci-multi-runner:/home/gitlab_ci_multi_runner/data \ --env='CI_SERVER_URL=http://192.168.1.58:10080/ci' --env='RUNNER_TOKEN=31d563f789129ea1d35bd0b92a0665' \ --env='RUNNER_DESCRIPTION=myrunner' --env='RUNNER_EXECUTOR=shell' \ docker.io/sameersbn/gitlab-ci-multi-runner username: root password: 5iveL!fe docker run --name mysql -p 192.168.1.58:3306:3306 -d \ -e 'DB_REMOTE_ROOT_NAME=root' -e 'DB_REMOTE_ROOT_PASS=admin' \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' --env 'DB_PASS=admin' \ docker.io/sameersbn/mysql docker run --name gitlab -d -p 10022:22 -p 10080:80 -p 4433:443 \ --env 'GITLAB_SECRETS_DB_KEY_BASE=Rpwq35wjLJ5N6CrkvdXsqTDHsh6XG3QkhdtRTkt87fvLwzvlmtdNWMCwNjDj5Xk9' \ --env 'DB_HOST=192.168.1.58' --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=root' --env 'DB_PASS=admin' --env 'DB_PORT=3306' \ --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \ --env 'REDIS_HOST=192.168.1.58' --env 'REDIS_PORT=6379' \ --volume /data/gitlab/gitlab:/home/git/data \ docker.io/sameersbn/gitlab docker run --name gitlab -it -p 10022:22 -p 10080:80 -p 4433:443 \ --env 'GITLAB_SECRETS_DB_KEY_BASE=Rpwq35wjLJ5N6CrkvdXsqTDHsh6XG3QkhdtRTkt87fvLwzvlmtdNWMCwNjDj5Xk9' \ --env 'DB_HOST=192.168.1.58' --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=root' --env 'DB_PASS=admin' --evn 'DB_PORT=3306' \ --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \ --env 'REDIS_HOST=192.168.1.58' --env 'REDIS_PORT=6379' \ --volume /data/gitlab/gitlab:/home/git/data \ docker.io/sameersbn/gitlab /bin/bash GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'admin' WITH GRANT OPTION;

优秀的个人博客,低调大师

Hadoop 2.6.0集群搭建

yum install gcc yum install gcc-c++ yum install make yum install autoconfautomake libtool cmake yum install ncurses-devel yum install openssl-devel groupadd hadoop 添加一个组 useradd hadoop -g hadoop 添加用户 安装protoc(需用root用户) 1 tar -xvf protobuf-2.5.0.tar.bz2 2 cd protobuf-2.5.0 3 ./configure --prefix=/opt/protoc/ 4 make && make install 编译hadoop mvn clean package -Pdist,native -DskipTests -Dtar 编译完的hadoop在 /home/hadoop/ocdc/hadoop-2.6.0-src/hadoop-dist/target 路径下 配置hosts文件 10.1.245.244 master 10.1.245.243 slave1 命令行输入 hostname master 免密码登录: 执行命令生成密钥: ssh-keygen -t rsa -P "" 进入文件夹cd .ssh (进入文件夹后可以执行ls -a 查看文件) 将生成的公钥id_rsa.pub 内容追加到authorized_keys(执行命令:cat id_rsa.pub >> authorized_keys) ---------------------------(core-site.xml)------------------------------ <configuration> <!--指定hdfs的nameservice为ns1--> <property> <name>fs.defaultFS</name> <value>hdfs://master</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <!--指定hadoop数据存放目录--> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/ocdc/hadoop-2.6.0/tmp</value> <description>Abasefor other temporary directories.</description> </property> <property> <name>hadoop.proxyuser.spark.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.spark.groups</name> <value>*</value> </property> </configuration> <!--指定zookeeper地址--> <property> <name>ha.zookeeper.quorum</name> <value>h4:2181,h5:2181,h6:2181</value> </property> </configuration> -------------------------------(hdfs-site.xml )----------------------------------- <configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:9001</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/ocdc/hadoop-2.6.0/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/ocdc/hadoop-2.6.0/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.nameservices</name> <value>ns1</value> </property> <!-- ns1下面有两个NameNode,分别是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns1</name> <value>nn1,nn2</value> </property> </configuration> ----------------------------------------(yarn-site.xml)-------------------------- <configuration> <!-- Site specific YARN configuration properties --> <!--指定nodemanager启动时加载server的方式为shuffle server --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8035</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>16384</value> </property> </configuration> <!--指定resourcemanager地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>h3</value> </property> -----------------------------(mapred-site.xml)------------------------------- <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>16384</value> </property> </configuration>

优秀的个人博客,低调大师

网络编程基础知识

一、 cs架构和bs架构二、 互联网三、 osi七层 1.应用层 2.表示层 3.会话层 4.传输层 5.网络层 6.数据链路层 7.物理层 tcp/ip5层(5层名字记住:重点) -1.物理层 -网线,光纤 -2.数据链路层 -网卡 -3.网络层 -路由器 -4.传输层(运输层) -四层路由器 -5.应用层(会话层,表示层,应用层) -http协议,ftp协议,websocket协议... 3.1每一层的功能 1 物理层 -网线----》01010101电信号---》从网线中传输电信号 -8个比特位是一个字节 2 数据链路层 -数据帧:一组电信号是一个数据帧,有头和数据部分 -网卡---》mac地址---》全球唯一---》网卡出厂--》烧在了网卡上 -48位二进制---》看到的都是16进制表示 -广播: -局域网内通信,所有人都会接受到,通过mac地址确定给谁的数据报,如果不是自己的就不处理 -广播风暴 3 网络层 -跨局域网通信,需要经过网络层 -IP地址:0.0.0.0-255.255.255.255 -子网掩码: -192.168.1.1 255.255.255.0 -192.168.2.1 255.255.255.0 -ARP:ip和mac的对照表 4 传输层: -端口:0--65535,一个应用程序可以监听多个端口,但是一个端口只能属于一个应用程序 -TCP协议:可靠传输(可靠传输如何保证?三次握手,四次挥手) -UDP协议:不可靠传输 5 应用层 -htpp,ftp,websocket.... 3.2传输层常用接口 应用程序 FTP TFTP TELNET SMTP DNS HTTP SSH MYSQL 熟知端口 21,20 69 23 25 53 80 22 3306 传输层协议 TCP UDP TCP TCP UDP TCP TCP TCP DNS:把网址转换成ip地址 从浏览器发送出去的数据,都是http协议,默认是80端口 3.3传输层TCP的三次握手和四次挥手 1 tcp可靠传输:三次握手,四次挥手保证数据可靠 2 三次握手 -客户端向服务端发送链接请求 1 -服务端回复可以建立,并且带着跟客户端建立链接的数据报 2 -客户端收到后,链接建好了 3 3 这个过程后就可以可靠传输数据 4 断开链接(4四挥手) -客户端告诉服务端,要断开 1 -服务端收到,回复ok 2 -服务端可能还有数据在传递,暂时还没断开---等数据传完 -服务端告诉客户端,我要断了 3 -客户端收到,回复ok 4 四、Socket层 1 Socket抽象层,从osi七层抽象出来的,抽象了网络层和传输层,跟语言无关 2 专门给开发人员用的 五、基于Tcp的socket套接字(重点)服务端 #导入socket模块 import socket import time #第一个socket是模块名,第二个socket是类名 #类实例化得到对象,得到一个socket对象 #server=socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM) #不写默认就是他 server=socket.socket() #绑定地址跟端口 ,传一个元组,监听的地址,监听的端口 server.bind(('192.168.11.28',8008)) #监听 #半连接池是5,可以缓冲5个 server.listen(5) #等待用户连接(看源码,有两个返回结果) #sock是连接对象,以后这个服务端和客户端交互,使用这个对象交互 #addr是客户端地址(ip和端口) sock,addr=server.accept() #接收客户端发给我的消息 data=sock.recv(1024) #打印 print(data) #服务端给客户端发送消息(必须是byte格式) sock.send(b'helloworld') time.sleep(1) #关闭连接对象 sock.close() #关闭服务 server.close() 客户端 import socket #创建socket对象 client=socket.socket() #连接服务端 client.connect(('127.0.0.1',8008)) #给服务端发了一个sb client.send(b'sb') #收到了服务端给我的 data=client.recv(1024) print(data) #关闭 client.close()

优秀的个人博客,低调大师

最全 MongoDB 基础教程

MongoDB 创建数据库 - 格式:use DATABASE_NAME - use ruochen - db 创建数据库需要插入一条数据才会在列表中显示 - db.ruochen.insert({'name': '若尘'}) - show dbs 删除数据库 格式:db.dropDatabase() use ruochen db.dropDatabase() show dbs 创建集合 - 格式:db.createCollection(name, options) - name: 要创建的集合名称 - options: 可选参数,指定有关内存大小及索引的选项 字段 类型 描述 capped 布尔 (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。 autoIndexId 布尔 (可选)如为 true,自动在 _id 字段创建索引。默认为 false。 size 数值 (可选)为固定集合指定一个最大值,以千字节计(KB)。如果 capped 为 true,也需要指定该字段。 max 数值 (可选)指定固定集合中包含文档的最大数量。 在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段 实例 # 在test数据库中创建ruochen 集合 use test db.createCollection('ruochen') # 查看已有集合 show collections db.createCollection('test', {capped: true, autoIndexId: true, size: 1024000, max: 10000}) # autoIndexId 已弃用,默认_id添加索引 # 插入文档时,MongoDB会自动创建集合 db.ruochen.insert({'name': 'ruochen'}) 删除集合 格式:db.collection.drop() use ruochen db.createCollection('ruochen') # 创建集合 show tables db.ruochen.drop() show tables 插入文档 格式:db.COLLECTION_NAME.insert(document) 方法1 db.ruochen.insert({title: 'MongoDB 教程', description: 'shu ju ku', by: 'ruochen', tags: ['mongodb', 'database', 'NoSQL'] }) db.ruochen.find() 方法2 document=({title: 'mongodb', description: 'shu ju ku', by: 'ruochen', tags: ['mongodb', 'database', 'NoSQL'] }) db.ruochen.insert(document) db.ruochen.find() db.collection.insertOne() # 向指定集合中插入一条文档数据 db.collection.insertMany() # 向指定集合中插入多条文档数据 var document = db.ruochen.insertOne({"e": 3}) document var res = db.ruochen.insertMany([{'a': 1}, {'b': 2}]) res 一次插入多条数据 先创建数组 将数据放在数据中 一次insert到集合中 案例 var arr = []; for(var i = 1; i < 5; i++){ arr.push({num:i});} db.num.insert(arr); 更新文档 格式 db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <ducument> } ) query: update的查询条件,类似sql update查询内where后面的 update: update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的 upsert: 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入 multi: 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新 writeConcern: 可选,抛出异常的级别 案例 db.ruochen.insert({ title: 'mongodb', description: 'Nosql 数据库', by: 'ruochen', tags: ['mongodb', 'databases', 'NoSQL'] }) db.ruochen.update({'title': 'mongodb'}, {$set:{'title': 'MongoDB'}}) # 只会修改第一条发现的文档 db.ruochen.find().pretty() db.ruochen.update({'title': 'mongodb'}, {$set:{'title': 'MongoDB'}}, {multi:true}) # 修改多条相同的文档 save() 方法: 通过传入的文档来替换已有文档 格式 db.collection.save( <document>, { writeConcern: <document> } ) document: 文档数据 writeConcern: 可选,抛出异常的级别 案例 db.ruochen.save({ "_id" : ObjectId("5e631a14c17b253e9cef40cc"), "title" : "MongoDB", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "Runoob", "url" : "http://www.runoob.com", "tags" : [ "mongodb", ] }) db.ruochen.find().pretty() 删除文档 语法: db.collection.remove( <query>, <justOne> ) 2.6版本以后语法格式 db.collection.remove( <query> { justOne: <boolean>, writeConcern: <document> } ) 参数说明 query: (可选) 删除的文档的条件 justOne: (可选) 如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档 writeConcern: (可选) 抛出异常的级别 db.ruochen.remove({'title': 'mongodb'}) # 只删除第一条找到的记录 db.COLLECTION_NAME.remove(DELETION_CRITHRIA, 1) # 删除所有数据 db.ruochen.remove({}) db.ruochen.find() # remove() 方法 并不会真正释放空间 # 需要执行db.repairDatabase() 来回收磁盘空间 db.repairDatabase() db.runCommand({repairDatabase: 1}) remove方法已经过时 # 删除集合下所有文档 db.ruochen.deleteMany({}) # 删除 num 等于1 的全部文档 db.ruochen.deleteMany({num: '1'}) # 删除 num 等于1 的一个文档 db.ruochen.deleteOne({num: '1'}) 查询文档 语法: db.collection.find(query, projection) 参数说明 query: 可选,使用查询操作符指定查询条件 projection: 可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略) # 以易读的方式读取数据 db.ruochen.find().pretty() 操作 格式 范例 RDBMS中的类似语句 等于 {key:value} db.ruochen.find({'by':'ruochen'}).pretty() where by = 'ruochen' 小于 {key:{$lt: value}} db.ruochen.find({'likes': {$lt:3}}).pretty() where likes < 3 小于或等于 {key:{$lte: value}} db.ruochen.find({'likes': {$lte:2}}).pretty() where likes <= 2 大于 {key:{$gt: value}} db.ruochen.find({'likes': {$gt:100}}).pretty() where likes > 100 大于等于 {key:{$gte: value}} db.ruochen.find({'likes': {$gte:200}}).pretty() where likes >= 200 不等于 {key:{$ne: value}} db.ruochen.find({'likes': {$ne:200}}).pretty() where likes != 200 AND条件 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件 格式: db.ruochen.find({key1: value1, key2: value2}).pretty() 案例 db.ruochen.find({'by': 'ruochen', 'likes': 200}).pretty() 类似于 where by='ruochen' and likes=200 or条件 格式 db.ruochen.find( { $or:[ {key1: value1}, {key2: value2} ] } ).pretty() 案例 db.ruochen.find({$or:[{'likes': 2}, {'likes':200}]}).pretty() AND和OR联合 db.ruochen.find({'likes': {$gt:100}, $or: [{'likes': 2}, {'likes': 200}]}).pretty() 条件操作符 db.ruochen.insert({ title: 'python', description: 'i love python', by: 'ruochen', url: 'xxx', tags: ['python'], likes: 200 }) db.ruochen.insert({ title: 'php', description: 'php是世界上最好的语言', by: 'ruochen', url: 'xxx', tags: ['php'], likes: 150 }) db.ruochen.insert({ title: 'MondoDB', description: 'NoSQL数据库', by: 'ruochen', url: 'xxx', tags: ['mongodb'], likes: 100 }) # 获取 'ruochen' 集合中 'likes' 大于100的数据 db.ruochen.find({likes: {$gt: 100}}).pretty() # 类似于SQL语句 Select * from ruochen where likes > 100; 获取 'ruochen' 集合中 'likes' 大于等于100的数据 db.ruochen.find({likes: {$gte: 100}}).pretty() # 类似于SQL语句 Select * from ruochen where likes >= 100; # 获取 'ruochen' 集合中 'likes' 小于150的数据 db.ruochen.find({likes: {$lt: 150}}).pretty() # 类似于SQL语句 Select * from ruochen where likes < 150; # 获取 'ruochen' 集合中 'likes' 小于等于150的数据 db.ruochen.find({likes: {$lte: 150}}).pretty() # 类似于SQL语句 Select * from ruochen where likes <= 150; MongoDB 使用 (<) 和 (>) 查询 - $lt 和 $gt 获取"ruochen"集合中 "likes" 大于100,小于 200 的数据 db.ruochen.find({likes: {$lt: 200, $gt: 100}}).pretty() 类似SQL语句 Select * from ruochen where likes > 100 and likes < 200; 模糊查询 查询title中包含 'py' 的文档 db.ruochen.find({title:/py/}).pretty() 查询title字段以 'p' 开头的文档 db.ruochen.find({title:/^p/}).pretty() 查询title 字段以 'p' 结尾的文档 db.ruochen.find({title:/p$/}).pretty() MongoDB $type 操作符 $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果 类型 数字 备注 Double 1 String 2 Object 3 Array 4 Binary data 5 Undedined 6 已废弃 Object id 7 Boolean 8 Date 9 Null 10 Regular Experssion 11 JavaScript 13 Symbol 14 JavaScript(with scope) 15 32-bit integer 16 Timestamp 17 64-bit integer 18 Min key 255 Query with -1 Max key 127 获取 "ruochen" 集合中 title 为 String 的数据 db.ruochen.find({'title': {$type: 2}}).pretty() db.ruochen.find({'title': {$type: String}}).pretty() Limit与Skip方法 Limit() 方法 在MongoDB中读取指定数量的数据记录, 使用MongoDB的Limit方法 limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数 语法 db.COLLECTION_NAME.find().limit(NUMBER) 案例 db.ruochen.find().limit(2) Skip() 方法 skip()方法跳过指定数量的数据 skip方法接受一个数字参数作为跳过的记录条数 语法 db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER) 案例 db.ruochen.find().limit(1).skip(1) skip() 方法默认参数为0 MongoDB 排序 sort() 方法 sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列 语法 db.COLLECTION_NAME.find().sort({key: 1}) 案例 ruochen 集合中的数据按字段 likes 的降序排列 db.ruochen.find().sort({'likes': -1}).pretty() skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。 MongoDB 索引 creatIndex() 方法 MongoDB使用 createIndex() 方法来创建索引 语法 db.collection.createIndex(keys, options) Key 值为你要创建的索引字段, 1 为指定按升序创建索引, -1 为降序创建索引 案例 db.ruochen.createIndex({'title': 1}) db.ruochen.createIndex({'title': 1, 'description': -1}) # 设置多个字段创建索引 createIndex() 接收可选参数,可选参数列表如下 Parameter Type Description background Boolean 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false name string 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称 dropDups Boolean 3.0+版本已废弃。在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间 v index version 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本 weights document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重 default_language string 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 language_override string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language MongoDB聚合 MongoDB聚合(aggregate)主要用于处理数据(诸如统级平均值、求和等), 并返回计算后的数据结果。有点类似sql语句中的count(*) aggregate() 方法 语法 db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION) 实例 db.ruochen.aggregate([{$group: {_id: "$by", num_tutorial: {$sum: 1}}}]) 类似于mql语句 select by, count(*) from ruochen group by by 聚合表达式 表达式 描述 实例 $sum 计算总和 db.ruochen.aggregate([{$group: {_id: "$by", num_tutorial: {$sum: "$likes"}}}]) $avg 平均值 db.ruochen.aggregate([{$group: {_id: "$by", avg: {$avg: "$likes"}}}]) $min 获取集合中所有文档对应值的最小值 db.ruochen.aggregate([{$group: {_id: "$by", min: {$min: "$likes"}}}]) $max 获取集合中所有文档对应值的最大值 db.ruochen.aggregate([{$group: {_id: "$by", min: {$max: "$likes"}}}]) $push 在结果文档中插入值到一个数组中 db.ruochen.aggregate([{$group: {_id: "$by", url: {$push: "$url"}}}]) $addToSet 在结果文档中插入值到一个数组中,但不创建副本 db.ruochen.aggregate([{$group: {_id: "$by", url: {$addToSet: "$url"}}}]) $first 根据资源文档的排序获取第一个文档数据 db.ruochen.aggregate([{$group: {_id: "$by", url: {$first: "$url"}}}]) $last 根据资源文档的排序获取最后一个文档数据 db.ruochen.aggregate([{$group: {_id: "$by", url: {$last: "$url"}}}]) 管道 管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数 MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理 管道操作是可以重复的 表达式:处理文档并输出 表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档 常用操作 $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档 $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作 $limit:用来限制MongoDB聚合管道返回的文档数 $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档 $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值 $group:将集合中的文档分组,可用于统计结果 $sort:将输入文档排序后输出 $geoNear:输出接近某一地理位置的有序文档 举例 $project db.ruochen.aggregate( { $project: { title: 1, by: 1, }} ); 只剩_id, title 和 by 三个字段,默认_id 字段被包含 db.ruochen.aggregate( { $project: { _id: 0 title: 2, by: 1, }} ); 如此即可不包含_id, 非0可表示显示字段,负数也可以表示显示该字段 $match 获取分数大于70或小于等于90的记录,然后把符合条件的记录送到下一阶段$group 管道操作符进行处理 db.ruochen.aggregate([ {$match: {score: {$gt: 70, $lte: 90}}}, {$group: {_id: null, count: {$sum: 1}}} ]) 当 match 条件和 group 同时存在时,顺序会影响检索结果,必须先写 match 在前面 $skip 过滤前5个文档 db.ruochen.aggregate( {$skip: 5});

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册