随笔 - 11  文章 - 0  评论 - 28  阅读 - 18039
 
摘要: if exists(select id from sysobjects where [name]='splitfun')begindrop function splitfunendgocreate function splitfun(@str varchar(1000),@split varchar(10)) returns @a table(col varchar(20))--只是一张虚表asb... 阅读全文
posted @ 2008-07-21 21:31 梦回西夏 阅读(317) 评论(0) 推荐(0) 编辑
  2017年6月14日

服务器性能、数据库性能、网络连接甚至编程语言都会影响并发数。但总结起来,高并发无非就是拆拆拆分分分

乐观锁

乐观锁是数据库优化的典范。即,通过对数据条目的“版本控制”,来约束数据,防止脏读写操作。在实际操作中并不独占资源。在设计思路上是通过引入“版本”概念来放弃资源约束。
举例:
数据库中设置CREATE TABLE tbl ( id varchar(32) , /** 乐观锁字段 **/ optimistic_lock numeric(12) )
java 中使用 spring @version 关键字,
@Version
@Column(name = "optimistic_lock", columnDefinition = "INTEGER")
private long optimisticLock;

读写分离

数据库中的读写分离知识数据库集群的一种典型。并不一定需要按读写分离数据库,也可以根据特定的业务逻辑来进行分开操作。
我们以读写分离举例:
通常设计两个数据库 master 和 slave 数据服务器,在 spring 中配置两个 datasource
<!-- 定义数据源,使用自己实现的数据源 -->
<bean id="dataSource" class="cn.itcast.usermanage.spring.DynamicDataSource">
<!-- 设置多个数据源 -->
<property name="targetDataSources">
<map key-type="java.lang.String">
<!-- 这个 key 需要和程序中的 key 一致 -->
<entry key="master" value-ref="masterDataSource"/>
<entry key="slave" value-ref="slave01DataSource"/>
</map>
</property>
<!-- 设置默认的数据源,这里默认走写库 -->
<property name="defaultTargetDataSource" ref="masterDataSource"/>
</bean>

并在 dao 层调用时进行读写分别调用。
为保证 master/slave 服务器的数据一致性,两个服务器间会有同步。

分离 resource 存储

我们以图片分离存储为例,在 web 场景中,页面加载的图片是非常消耗资源的,通常我们会放在其他的服务器上来进行存储,针对图片资源进行优化加速。这就像是 java 编程理念中的“解耦”。
同理,js 文件、css 文件、zip 文件等皆可通过这种方式进行分离,再配合 CDN 加速技术,实现访问速度和并发能力的提升。

CDN 加速

CDN 加速就是在靠近用户的物理位置上架设服务器,根据就近原则使用户访问物理上最近的服务器来节省网络传输时间。
通常这种 CDN 加速的服务器分散到全国设置世界各地,并适当采用的缓存、专线等技术。
为保证数据的一致性,服务器间进行同步。

动态转静态

我们把一次 HTTP 请求的时间分成几段:request--> calculate--> response,那么静态资源简化甚至省略了 calculate 步骤,实现请求-->响应的简单模型。
我们可以将“幂等”的请求进行静态化处理。我们举例来理解这件事:
比如用户想快速的查询自己近一个月的交易总额,按照传统模式我们需要服务器在用户查询后进行累加计算来统计用户这一个月的交易数据。那么我们可以在每天凌晨运行一次 spring batch 来统计所有用户的交易总额信息,并存储在用户对应的表里,当用户查询时,直接获取。

缓存

缓存可以理解为动态转静态的一个实例。也可以理解为将硬盘上的数据存入内存方便读取。通常设计为 key-value 形式。
以常用的 memcache 举例:
MemCachedClient mc = new MemCachedClient();
String key = "cacheKey1";
Object value = SomeClass.getObject();
mc.set(key, value);

服务器镜像

与 CDN 加速的设计类似,根据不同地域、网络服务商等网络条件假设多个服务器的“镜像”来实现网络传输环节的优化。
以此我们可以引出“负载均衡”。

负载均衡

负载均衡的设计理念是根据资源请求消耗情况来自动调节平衡。
比如我们在多个端口配置启动 tomcat:

<Connector port="11009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

<Connector port="12009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2"> <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

其他

  1. 分库、分表
  2. 合理的 Synchronized
  3. 基本的 SQL 优化,比如尽量避免全表扫描

个人理解的高并发就是,把传统的“单元操作”进行拆分,分的越细致越好。

本文出处:https://www.v2ex.com/t/364701

posted @ 2017-06-14 17:59 梦回西夏 阅读(247) 评论(0) 推荐(0) 编辑
  2017年2月8日
只有注册用户登录后才能阅读该文。 阅读全文
posted @ 2017-02-08 10:46 梦回西夏 阅读(153) 评论(0) 推荐(2) 编辑
  2013年8月13日
摘要: 由于近来项目的底层架构某些特殊需求及场景的需要要求动态build一个对象,属性名称个类与类型都是外界动态传入的。不多说废话,直接上我最原始的代码: 1 public static Type GetMyType() 2 { 3 string[] namelist = new string[] { "UserName", "UserID" }; 4 Dictionary dic = new Dictionary(); 5 dic.Add("UserName", typeof(string)); ... 阅读全文
posted @ 2013-08-13 10:17 梦回西夏 阅读(1488) 评论(2) 推荐(1) 编辑
  2013年7月9日
摘要: 第一范式:确保每列的原子性. 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式. 例如:顾客表(姓名、编号、地址、……)其中"地址"列还可以细分为国家、省、市、区等。 第二范式:在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关. 如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式. 例如:订单表(订单编号、产品编号、定购日期、价格、……),"订单编号"为主键,"产品编号"和主键列没有直接的关系,即"产品编号"列不依赖于主键列,应删 阅读全文
posted @ 2013-07-09 17:00 梦回西夏 阅读(5910) 评论(2) 推荐(1) 编辑
摘要: 闭包向来给包括JavaScript程序员在内的程序员以神秘,高深的感觉,事实上,闭包的概念在函数式编程语言中算不上是难以理解的知识。如果对作用域,函数为独立的对象这样的基本概念理解较好的话,理解闭包的概念并在实际的编程实践中应用则颇有水到渠成之感。在DOM的事件处理方面,大多数程序员甚至自己已经在使用闭包了而不自知,在这种情况下,对于浏览器中内嵌的JavaScript引擎的bug可能造成内存泄漏这一问题姑且不论,就是程序员自己调试也常常会一头雾水。用简单的语句来描述JavaScript中的闭包的概念:由于JavaScript中,函数是对象,对象是属性的集合,而属性的值又可以是对象,则在函数.. 阅读全文
posted @ 2013-07-09 16:26 梦回西夏 阅读(1551) 评论(2) 推荐(3) 编辑
摘要: 人性弱点:我们常常能原谅一贯犯错误的人,却不会原谅偶而犯一次错误的人;从来不会向你说好话的人,偶而一句好话会让你激动不已;惯于对你顺言顺耳说好话的人,偶而一句恶语会让你愤怒万分;请你吃一顿饭的人让你激动不已,长久感怀;一辈子管你饭的人,你却理所当然,视而不见。人就这么一辈子,开心也是一天不开心也是一天,所以你一定要给力开心。人就这么一辈子做错事不可以重来;碎了的心难再愈合,所以你一定不能事后后悔。人就这么一辈子过了今天就不会再有另一个今天;一分一秒都不会再回头,所以你一定要珍惜每分每秒。请记得一辈子要都微笑面对任何挫折!一个人,一颗心,一生等待。一个人,一座城,一生心疼。一个人,一条路,一生孤 阅读全文
posted @ 2013-07-09 09:17 梦回西夏 阅读(437) 评论(0) 推荐(1) 编辑
  2013年7月5日
摘要: 今天终于有点时间研究了一下javsscript ajax脚本跨域调用的问题,先在网上随便搜了一下找到一些解决的办法,但是都比较复杂。由是转到jquery.chm用户手册当中找到一些代码片段关于ajax跨域调用的问题。代码片段如下:crossDomain mapV1.5默认: 同域请求为false跨域请求为true如果你想强制跨域请求(如JSONP形式)同一域,设置crossDomain为true。这使得例如,服务器端重定向到另一个域。这里强调如是ajax的跨域调用,dataType一定要是jsonp的格式。(什么是jsonp这里不做解释,可以google一下。)令外还有一些代码片段:如下所示: 阅读全文
posted @ 2013-07-05 15:30 梦回西夏 阅读(2341) 评论(0) 推荐(1) 编辑
  2010年1月27日
摘要: SELECT 表名 = case when a.colorder=1 then d.name else '' end, 字段名 = a.name, 主键 = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in ( SELECT name FROM sysindexe... 阅读全文
posted @ 2010-01-27 16:24 梦回西夏 阅读(546) 评论(0) 推荐(0) 编辑
  2009年3月5日
摘要: try { …Response.Redirect("/mymaimai.aspx"); …} catch(Exception e){ // 异常处理} 使用以上语句,不管是否有异常,都会执行catch中的,一直显示""失败"",都会抛出System.Threading.ThreadAbortException,原因如下: Response.End方法停止页的执行,并将该执行... 阅读全文
posted @ 2009-03-05 09:57 梦回西夏 阅读(3944) 评论(22) 推荐(0) 编辑
  2008年7月21日
摘要: 有时在页面的刷新会触发window.onbeforeunload()事件,只要加一个判断就可以了。function window.onbeforeunload() { if (event.clientX>document.body.clientWidth && event.clientY<0||event.altKey){ window.event.returnV... 阅读全文
posted @ 2008-07-21 21:40 梦回西夏 阅读(1105) 评论(0) 推荐(0) 编辑
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示