re: 一次性能调优的实战 zbl400 2008-09-05 11:09
我就在想:
系统集成商为什么不购买正版,并且 那个大型公司,存在2w以上员工的大公司居然也会同意不购买正版,难道真的是一点也不顾忌法律吗?每个使用者出几元钱,就能买到正版了吧。
还想问一下:
如果抓盗版的话,这个责任应该是在系统集成商上,还是在大型公司上呢?
re: 一次性能调优的实战 bf1977 2008-09-03 19:25
怎么能查看 部署的weblogic是运行在32位机器上,还是64位机器?
re: 一次性能调优的实战[未登录] ronghao 2008-09-02 12:16
@letitbe
yes.我要表达的意思是用户这样写代码造成了n+1的查询问题。解决问题的方法可以是外连接,也可以是冗余字段。但是在平台封装提供API的情况下,用户选择了最简单的直接调用API,这种方式是我反对的。由此我也在想平台的封装问题。所以对所有的业务操作我们都提供出直接的connection。
re: 一次性能调优的实战[未登录] letitbe 2008-09-02 11:58
一个最典型的例子是通过用户ID查找用户NAME,他们在业务表格里没有保存用户name,而是在查询的时候通过用户ID查找用户name填充到页面,几乎每一个查询都是n+1。
-----------------------------------
业务表里存用户的name,我觉得这是一种不好的设计:一是本身就冗余了;二是如果用户的name改变了,那么多的业务表也要跟着改,太麻烦;另外用户同名时容易让人产生误解,以为是同一个人。
这个问题可以用数据库分页+外连接解决啊
re: 一次性能调优的实战 leekiang 2008-09-01 22:36
一方面大家认为做业务系统没有技术含量,另一方面做的业务系统却奇烂无比,很多做出来的系统连企业的业务数据的完整性都保证不了,更不用提别的了。
很多做业务的公司基本是能骗就骗,因为要把业务系统做好是需要投入的,还不如招些便宜的新人,做些表面上好像能用的增删改查,把客户忽悠过去了事。
所以说做企业应用注定就是忽悠,但不排除有个别有钱的甲方自己养人开发这种情况。
re: 一次性能调优的实战 Robin's Java World 2008-09-01 20:42
@隔叶黄莺
为什么Hibernate不能使用被缓存的statement了?能解释一下吗?
re: 一次性能调优的实战 特斯通 2008-09-01 15:11
这个问题主要是没有用正版引起的。jar包引起的问题最好在创建DOMAIN时不使用weblogic自带的jdk的JAR。
re: 一次性能调优的实战 隔叶黄莺 2008-09-01 14:26
我也碰过这种性能问题,费尽周折才稳定下来
我们用的 WAS,连接池默认的被缓存的statement个数是10,但是用了 hibernate 的应用必须把这个值设置为0
其他就一些线程池,JVM 的参数调整,Tomcat 就简单,没多少要调优的,不过就是多用户并发的时候直接就会死掉。
re: OPENAJAX HUB介绍[未登录] ronghao 2008-09-01 09:24
呵呵,谢谢:)
re: OPENAJAX HUB介绍 cn-cuckoo 2008-09-01 08:38
祝贺你的书出版了。我在翻译《Advanced Ajax》附录时,把Hub的subscribe翻译成“预订”了。
re: 软件研发-我们缺失的一环[未登录] user 2008-08-21 14:45
这个本科往往是达不到的(不得不承认研究生和博士就是比本科要优秀)
不要说的太绝对,并不是所有的硕士、博士的实战水平都高过本科,甚至大专;
学历不等于能力,学历不容易变,能力会逐步提升的,学历并不代表一切,最重要的能力和不断的学习!
re: js组件的测试,是个问题[未登录] ronghao 2008-08-13 10:06
@pentiumao
谢谢。我去看看。
re: js组件的测试,是个问题 pentiumao 2008-08-11 23:34
re: js组件的测试,是个问题 ic 2008-08-11 22:18
..........
re: 工作流之收回 ronghao 2008-07-16 21:14
@cnodin
这个我还真不清楚,但是在业务里很常见.所以我们设计时进行了支持.
re: 工作流之收回[未登录] duma 2008-07-16 10:47
比如在电子商务网站中,销售员下了一个订单,且订单是已付款状态,A包装员可以对订单正进包装时,要防止B包装员对同一订单重复包装。
re: 工作流之收回 cnodin 2008-07-15 20:18
请教一下楼主,有哪些工作流产品支持回收呢?
我要是早找到你,不至于郁闷了两天,还好自己搞定了,哈哈
re: 开始开发CMS redsun 2008-07-08 18:15
请问下静态页的提交并显示提交信息你是怎么实现的?
re: 一本好书(Hibernate实战(第2版)) leekiang 2008-07-05 11:00
有大量的公司在用着hibernate做项目,看了这本书你都暗自流汗,有很多看都不看的,还说 hibernate 很简单,save一下,update一下,delete一下,再query一下,不就完了。那样做出来的项目到底能不能用?
re: 高并发测试下的一些问题及解决 leekiang 2008-07-03 22:55
汗,我们公司做了很多项目了,可你们说的这些问题公司几十号人没有一个人清楚,那些项目能用吗?请问。
re: 工作流回退模式分析 ronghao 2008-06-24 17:58
@Always BaNg.
是Viso
是功能需求也是项目经验的总结
re: 工作流回退模式分析 Always BaNg. 2008-06-24 10:13
Viso画的图?
不知道是需求还是理论还是经验?
re: 工作流回退模式分析 davymemory 2008-06-24 09:37
你好,我是IT猎头Camille,主要负责上海地区IT方面的职位。希望以后大家一起在职业路上共同进步。不介意的话请加我的MSN:davycamille@hotmail.com
re: 高并发测试下的一些问题及解决 ronghao 2008-06-22 15:24
@鬼狗
呵呵,你的意见非常中肯。
re: 高并发测试下的一些问题及解决 鬼狗 2008-06-21 19:50
另外不知道lz用的jdbc是什么版本? sqlserver 2000 的官方版本问题多多,印象中诸多特性都不支持。
re: 高并发测试下的一些问题及解决 鬼狗 2008-06-21 19:45
pk的这么热烈丫, 我想可能先要搞清楚的是行锁,页锁和表锁这些基本概念,搞清楚不同数据库的锁机制,然后再来谈乐观锁还是悲观锁会比较容易理解。
我估计楼主缺少在sybase,db2下的工作经验, 所以才会这么激动。不同数据库的设计本身是有相当大差异的,很难说好坏,我印象中,缺省情况下对锁的处理比较不伤脑筋的就是oracle了,其他的不管是sybase还是db2都不是缺省就可以很轻松做到高并发的,但是处理的好,至少db2 可以做到不输给oracle的高并发。 至于sql server ,tpc网站上去翻一下,可以发现sql server也是常客。
但是早期oracle的开发, 嗯, 我觉得在很多方面其实倒不如db2这样的数据库省事,比如大表和小表在sql中的位置,都会显著影响sql性能。再比如sql是简单好,还是复杂好,这2个数据库也是相反的。
这只能说明不同数据库的机制是有很大差异的,用好一个数据库需要点时间对他进行比较深入的理解。现代程序员往往被各种框架屏蔽了底层,有时候也不是什么好事,以前项目中就有专门组织DBA对程序员进行数据库方面的培训,目的也就是为了弥补这个问题。
对于锁的问题,在oracle9i&10g编程艺术那本书里,作者有很深入的介绍,也列举了其他数据库的处理情况。作者从其他数据库转向使用oracle的时候,对这个问题,貌似和楼主一样震惊,呵呵。当年我也有个项目,被db2的锁机制,搞的的死去活来,呵呵。
简单的说,摇身要是高可靠性数据库都只是知道写sql这么简单, 人家DBA还怎么活?
re: 高并发测试下的一些问题及解决 BeanSoft 2008-06-20 16:30
是呀 JDBC 先测试下比较好 排除法 如果 JDBC 也不行 那八九成是 SQL Server 问题 坊间的传言都认为 SQL Server 好多地方不如 Oracle
re: 高并发测试下的一些问题及解决[未登录] ronghao 2008-06-20 10:46
@Alex
好的,谢谢你的意见。我会用jdbc做这个测试。
re: 高并发测试下的一些问题及解决[未登录] ronghao 2008-06-20 10:45
@Alex
哈哈,正如你说的,我想问题在这里:
当然,如果你的数据库的lock配置策略,不支持,或者数据库本身,就不支持对不同的行做同时操作(或者支持不完善),所谓的行锁,那么肯定会像你所说的那样发生死锁。
这也是我想表达的。我想有时间应该请个专业的DBA来,我也查过了SQLSERVER的锁机制,但是具体到这里理解还是存在问题。
另外你对乐观锁的理解也很到位。如果是多个事务同时提交一个流程,乐观锁就会起作用。
@ronghao
如果每个线程只处理 某一个或一些独立 流程id相关的数据,而没有交叉数据,那么还会出现这种现象。
1.使用jdbc做这种测试,排除是否是hibernate的使用或者hibernate本身对2000支持的问题问题。(jdbc驱动也很关键。)
2.查阅sql2000 对行锁的支持程度。
上面我也说了,如果你直接使用hibernate的乐观锁,那么最细粒度的数据其实是由你自己来控制的,只要保持内存中的当前的数据在需要保存时和数据库中的保存相同的version 就可以了,然后不管 有多少个线程insert 或者 update ,只要每个线程都满足这个要求,就能保存成功了,当然,如果你的数据库的lock配置策略,不支持,或者数据库本身,就不支持对不同的行做同时操作(或者支持不完善),所谓的行锁,那么肯定会像你所说的那样发生死锁。
re: 高并发测试下的一些问题及解决[未登录] ronghao 2008-06-20 10:26
@Alex
补充说明一下,在我的测试中,不会出现两个线程互相修改冲突的情况,甚至select也不会冲突,因为流程实例ID一开始就将所有的数据区分开来。我是并发启动多个流程,然后并发提交这些流程。
同时操作不同的记录集合,一方面要看你数据库使用什么lock策略,一方面还要看你代码的控制.
re: 高并发测试下的一些问题及解决[未登录] ronghao 2008-06-20 10:21
@Alex
你的说法没有错。我想问题的原因在于死锁的原因你我的理解有差异。
你理解的是对数据库表同一记录并发操作引起数据库死锁,这个显然是应用程序应该控制和避免的。
而我的意思是并发操作某一动作,例如同时启动100个工作流流程,这个尽管操作的是同一张表但是显然是针对不同的记录,此时,乐观锁、悲观锁都是没有意义的。
当然,我对数据库的一些实现机制也并不是很了解,所以这里也只能列出现象而不能解释死锁的根本原因。
同时操作同的记录集合,一方面要看你数据库使用什么lock策略,一方面还要看你代码的控制。
使用hibernate乐观锁 如果导致你保存失败,简单点说,就是你的两个线程或者多个线程所控制的内存中的数据和数据库中数据集已经不一致了。
如果使用悲观锁,导致你保存失败,那么说明你事务配置的问题,或者至少说明你测试用例的事务配置有问题,要不你直接试试 jdbc 并且硬编码事务看看。
否则 sqlserver2000 真的不要玩了,两个线程都是死锁。。。
@ronghao
如果不是多线程,那么配置事务还有何用,如果所有操作都在同一个流水线上,那么配置事务不是浪费人民的感情嘛?
re: 高并发测试下的一些问题及解决[未登录] ronghao 2008-06-20 09:39
@BeanSoft
当然,我并没有用jdbc直接测试
re: 高并发测试下的一些问题及解决[未登录] ronghao 2008-06-20 09:34
@BeanSoft
我倒真的认为是数据库的原因。
一个简单的例子:很简单的po:
String id;
String name;
两个字段,执行操作:
TestPO po=new TestPO();
po.setName("ronghao");
dao.save(po);
dao.flush();
po.setName("haorong");
配置事务,单元测试两个线程并发,sqlserver2000下马上死锁。
re: 高并发测试下的一些问题及解决 BeanSoft 2008-06-20 09:29
说不定是滥用 Hibernate 导致的后果
re: 高并发测试下的一些问题及解决[未登录] ronghao 2008-06-20 09:28
@Alex
我想你并没有弄明白问题的关键。乐观锁和悲观锁的作用是防止多个事务对同一数据操作产生冲突的两种策略。而我的问题是多个线程(即多个事务)并发操作不同的数据。不知道明不明白意思。
ps:以前我也把这两者的概念经常混淆。
1、对同一张表先insert再update是很快会引起死锁的,不管操作的是否是同一记录
2、对两张表进行多次update操作时,两张表交替update也会很快引起死锁
3、部分大范围扫描的select和update混合也会导致死锁
如果连这些问题都解决不了,你觉得是数据库问题,还是你的问题呢?
别拿那么多名词出来吓人,这个招数我上小学的时候用来吓唬老师的,现在已经不用了。
就捡最后一个说吧,乐观锁,如果你控制不了,还是就不要用了,您还就是老老实实的本分点,使用数据库本地提供的锁功能吧,牺牲点数据库的性能,也总比你数据更新失败要好,如果你非要使用hibernate的乐观锁,请控制好,内存中的数据和数据库中的数据一致性。
re: 高并发测试下的一些问题及解决 flybean 2008-06-19 17:55
1、死锁,还是锁阻塞,这是个问题。
2、悲观并发、乐观并发生来以久,各有优缺点,搞清楚再来鄙视。