首页 文章 精选 留言 我的

精选列表

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

Android基础:SQLites数据库事物处理的优越性

一直知道数据库的事物处理,但是自己始终在写数据库操作时,总是默认的回避了这件事,想想还是要自己做个测试来让自己警醒,记住数据库事物是非常必要地。 测试结果是:单单一千条数据,在对sqlite数据库进行操作时,使用事物和不适用事物前后相差78倍之多,不难想象大数据增加时如果没有事物处理的意识,对软件性能来说只能是灾难性的。 setContentView(R.layout.main); helper = new MyOpenDbHelper( this ); button = (Button) findViewById(R.id.bt); button.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { // 未使用同一个事物处理:57013ms // 使用同一个事物处理:730ms, 仅仅一千条数据,却前后相差78倍之多,可见事物的重要性 // 对表数据进行增加、删除、更新的时候最好时候事物处理, SQLiteDatabase writableDatabase = helper.getWritableDatabase(); time = System.currentTimeMillis(); writableDatabase.beginTransaction(); for ( int i= 0 ; i< 1000 ; i++) { String sql = "insert into myTab values (" + i + "," + i + "," + "'tom'" + ")" ; System.out.println(sql); writableDatabase.execSQL(sql); } writableDatabase.setTransactionSuccessful(); writableDatabase.endTransaction(); System.out.println(System.currentTimeMillis() - time); } }); 本文转自demoblog博客园博客,原文链接http://www.cnblogs.com/0616--ataozhijia/archive/2012/11/06/2757978.html如需转载请自行联系原作者 demoblog

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

企业级Nginx服务基础到架构优化详解--25条

1、隐藏nginx header版本号 2、更改源码隐藏软件名称 3、更改nginx默认用户及用户组 4、配置nginx worker进程个数 5、根据CPU核数进行nginx进程优化 6、nginx事件处理模型优化 7、调整Nginx worker单个进程允许的客户端最大连接数 8、配置Nginx worker进程最大打开文件数 9、开启高效的文件传输模式 10、设置连接超时时间 11、上传文件大小设置(动态应用) 12、fastcgi调优(配合PHP引擎动态服务) 13、配置nginx gzip压缩功能 14、配置Nginx expires缓存功能 15、Nginx日志相关优化与安全 16、Nginx站点目录及文件URL访问控制(防止恶意解析) 17、防止恶意解析访问企业网站 18、Nginx图片及目录防盗链 19、Nginx错误页面的优雅显示 20、Nginx防爬虫优化 21 、限制HTTP请求方法 22、防DOS攻击 23、使用CDN为网站内容加速 24、Nginx程序架构优化 25、使用普通用户启动Nginx(监牢模式) 1、隐藏nginx header版本号 查看版本号 1 2 3 4 5 6 7 8 [root@db02~] #curl-Ihttp://www.lichengbing.cn HTTP/1.1200OK Server:nginx/1.6.3 Date:Tue,16Aug201614:39:48GMT Content-Type:text/html;charset=UTF-8 Connection:keep-alive X-Powered-By:PHP/5.5.32 Link:<http: //www.lichengbing.cn/wp-json/>;rel="https://api.w.org/" 编译nginx.conf配置文件,添加server_tokens off参数 1 2 3 4 5 6 7 8 http{ ... server_tokensoff; #控制httpresponseheader内的服务版本信息的显示,以及错误信息中web服务版本信息 ... } [root@db02~] #curl-Ihttp://www.lichengbing.cn HTTP/1.1200OK Server:nginx #版本隐藏 2、更改源码隐藏软件名称 修改3个nginx源码文件 第一个nginx-1.6.3/src/core/nginx.h文件 1 2 3 4 5 6 7 [root@lichengbingnginx-1.6.3] [root@lichengbingnginx-1.6.3] #cd~/tools/nginx-1.6.3 [root@lichengbingnginx-1.6.3] #sed-n'13,17p'src/core/nginx.h #defineNGINX_VERSION"1.6.3"#改成你想要的版本号,如2.2.5 #defineNGINX_VER"Nginx/"NGINX_VERSION#你想改成的软件名称,如Apache #defineNGINX_VAR"NGINX"#可以改成OWS等 #defineNGX_OLDPID_EXT".oldbin" 第二个ngx_http_header_filter_module.c 1 [root@lichengbingnginx-1.6.3] #sed-i's#Server:nginx#Server:OWS#g'src/http/ngx_http_header_filter_module.c 第三个ngx_http_special_response.c是否对外展示敏感信息 1 2 3 4 5 6 7 8 9 [root@lichengbingnginx-1.6.3] #sed-n'21,30p'src/http/ngx_http_special_response.c staticu_charngx_http_error_full_tail[]= "<hr><center>" NGINX_VER "</center>" CRLF "</body>" CRLF "</html>" CRLF ; staticu_charngx_http_error_tail[]= "<hr><center>nginx</center>" CRLF "</body>" CRLF 修改为如下 1 2 3 4 5 6 7 8 9 [root@lichengbingnginx-1.6.3] #sed-n'21,30p'src/http/ngx_http_special_response.c staticu_charngx_http_error_full_tail[]= "<hr><center>" NGINX_VER "(http://www.lichengbing.cn)</center>" CRLF "</body>" CRLF "</html>" CRLF ; staticu_charngx_http_error_tail[]= "<hr><center>OWS</center>" CRLF "</body>" CRLF 重新编译安装nginx,重启服务 3、更改nginx默认用户及用户组 1 2 3 4 5 6 7 8 9 10 [root@lichengbing~] #grep'#user'/application/nginx/conf/nginx.conf.default #usernobody;#系统默认的用户为nobody [root@lichengbing~] #useraddwww-s/sbin/nologin-M#建立用户www userwwwwww; #nginx.conf中配置用户 也可以在编译时加入用户和用户组,如 --user=www--group=www-- with -http_ssl_module-- with -http_stub_status_module--prefix=/application/nginx-1.6.3/ [root@lichengbing~] #ps-ef|grepnginx|grep-vgrep root138610Jul21?00:00:00nginx:masterprocess/application/nginx/sbin/nginx www247321386023:19?00:00:00nginx:workerprocess #此时workerprocess进程就是使用的www用户权限,当然也可以使master降权运行 4、配置nginx worker进程个数 1 2 3 4 5 6 7 worker_processes8; #最好为服务器CPU的逻辑核心数 [root@netmonitor~] #grep"physicalid"/proc/cpuinfo|sort|uniq|wc-l#物理核数 2 [root@netmonitor~] #grep"cpucores"/proc/cpuinfo|uniq#单核心数 cpucores:4 [root@netmonitor~] #grep"processor"/proc/cpuinfo|wc-l#逻辑核心数 8 5、根据cpu核数进行nginx进程优化 亲和力参数(Nginx服务可能会发生只在同一颗CPU上起作用的情况) 1 2 3 worker_processes8; worker_cpu_affinity001001001001000; #数字代表1、2、3、4的掩码,平均分摊进程压力 worker_cpu_affinity0000000100000010... #8核心写法 防止进程只在一个核心上运行也可以使用 taskset 命令 1 taskset-c1,2,3/application/nginx/sbin/nginxstart 6、nginx事件处理模型优化 nginx的连接处理机制在不同的操作系统中会采用不同的I/O模型:Linux上使用epoll、BSD上面用kqueue、Solaris中使用/dev/poll、windows中使用icop. 1 2 3 events{ useepoll; #nginx官方建议,可以不指定事件处理模型,Nginx会自动选择最佳的事件处理模型 } 7、调整Nginx worker单个进程允许的客户端最大连接数 1 2 3 4 5 6 7 worker_processes8; events{ worker_connections1024; } #最大连接数Max_client=worker_processes*worker_connections #进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit-HSn65535”后,才能生效 #连接数并不是越大越好,要在系统性能能接受的范围内 8、配置Nginx worker进程最大打开文件数 1 2 3 events{ worker_rlimit_nofile65535; #该值可设置为系统优化后的ulimit-HSn的结果 } 9、开启高效的文件传输模式 1 2 3 4 http{ sendfileon; #开启文件的高效传输模式 } #同时将tcp_nopush和tcp_nodelay两个指令设置为on,减少网络传输包数量、防止网络及磁盘的I/O阻塞,提升Nginx效率 10、设置连接超时时间 1 2 3 4 5 6 7 8 http{ keepalive_timeout65; #设置客户端连接保持会话的超时时间 tcp_nodelayon; #激活tcp_nodelay,提高I/O性能,在包含keepalive参数时才有效 client_header_timeout15; #读取客户端请求头数据超时时间,超时则返回“Requesttimeout(408)” clietn_body_timeout15; #读取客户端请求主体超时时间 send_timeout15; #指定客户端响应时间 } #将无用的连接尽快设置为超时,可以保护服务器的系统资源(CPU、内存、磁盘) 11、上传文件大小设置(动态应用) 1 2 3 http{ client_max_body_size10m; #具体数字要根据业务需求决定 } 12、fastcgi调优(配合PHP引擎动态服务) fastcgi作为静态服务和动态服务之间的传接口,也有cache和buffer缓存和缓冲区 1 2 3 4 5 6 7 8 9 10 http{ fastcgi_connect_timeout240; #连接到后端fastcgi的超时时间 fastcgi_send_timeout240; #已经和fastcgi建立连接后多久不传送数据,就会被断开 fastcgi_read_timeout240; #接收fastcgi应答的超时时间 fastcgi_buffer_size64k; #指定读取fastcgi应答第一部分需要多大的缓冲区,可以设置为gastcgi_buffers选项指定的缓冲区大小 fastcgi_busy_buffers_size128k; #繁忙时的buffer,可以是fastcgi_buffer的两倍 fastcgi_temp_path/data/ngx_fcgi_tmp;在写入fastcgi_temp_path时将用多大的数据库,默认是fastcgi_buffer的两倍,如果太小,可能会报502BadGateWay fastcgi_cache_path/data/ngx_fcgi_cachelevels=2:2keys_zone=ngx_fcgi_cache:512minactive=1dmax_s ize=40g; #指定相关参数配比 } 在server标签中配合设置相关参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 server{ location~.*\.(php|php5)?${ roothtml/www; fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; includefastcgi.conf; fastcgi_cachengx_fcgi_cache; #表示开启缓存并为其指定一个名称,开启缓存非常有用,可以有效降低cpu的负载,并且防止502的发生,但是也可能会带来其他问题 fastcgi_cache_valid2003021h; #将对应的应答码缓存时间 fastcgi_cache_valid3011d; #将301缓存1天 fastcgi_cache_validany1m; #将其他应答缓存1分钟 fastcgi_cache_min_uses1; #请求数量 fastcgi_cache_use_staleerrortimeoutinvalid_headerhttp_500; #错误判断 } } 13、配置nginx gzip压缩功能 ###(重要!!!)几k字节的压缩比在大数据量的冲击下也可以节省不少的流量,网站内容传输速度更快,为用户带来更好的浏览体验 Nginx gzip压缩模块提供了压缩文件内容的功能,用户请求的内容在发送到用户客户端之前,Nginx服务器会根据一些具体的策略实施压缩,到客户端后由浏览器解压 Nginx 依赖ngx_http_gzip_module模块 Apache 使用mod_deflate压缩功能 1 2 3 4 5 6 7 8 9 http{ gzipon; #开启压缩功能 gzip_min_length1k; #允许压缩的最小页面字节数,从header头的Content-Length中获取,不管页面多大都进行压缩,建议设置成大于1K,如果小于1K可能会越压缩越大 gzip_http_version1.1; #压缩版本,默认为1.1,目前大部分浏览器都支持压缩 gzip_buffers432k; #压缩缓冲大小,允许申请4个单位为32K的内存作为流缓存 gzip_comp_level9; #压缩比例,1最小,9最大,传输速度最快,但是比较消耗资源 gzip_typestext/csstext/xmlapplication/javascript; #指定压缩的内容类型 gzip_varyon; #varyheader支持,让前端的缓存服务器继续缓存传输该压缩页面,而不提前解压 } 14、配置Nginx expires缓存功能 (重要!!!) 在网站的开发和运营过程中,视频、图片、CSS、JS等网站元素的更改机会较少,我们可以将这些更改频率较少的内容缓存在用户本地,用户在第二次访问网站时就不用继续去服务器下载了,节省流量,加快访问速度 1 2 3 4 5 6 7 8 9 10 server{ location~.*\.(gif|jpg|jpeg|png|bmp|swf)$ #指定缓存文件的类型 { expires3650d; #指定缓存时间 } location~.*\.(js|css)?$ { expires3d; } } expires缓存的缺点就是在网站更新相关数据后,用户如果不清理缓存看到的就会一直是过期的数据,为了解决这个问题,可以1、缩短缓存时间,比如百度的首页图片缓存时间为一天;2、服务后台更改图片名称,这样就相当于是一个新的页面内容,用户会重新下载 3、相关的CSS、JS推送到CDN 15、Nginx日志相关优化与安全 1)每天进行日志切割,备份 1 2 3 4 5 #!/bin/sh cd/application/nginx/logs/ mvwww_access.logwww.access_$(date+%F-d-1day).log mvblog_access.logblog.access_$(date+%F-d-1day).log /application/nginx/sbin/nginx-sreload 1 2 3 cat>>/ var /spool/cron/root<<EOF 0000***/bin/sh/server/scripts/cut_nginx_log.sh>/dev/ null 2>&1 EOF 2)不记录不需要的访问日志 对于健康检查或者某些图片、JS、CSS日志,一般不需要记录日志,因为在统计PV时是按照页面计算的,而且写入频繁会消耗IO,降低服务器性能 1 2 3 location~.*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)${ access_logoff; } 3)访问日志的权限设置 1 2 chown-Rroot.root/application/nginx/logs chmod-R700/application/logs 16、Nginx站点目录及文件URL访问控制(防止恶意解析) 1)根据扩展名限制程序或者文件被访问 资源文件夹如用户上传的头像,防止恶意上传脚本病毒文件被解析执行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 server{ location~^/images/.*\.(php|php5|sh|pl|py)${ #指定目录限制访问 denyall; } location~^/static/.*\.(php|php5|sh|pl|py)${ denyall; } location~^/data/.*\.(php|php5|sh|pl|py)${ denyall; } location~.*\.(php|php5)?${ #必须配置在解析之前 roothtml/www; fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; includefastcgi.conf; } } 2)禁止访问目录并返回指定HTTP代码 1 2 3 server{ location/admin/{ return 404;} } 3)限制网站来源IP 1 2 3 4 5 6 7 server{ location~^/admin/{ allow202.111.12.211; #allow192.168.1.0/24;#也可以限制IP段 denyall; } } 企业问题案列:Nginx做方向代理的时候可以限制客户端IP吗? 方法一:用if来控制 1 2 3 4 5 6 if ($remotea_addr=10.0.0.110){ return 403; } if ($remotea_addr=10.0.0.111){ set$allow_access_root 'true' ; } 方法二:利用deny和allow 1 2 3 4 5 6 location/{ roothtml/blog; indexindex.phpindex.htmlindex.html; deny10.0.0.7; allowall; } 17、防止恶意解析访问企业网站 方法一 1 2 3 4 5 server{ listen80default_server; server_name_; return 501; } 方法二 1 2 3 4 5 server{ listen80default_server; server_name_; rewrite^(.*)http: //www.lichengbing.cn$1permanent; } 方法三 1 2 3 4 server{ if ($host!~^www/.lichengbing/.com$){ rewrite^(.*)http: //www.lichengbing.cn$1permanent; } 18、Nginx图片及目录防盗链 网站图片被盗链最直接的影响就是网络带宽占用加大了,宽带费用变高了,网络流量忽高忽低,Zabbix频繁告警 由于购买了CDN加速,流量高了好几个G,瞬间损失好几万... 利用referer防盗链 1 2 3 4 5 6 7 location~.*\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)${ valid_referersnoneblocked*.lichengbing.cnlichengbing.cn; if ($invalid_referer){ rewrite^/http: //www.lichengbing.cn/img/nolink.jpg } } #或者也可以使用NginxHttpAccessKeyModule实现防盗链 19、Nginx错误页面的优雅显示 1 2 3 server{ error_page403/403.html; #当出现403错误时,会跳转到403.html页面 } 20、Nginx防爬虫优化 robots.txt机器人协议 网络爬虫排除标准,告诉搜索引擎哪些目录可以抓取,哪些禁止抓取 禁止下载协议代理 1 2 3 if ($http_user_agent~*LWP::Simple|BBBike|wget){ return 403; } 防止N多爬虫代理访问网站 1 2 3 4 if ($http_user_agent~* “qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Yahoo!SlurpChina|YoudaoBot|Sosospider|Sogouspider|Sogouwebspider|MSNBot”){ return 403; } 禁止不同浏览器访问 1 2 3 4 if ($http_user_agent~*“Firefox|MSIE”) { rewrite^(.*)http: //blog.etiantian.org/$1permanent } 21 、限制HTTP请求方法 1 2 3 if ($request_method!~^(GET|HEAD|POST)$){ return 501; } 只允许GET等,允许DELETE、SEARCH等 为防止黑客通过上传服务器执行木马,也可以在上传服务器上做限制HTTP的GET 1 2 3 if ($request_method~*^(GET)$){ return 501; } 22、防DOS攻击 使用limit_conn_zone进行控制,控制单个IP或域名的访问次数,限制连续访问 1 2 3 4 5 6 7 limit_conn_zone$binary_remote_addrzone=perip:10m; limit_conn_zone$server_remote_addrzone=perserver:10m; server{ limit_connperip10; limit_connperserver100; } #还可以使用limit_req_zone进行控制,控制单个IP的访问速率 23、使用CDN为网站内容加速 全国或全球的内容分布式缓存集群,其实质通过智能DNS判断用户的来源地域及上网线路,为用户选择一个最接近用户地域,以及和用户上网线路相同的服务器节点,提升用户浏览网站的体验 要加速的业务数据应该存在独立的域名,然后删除A记录解析,使用CNAME解析 24、Nginx程序架构优化 解耦,一堆程序代码按照业务用途分开,然后提供服务,例如:注册登录、上传、下载、浏览列表、商品内容、订单支付等都应该是独立的程序服务,只不过在客户端看来是一个整体而已,小公司最起码要做到的解耦是 01网页页面服务 02图片附件及下载服务 03上传图片服务 25、使用普通用户启动Nginx(监牢模式) 降权思想,Nginx的Master进程使用的是root用户,worker进程使用的是nginx指定的普通用户,用root跑nginx的Master进程有两大问题:1是最小化权限分配遇到问题;2、网站一旦有漏洞,很容易丢掉root权限 降权执行的好处: 1、创建普通用户inca,用inca跑Nginx服务,开发运维都使用普通帐号,只要和inca同组,照样可以管理nginx,还解决了root权限太大问题 2、职责分明,相关账号负责维护程序和日志,出问题负首要责 本文转自MQ_douer 51CTO博客,原文链接:http://blog.51cto.com/douer/1928330,如需转载请自行联系原作者

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

阿里云数据库推出SQL Server 2016 单机基础版本

即日起至2017年10月31日,购买1年以内任意时长的包年包月订单,第1个月0折,包年更有75折优惠,详情请看。 在推出SQL Server 2012后,阿里云推出2016版本,目前支持单机版。 在数据库管理领域中,有几大重要的核心问题需要去解决: 1. 数据库服务器资源管理:如何能够快速标准化部署数据库实例,数据库文件统一目录管理,规范化运维可减少大量错误发生。同时根据业务需要快速伸缩数据库硬件资源,是所有DBA追求的目标,因为业务发展一般无法容忍长时间等待资源升级、而系统程序优化少则数周多则大半年,远水解不了近渴。所以说,方便快捷的资源弹性管理是DBA管理的核心痛点。 2. 数据库安全管理:不用多说,安全上要做到事前防范、事中阻拦、事后追踪。 3. 数据可靠性保障:数据是核心资产,因

资源下载

更多资源
优质分享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文件系统,支持十年生命周期更新。

用户登录
用户注册