- 浏览: 233435 次
- 性别:
- 来自: 我也来自火星?
文章分类
最新评论
-
chengUFO:
Test tes = c.newInstance();执行以上 ...
自定义ClassLoader -
lliiqiang:
资料太少了,伪造客户端和事先标准以外数据为攻击,其它的是bug ...
Openlaszlo调用JavaRPC和JAVA类通信 -
tianshaojie:
楼主,为什么我安装你的方法建立工程后,访问就出错,我用的是ta ...
Tapestry4入门 -
panshunchang:
发帖过程这么辛苦,还要回答一大堆问题,受不了了
[常用代码整理]JAVA反射 -
活靶子:
生成一个join的SQL语句
SELECT items.* F ...
Better looking URLs with friendly_id
最近的一个项目,四个开发人员,大概做了一个月多一点,从需求,到最终代码的完成。
写思考,我想,主要还是要回顾一下在项目中遇到的问题,或是有什么比较好的经验,新的体会值得记录下来,以供以后参考。在这里,主要是要思考两个方面的问题,数据库和测试。
1. 数据库
对于数据库,在j道上面有这样一篇文章《数据库已死》,其主要思想,个人感觉,主要还是对象与关系的问题,我们现在的主流已经是面向对象,但现在,可能很多公司仍以数据库建模作为其一条主线,首先进行数据建模,erwin,powerdesigner,然后创建相应的表,下面,就使用myeclipse,hibernate tools等生成相应的实体类,以及相应的映射文件。包括以前的几个项目,者是在开始花了大量的时间进行数据库的设计,中途加入的项目,也会在进入项目组的开始阶段让你熟悉其数据库的表结构,当面对大量的表的时候,看着E-R图上面的“蜘蛛网”的时候,可能,就已经晕了。
实际上,在面向对象的时代,数据库只是状态持久化的一种手段,数据库的表结构完全可以通过Hibernate等ORM工具自动生成。
在这个小项目中,前期,并没有花大多的时候在数据库的设计上,在初期建模了一些核心对象,创建相应的实体类,加上相应的注解,借助于hibernate的hbm2ddl,完全可以由hibernate自动生成相应的表结构。当增加新的对象的时候,也只需要定义其类结构。
并且,可以提供不同的sessionfactory,分别针对测试等环境,也可以做到一定程度的database migration。
2. 测试
TDD,BDD,持续集成~~~~等等,不知道有多少公司实施了,并且实施的情况如何。在以前的项目中,最怕的,就是测试数据依赖于其它的模块,当跑一次测试,还需要去跑一下由其它小组开发的模块,当对该模块的业务不太了解的时候,测试起来,还是比较麻烦的,还有可能需要麻烦其它小组的人员来为我们提供相应的测试数据。
这种情况,其中一个原因,测试代码太少。所以在这个项目中,针对一些核心的,或是较复杂的业务逻辑,都提供了相应的测试代码(当然,这里有一个粒度的问题),虽然在开发过程中,需要抽出一部分时间来编写相应的测试代码,但在实际过程中,效果还是比较明显的。
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
你所说的不正好证明了数据库是缺乏弹性的,数据库是有极限的,把负载全部丢在数据库端,全部依赖数据库性能解决业务复杂度就是你遇到的问题,也是现在普遍的,如果负载继续增加呢?单机数据库会撑不住的,弹性就是在增加集群服务器的时候性能随之明显提升,当然数据库集群也是可以的,但是相比app集群的代价呢?
拜托大家都真正去理解一下"数据库已死"的真实含义之后再来说吧,数据库是一定要也一定会使用的,但是把设计重心移到业务上,利用集群,缓存减轻数据库负载才是他说的意思.
胡扯。
假如一秒钟里有1万次insert,1万次select,而且这些数据调用都是必须的,看不出你的app集群有什么用处,而且只会更慢,因为数据库不单单要处理这么多次SQL,而且还要parser这么多次SQL.
减少数据库调用的有效方法之一,客户端可以用缓存,服务器端可以用临时表,游标,缓存等等方法。app集群根本不能减轻数据库调用的压力,2万条SQL调用分配到10个app集群上,数据库端收到的还是2万条SQL.
应该没有人会认为app集群会使得数据库总操作减少.我的意思可能没有表达明白,我是说,当你把负载集中到服务器,操作缓存,尽可能的减少数据库操作次数的前提下,使用app集群可以显著提高性能.同时你既然说集群没用,那么也等于说,系统性能的瓶颈在数据库端了.而我们要解决的就是让数据库解放出来,不要单单的承受那么大的压力,因为它的弹性比app来的小.
作为讨论前提,我们先假设采用APP和采用SP的SQL语句长度接近,那么采用APP和采用SP有什么区别呢?
a. 采用APP,SQL语句被发送至服务器端,服务器端Parser该SQL语言编译SQL,执行后(可被缓存)之后返回值。
b. 采用SP, SQL语句直接执行后返回值。
由于每秒被发送至服务器的SQL语句相同,根据<Oracle高级编程>一书,a 要比 b 慢上20倍,对于相同的SQL的总量,a 要比 b慢上许多,对数据库的CPU更是折磨。
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
你所说的不正好证明了数据库是缺乏弹性的,数据库是有极限的,把负载全部丢在数据库端,全部依赖数据库性能解决业务复杂度就是你遇到的问题,也是现在普遍的,如果负载继续增加呢?单机数据库会撑不住的,弹性就是在增加集群服务器的时候性能随之明显提升,当然数据库集群也是可以的,但是相比app集群的代价呢?
拜托大家都真正去理解一下"数据库已死"的真实含义之后再来说吧,数据库是一定要也一定会使用的,但是把设计重心移到业务上,利用集群,缓存减轻数据库负载才是他说的意思.
胡扯。
假如一秒钟里有1万次insert,1万次select,而且这些数据调用都是必须的,看不出你的app集群有什么用处,而且只会更慢,因为数据库不单单要处理这么多次SQL,而且还要parser这么多次SQL.
减少数据库调用的有效方法之一,客户端可以用缓存,服务器端可以用临时表,游标,缓存等等方法。app集群根本不能减轻数据库调用的压力,2万条SQL调用分配到10个app集群上,数据库端收到的还是2万条SQL.
将2万次操作,分散到10台app,是否会令db减轻压力,这个,是否有相应经验的人谈一谈。
另外,采用app集群等方式,通过缓存等手段,或分散SQL的操作,或者根本就是在缓存中来取数据,来减轻对db的操作。
ORM, object最终还是要map到relational database,我不知道你两万条sql怎么减到几条获取数据的SQL
对于很多OLTP类型的系统,hibernate, EJB-QL之类的根本是无法胜任的。这种情况下从性能方面考虑,只能以数据库为中心。
OLAP?
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
你所说的不正好证明了数据库是缺乏弹性的,数据库是有极限的,把负载全部丢在数据库端,全部依赖数据库性能解决业务复杂度就是你遇到的问题,也是现在普遍的,如果负载继续增加呢?单机数据库会撑不住的,弹性就是在增加集群服务器的时候性能随之明显提升,当然数据库集群也是可以的,但是相比app集群的代价呢?
拜托大家都真正去理解一下"数据库已死"的真实含义之后再来说吧,数据库是一定要也一定会使用的,但是把设计重心移到业务上,利用集群,缓存减轻数据库负载才是他说的意思.
胡扯。
假如一秒钟里有1万次insert,1万次select,而且这些数据调用都是必须的,看不出你的app集群有什么用处,而且只会更慢,因为数据库不单单要处理这么多次SQL,而且还要parser这么多次SQL.
减少数据库调用的有效方法之一,客户端可以用缓存,服务器端可以用临时表,游标,缓存等等方法。app集群根本不能减轻数据库调用的压力,2万条SQL调用分配到10个app集群上,数据库端收到的还是2万条SQL.
应该没有人会认为app集群会使得数据库总操作减少.我的意思可能没有表达明白,我是说,当你把负载集中到服务器,操作缓存,尽可能的减少数据库操作次数的前提下,使用app集群可以显著提高性能.同时你既然说集群没用,那么也等于说,系统性能的瓶颈在数据库端了.而我们要解决的就是让数据库解放出来,不要单单的承受那么大的压力,因为它的弹性比app来的小.
ORM, object最终还是要map到relational database,我不知道你两万条sql怎么减到几条获取数据的SQL
对于很多OLTP类型的系统,hibernate, EJB-QL之类的根本是无法胜任的。这种情况下从性能方面考虑,只能以数据库为中心。
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
你所说的不正好证明了数据库是缺乏弹性的,数据库是有极限的,把负载全部丢在数据库端,全部依赖数据库性能解决业务复杂度就是你遇到的问题,也是现在普遍的,如果负载继续增加呢?单机数据库会撑不住的,弹性就是在增加集群服务器的时候性能随之明显提升,当然数据库集群也是可以的,但是相比app集群的代价呢?
拜托大家都真正去理解一下"数据库已死"的真实含义之后再来说吧,数据库是一定要也一定会使用的,但是把设计重心移到业务上,利用集群,缓存减轻数据库负载才是他说的意思.
胡扯。
假如一秒钟里有1万次insert,1万次select,而且这些数据调用都是必须的,看不出你的app集群有什么用处,而且只会更慢,因为数据库不单单要处理这么多次SQL,而且还要parser这么多次SQL.
减少数据库调用的有效方法之一,客户端可以用缓存,服务器端可以用临时表,游标,缓存等等方法。app集群根本不能减轻数据库调用的压力,2万条SQL调用分配到10个app集群上,数据库端收到的还是2万条SQL.
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。
正是因为太过依赖于数据库,而造成了相应的瓶颈问题。
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
你所说的不正好证明了数据库是缺乏弹性的,数据库是有极限的,把负载全部丢在数据库端,全部依赖数据库性能解决业务复杂度就是你遇到的问题,也是现在普遍的,如果负载继续增加呢?单机数据库会撑不住的,弹性就是在增加集群服务器的时候性能随之明显提升,当然数据库集群也是可以的,但是相比app集群的代价呢?
拜托大家都真正去理解一下"数据库已死"的真实含义之后再来说吧,数据库是一定要也一定会使用的,但是把设计重心移到业务上,利用集群,缓存减轻数据库负载才是他说的意思.
同意,我也实际遇见过一个真实的案例,负责开发的coder在程序中对数据库一个blob的字段读取操作不当,将当时维护的一台AIX小型机直接down掉...
层次性的数据库早期出现过,现在也有,从查找的角度来说,更接近与人的思维方式,但是现在不是主流。关系型数据库,有一整套理论,计算机从本身上说智能化程度不高(人工智能我们还没有特别牛的理论上的突破),你要想把处理速度提上去,你需要按照他的工作方式来设计。
现实社会的复杂的,人的行为也是复杂,这样就导致了有些行为很难翻译成计算机的语言来做,这也是为什么硬件发展快,软件发展慢的原因。
设想你设计一个程序,很OO,可移植性强,一普通机器上可以支持10个并发用户;另外一个不太OO的程序,一普通机器上可以支持1000个并发用户。对小项目来说,会选择前者,对大的项目和平台来说选择后者。
还在冯诺依曼的体系结构下,绝对的OO很难,如果本身底层就是一个OO的东西,上层不得不OO,但是现实情况不是。
OO只是理解世界的一种方法,不是外能的,像哲学上的唯心和唯物,说不清楚谁对谁错。就事论事,选择好的解决方案解决问题才是王道。
那里有什么万能的设计方法学,没看到,可能我理解能力有限吧。
恩,确实如此.. 因为数据库中已经存在了诸多的解决方案,而数据库却又是最接近底层东西,所以,能在数据库完成的尽量在数据库完成这是性能优化的一方面. 当然,如果考虑系统的移植性,就需要考虑避免使用它来完成过多的东西了..
性能和可移植性永远是个三角,看你的重心在什么地方. 如果你重心在产品的移植性,那就会必然会牺牲部分性能. 如果重在性能势必会影响一些产品的可移植性.
最后一段话说得相当辩证,当浮一大白
P, 两个点, 怎么成三角, 跷跷板还差不多
恩,确实如此.. 因为数据库中已经存在了诸多的解决方案,而数据库却又是最接近底层东西,所以,能在数据库完成的尽量在数据库完成这是性能优化的一方面. 当然,如果考虑系统的移植性,就需要考虑避免使用它来完成过多的东西了..
性能和可移植性永远是个三角,看你的重心在什么地方. 如果你重心在产品的移植性,那就会必然会牺牲部分性能. 如果重在性能势必会影响一些产品的可移植性.
最后一段话说得相当辩证,当浮一大白
呵呵 Tom <Oralce 高级编程> ,其观点就是,花在数据库上的每一分钱都应该得到回报,有一项功能不用,就是浪费。
恩,确实如此.. 因为数据库中已经存在了诸多的解决方案,而数据库却又是最接近底层东西,所以,能在数据库完成的尽量在数据库完成这是性能优化的一方面. 当然,如果考虑系统的移植性,就需要考虑避免使用它来完成过多的东西了..
性能和可移植性永远是个三角,看你的重心在什么地方. 如果你重心在产品的移植性,那就会必然会牺牲部分性能. 如果重在性能势必会影响一些产品的可移植性.
虽然我很少使用Hibernate,不过,如果我用Hibernate的话,我会用Hibernate自己创建。
写思考,我想,主要还是要回顾一下在项目中遇到的问题,或是有什么比较好的经验,新的体会值得记录下来,以供以后参考。在这里,主要是要思考两个方面的问题,数据库和测试。
1. 数据库
对于数据库,在j道上面有这样一篇文章《数据库已死》,其主要思想,个人感觉,主要还是对象与关系的问题,我们现在的主流已经是面向对象,但现在,可能很多公司仍以数据库建模作为其一条主线,首先进行数据建模,erwin,powerdesigner,然后创建相应的表,下面,就使用myeclipse,hibernate tools等生成相应的实体类,以及相应的映射文件。包括以前的几个项目,者是在开始花了大量的时间进行数据库的设计,中途加入的项目,也会在进入项目组的开始阶段让你熟悉其数据库的表结构,当面对大量的表的时候,看着E-R图上面的“蜘蛛网”的时候,可能,就已经晕了。
实际上,在面向对象的时代,数据库只是状态持久化的一种手段,数据库的表结构完全可以通过Hibernate等ORM工具自动生成。
在这个小项目中,前期,并没有花大多的时候在数据库的设计上,在初期建模了一些核心对象,创建相应的实体类,加上相应的注解,借助于hibernate的hbm2ddl,完全可以由hibernate自动生成相应的表结构。当增加新的对象的时候,也只需要定义其类结构。
并且,可以提供不同的sessionfactory,分别针对测试等环境,也可以做到一定程度的database migration。
2. 测试
TDD,BDD,持续集成~~~~等等,不知道有多少公司实施了,并且实施的情况如何。在以前的项目中,最怕的,就是测试数据依赖于其它的模块,当跑一次测试,还需要去跑一下由其它小组开发的模块,当对该模块的业务不太了解的时候,测试起来,还是比较麻烦的,还有可能需要麻烦其它小组的人员来为我们提供相应的测试数据。
这种情况,其中一个原因,测试代码太少。所以在这个项目中,针对一些核心的,或是较复杂的业务逻辑,都提供了相应的测试代码(当然,这里有一个粒度的问题),虽然在开发过程中,需要抽出一部分时间来编写相应的测试代码,但在实际过程中,效果还是比较明显的。
评论
116 楼
TheMarine
2009-08-25
但是我们使用缓存,为什么非得在1秒内执行完呢?
115 楼
ray_linn
2009-08-25
TheMarine 写道
ray_linn 写道
TheMarine 写道
metadmin 写道
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
你所说的不正好证明了数据库是缺乏弹性的,数据库是有极限的,把负载全部丢在数据库端,全部依赖数据库性能解决业务复杂度就是你遇到的问题,也是现在普遍的,如果负载继续增加呢?单机数据库会撑不住的,弹性就是在增加集群服务器的时候性能随之明显提升,当然数据库集群也是可以的,但是相比app集群的代价呢?
拜托大家都真正去理解一下"数据库已死"的真实含义之后再来说吧,数据库是一定要也一定会使用的,但是把设计重心移到业务上,利用集群,缓存减轻数据库负载才是他说的意思.
胡扯。
假如一秒钟里有1万次insert,1万次select,而且这些数据调用都是必须的,看不出你的app集群有什么用处,而且只会更慢,因为数据库不单单要处理这么多次SQL,而且还要parser这么多次SQL.
减少数据库调用的有效方法之一,客户端可以用缓存,服务器端可以用临时表,游标,缓存等等方法。app集群根本不能减轻数据库调用的压力,2万条SQL调用分配到10个app集群上,数据库端收到的还是2万条SQL.
应该没有人会认为app集群会使得数据库总操作减少.我的意思可能没有表达明白,我是说,当你把负载集中到服务器,操作缓存,尽可能的减少数据库操作次数的前提下,使用app集群可以显著提高性能.同时你既然说集群没用,那么也等于说,系统性能的瓶颈在数据库端了.而我们要解决的就是让数据库解放出来,不要单单的承受那么大的压力,因为它的弹性比app来的小.
作为讨论前提,我们先假设采用APP和采用SP的SQL语句长度接近,那么采用APP和采用SP有什么区别呢?
a. 采用APP,SQL语句被发送至服务器端,服务器端Parser该SQL语言编译SQL,执行后(可被缓存)之后返回值。
b. 采用SP, SQL语句直接执行后返回值。
由于每秒被发送至服务器的SQL语句相同,根据<Oracle高级编程>一书,a 要比 b 慢上20倍,对于相同的SQL的总量,a 要比 b慢上许多,对数据库的CPU更是折磨。
114 楼
rainlife
2009-08-25
ray_linn 写道
TheMarine 写道
metadmin 写道
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
你所说的不正好证明了数据库是缺乏弹性的,数据库是有极限的,把负载全部丢在数据库端,全部依赖数据库性能解决业务复杂度就是你遇到的问题,也是现在普遍的,如果负载继续增加呢?单机数据库会撑不住的,弹性就是在增加集群服务器的时候性能随之明显提升,当然数据库集群也是可以的,但是相比app集群的代价呢?
拜托大家都真正去理解一下"数据库已死"的真实含义之后再来说吧,数据库是一定要也一定会使用的,但是把设计重心移到业务上,利用集群,缓存减轻数据库负载才是他说的意思.
胡扯。
假如一秒钟里有1万次insert,1万次select,而且这些数据调用都是必须的,看不出你的app集群有什么用处,而且只会更慢,因为数据库不单单要处理这么多次SQL,而且还要parser这么多次SQL.
减少数据库调用的有效方法之一,客户端可以用缓存,服务器端可以用临时表,游标,缓存等等方法。app集群根本不能减轻数据库调用的压力,2万条SQL调用分配到10个app集群上,数据库端收到的还是2万条SQL.
将2万次操作,分散到10台app,是否会令db减轻压力,这个,是否有相应经验的人谈一谈。
另外,采用app集群等方式,通过缓存等手段,或分散SQL的操作,或者根本就是在缓存中来取数据,来减轻对db的操作。
113 楼
daquan198163
2009-08-25
logicgate 写道
tianhaoleng 写道
楼上的说法正好证明了:以数据库为中心的编程方式,最终是极难扩展的。
倘若我把逻辑采用java对象表达,自然就减少的对数据库的依赖。
原本要执行2万条SQL,可能现在只需要执行几条获取数据的SQL就能够完成原先的业务。
倘若我把逻辑采用java对象表达,自然就减少的对数据库的依赖。
原本要执行2万条SQL,可能现在只需要执行几条获取数据的SQL就能够完成原先的业务。
ORM, object最终还是要map到relational database,我不知道你两万条sql怎么减到几条获取数据的SQL
对于很多OLTP类型的系统,hibernate, EJB-QL之类的根本是无法胜任的。这种情况下从性能方面考虑,只能以数据库为中心。
OLAP?
112 楼
TheMarine
2009-08-25
ray_linn 写道
TheMarine 写道
metadmin 写道
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
你所说的不正好证明了数据库是缺乏弹性的,数据库是有极限的,把负载全部丢在数据库端,全部依赖数据库性能解决业务复杂度就是你遇到的问题,也是现在普遍的,如果负载继续增加呢?单机数据库会撑不住的,弹性就是在增加集群服务器的时候性能随之明显提升,当然数据库集群也是可以的,但是相比app集群的代价呢?
拜托大家都真正去理解一下"数据库已死"的真实含义之后再来说吧,数据库是一定要也一定会使用的,但是把设计重心移到业务上,利用集群,缓存减轻数据库负载才是他说的意思.
胡扯。
假如一秒钟里有1万次insert,1万次select,而且这些数据调用都是必须的,看不出你的app集群有什么用处,而且只会更慢,因为数据库不单单要处理这么多次SQL,而且还要parser这么多次SQL.
减少数据库调用的有效方法之一,客户端可以用缓存,服务器端可以用临时表,游标,缓存等等方法。app集群根本不能减轻数据库调用的压力,2万条SQL调用分配到10个app集群上,数据库端收到的还是2万条SQL.
应该没有人会认为app集群会使得数据库总操作减少.我的意思可能没有表达明白,我是说,当你把负载集中到服务器,操作缓存,尽可能的减少数据库操作次数的前提下,使用app集群可以显著提高性能.同时你既然说集群没用,那么也等于说,系统性能的瓶颈在数据库端了.而我们要解决的就是让数据库解放出来,不要单单的承受那么大的压力,因为它的弹性比app来的小.
111 楼
logicgate
2009-08-25
tianhaoleng 写道
楼上的说法正好证明了:以数据库为中心的编程方式,最终是极难扩展的。
倘若我把逻辑采用java对象表达,自然就减少的对数据库的依赖。
原本要执行2万条SQL,可能现在只需要执行几条获取数据的SQL就能够完成原先的业务。
倘若我把逻辑采用java对象表达,自然就减少的对数据库的依赖。
原本要执行2万条SQL,可能现在只需要执行几条获取数据的SQL就能够完成原先的业务。
ORM, object最终还是要map到relational database,我不知道你两万条sql怎么减到几条获取数据的SQL
对于很多OLTP类型的系统,hibernate, EJB-QL之类的根本是无法胜任的。这种情况下从性能方面考虑,只能以数据库为中心。
110 楼
tianhaoleng
2009-08-25
楼上的说法正好证明了:以数据库为中心的编程方式,最终是极难扩展的。
倘若我把逻辑采用java对象表达,自然就减少的对数据库的依赖。
原本要执行2万条SQL,可能现在只需要执行几条获取数据的SQL就能够完成原先的业务。
倘若我把逻辑采用java对象表达,自然就减少的对数据库的依赖。
原本要执行2万条SQL,可能现在只需要执行几条获取数据的SQL就能够完成原先的业务。
109 楼
ray_linn
2009-08-25
TheMarine 写道
metadmin 写道
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
你所说的不正好证明了数据库是缺乏弹性的,数据库是有极限的,把负载全部丢在数据库端,全部依赖数据库性能解决业务复杂度就是你遇到的问题,也是现在普遍的,如果负载继续增加呢?单机数据库会撑不住的,弹性就是在增加集群服务器的时候性能随之明显提升,当然数据库集群也是可以的,但是相比app集群的代价呢?
拜托大家都真正去理解一下"数据库已死"的真实含义之后再来说吧,数据库是一定要也一定会使用的,但是把设计重心移到业务上,利用集群,缓存减轻数据库负载才是他说的意思.
胡扯。
假如一秒钟里有1万次insert,1万次select,而且这些数据调用都是必须的,看不出你的app集群有什么用处,而且只会更慢,因为数据库不单单要处理这么多次SQL,而且还要parser这么多次SQL.
减少数据库调用的有效方法之一,客户端可以用缓存,服务器端可以用临时表,游标,缓存等等方法。app集群根本不能减轻数据库调用的压力,2万条SQL调用分配到10个app集群上,数据库端收到的还是2万条SQL.
108 楼
rainlife
2009-08-25
metadmin 写道
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。
正是因为太过依赖于数据库,而造成了相应的瓶颈问题。
107 楼
TheMarine
2009-08-25
metadmin 写道
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
你所说的不正好证明了数据库是缺乏弹性的,数据库是有极限的,把负载全部丢在数据库端,全部依赖数据库性能解决业务复杂度就是你遇到的问题,也是现在普遍的,如果负载继续增加呢?单机数据库会撑不住的,弹性就是在增加集群服务器的时候性能随之明显提升,当然数据库集群也是可以的,但是相比app集群的代价呢?
拜托大家都真正去理解一下"数据库已死"的真实含义之后再来说吧,数据库是一定要也一定会使用的,但是把设计重心移到业务上,利用集群,缓存减轻数据库负载才是他说的意思.
106 楼
lovejuan1314
2009-08-25
metadmin 写道
呵呵,数据总是要持久化保存的。目前最好的方案是数据库。将来是否会出现其他中间件来代替,不好说。。。。
但,目前很多系统出现瓶颈,就埋怨数据库。这显然不对。
在系统运行不流畅的时候,我们使用sql命令对数据库操作,处理速度还是非常好的。这在某种层次上面,说明了数据库坚如磐石。瓶颈是在应用层面,也就是我们的业务系统。
就举个案例吧:
有好几年了,我们使用JAVA给某银行做数据分析系统,全部使用JAVA语言编写的,没有使用存储过程。头几个月运行效果不错,随着数据量上升,系统几乎是死翘翘了。
在快死翘翘的时候,我计算了一下如果把上月数据分析完毕需要100年时间。记得当时又快过年了。情况还是比较着急的,组员也急着回家。
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
如果不合理使用数据库,数据库会被一些蠢货玩死。
但,目前很多系统出现瓶颈,就埋怨数据库。这显然不对。
在系统运行不流畅的时候,我们使用sql命令对数据库操作,处理速度还是非常好的。这在某种层次上面,说明了数据库坚如磐石。瓶颈是在应用层面,也就是我们的业务系统。
就举个案例吧:
有好几年了,我们使用JAVA给某银行做数据分析系统,全部使用JAVA语言编写的,没有使用存储过程。头几个月运行效果不错,随着数据量上升,系统几乎是死翘翘了。
在快死翘翘的时候,我计算了一下如果把上月数据分析完毕需要100年时间。记得当时又快过年了。情况还是比较着急的,组员也急着回家。
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
如果不合理使用数据库,数据库会被一些蠢货玩死。
同意,我也实际遇见过一个真实的案例,负责开发的coder在程序中对数据库一个blob的字段读取操作不当,将当时维护的一台AIX小型机直接down掉...
105 楼
metadmin
2009-08-25
呵呵,数据总是要持久化保存的。目前最好的方案是数据库。将来是否会出现其他中间件来代替,不好说。。。。
但,目前很多系统出现瓶颈,就埋怨数据库。这显然不对。
在系统运行不流畅的时候,我们使用sql命令对数据库操作,处理速度还是非常好的。这在某种层次上面,说明了数据库坚如磐石。瓶颈是在应用层面,也就是我们的业务系统。
就举个案例吧:
有好几年了,我们使用JAVA给某银行做数据分析系统,全部使用JAVA语言编写的,没有使用存储过程。头几个月运行效果不错,随着数据量上升,系统几乎是死翘翘了。
在快死翘翘的时候,我计算了一下如果把上月数据分析完毕需要100年时间。记得当时又快过年了。情况还是比较着急的,组员也急着回家。
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
如果不合理使用数据库,数据库会被一些蠢货玩死。
但,目前很多系统出现瓶颈,就埋怨数据库。这显然不对。
在系统运行不流畅的时候,我们使用sql命令对数据库操作,处理速度还是非常好的。这在某种层次上面,说明了数据库坚如磐石。瓶颈是在应用层面,也就是我们的业务系统。
就举个案例吧:
有好几年了,我们使用JAVA给某银行做数据分析系统,全部使用JAVA语言编写的,没有使用存储过程。头几个月运行效果不错,随着数据量上升,系统几乎是死翘翘了。
在快死翘翘的时候,我计算了一下如果把上月数据分析完毕需要100年时间。记得当时又快过年了。情况还是比较着急的,组员也急着回家。
我们对系统进行分析后,采取了缓存、临时表两种手段,极大降低调用数据库次数,提高每次调用效率。这两种方式,对系统性能提升非常大。上月数据只要1天时间就能处理完毕。
只要稍微合理利用数据库,同时对自己的程序进行优化。显然数据库还是好的方式!!
如果不合理使用数据库,数据库会被一些蠢货玩死。
104 楼
everlasting_188
2009-08-25
lovejuan1314 写道
Oracle expert tom kyte 的开发经验
恩,确实如此.. 因为数据库中已经存在了诸多的解决方案,而数据库却又是最接近底层东西,所以,能在数据库完成的尽量在数据库完成这是性能优化的一方面. 当然,如果考虑系统的移植性,就需要考虑避免使用它来完成过多的东西了..
性能和可移植性永远是个三角,看你的重心在什么地方. 如果你重心在产品的移植性,那就会必然会牺牲部分性能. 如果重在性能势必会影响一些产品的可移植性.
恩,确实如此.. 因为数据库中已经存在了诸多的解决方案,而数据库却又是最接近底层东西,所以,能在数据库完成的尽量在数据库完成这是性能优化的一方面. 当然,如果考虑系统的移植性,就需要考虑避免使用它来完成过多的东西了..
性能和可移植性永远是个三角,看你的重心在什么地方. 如果你重心在产品的移植性,那就会必然会牺牲部分性能. 如果重在性能势必会影响一些产品的可移植性.
层次性的数据库早期出现过,现在也有,从查找的角度来说,更接近与人的思维方式,但是现在不是主流。关系型数据库,有一整套理论,计算机从本身上说智能化程度不高(人工智能我们还没有特别牛的理论上的突破),你要想把处理速度提上去,你需要按照他的工作方式来设计。
现实社会的复杂的,人的行为也是复杂,这样就导致了有些行为很难翻译成计算机的语言来做,这也是为什么硬件发展快,软件发展慢的原因。
设想你设计一个程序,很OO,可移植性强,一普通机器上可以支持10个并发用户;另外一个不太OO的程序,一普通机器上可以支持1000个并发用户。对小项目来说,会选择前者,对大的项目和平台来说选择后者。
还在冯诺依曼的体系结构下,绝对的OO很难,如果本身底层就是一个OO的东西,上层不得不OO,但是现实情况不是。
OO只是理解世界的一种方法,不是外能的,像哲学上的唯心和唯物,说不清楚谁对谁错。就事论事,选择好的解决方案解决问题才是王道。
那里有什么万能的设计方法学,没看到,可能我理解能力有限吧。
103 楼
coolnight
2009-08-25
ray_linn 写道
lovejuan1314 写道
恩,确实如此.. 因为数据库中已经存在了诸多的解决方案,而数据库却又是最接近底层东西,所以,能在数据库完成的尽量在数据库完成这是性能优化的一方面. 当然,如果考虑系统的移植性,就需要考虑避免使用它来完成过多的东西了..
性能和可移植性永远是个三角,看你的重心在什么地方. 如果你重心在产品的移植性,那就会必然会牺牲部分性能. 如果重在性能势必会影响一些产品的可移植性.
最后一段话说得相当辩证,当浮一大白
P, 两个点, 怎么成三角, 跷跷板还差不多
102 楼
sulins
2009-08-24
才一次“小项目”而已,楼主就能得出这么大的结论。
呵呵,楼主真“牛”。
呵呵,楼主真“牛”。
101 楼
ray_linn
2009-08-24
lovejuan1314 写道
恩,确实如此.. 因为数据库中已经存在了诸多的解决方案,而数据库却又是最接近底层东西,所以,能在数据库完成的尽量在数据库完成这是性能优化的一方面. 当然,如果考虑系统的移植性,就需要考虑避免使用它来完成过多的东西了..
性能和可移植性永远是个三角,看你的重心在什么地方. 如果你重心在产品的移植性,那就会必然会牺牲部分性能. 如果重在性能势必会影响一些产品的可移植性.
最后一段话说得相当辩证,当浮一大白
100 楼
lovejuan1314
2009-08-24
ray_linn 写道
lovejuan1314 写道
Oracle expert tom kyte 的开发经验
对于开发数据库软件,我有一套很简单的哲学,这是我多年以来一直信守的思想:
如果可能,尽量利用一条 SQL 语句完成工作。
如果无法用一条 SQL 语句完成,就通过 PL/SQL 实现(不过,尽可能少用 PL/SQL!)。
如果在 PL/SQL 中也无法做到(因为它缺少一些特性,如列出目录中的文件),可以试试使用
Java 存储过程来实现。不过,有了 Oracle9i 及以上版本后,如今需要这样做的可能性极小。
如果用 Java 还办不到,那就在 C 外部过程中实现。如果速度要求很高,或者要使用采用 C
编写的一个第三方 API,就常常使用这种做法。
如果在 C 外部例程中还无法实现,你就该好好想想有没有必要做这个工作了。
对于开发数据库软件,我有一套很简单的哲学,这是我多年以来一直信守的思想:
如果可能,尽量利用一条 SQL 语句完成工作。
如果无法用一条 SQL 语句完成,就通过 PL/SQL 实现(不过,尽可能少用 PL/SQL!)。
如果在 PL/SQL 中也无法做到(因为它缺少一些特性,如列出目录中的文件),可以试试使用
Java 存储过程来实现。不过,有了 Oracle9i 及以上版本后,如今需要这样做的可能性极小。
如果用 Java 还办不到,那就在 C 外部过程中实现。如果速度要求很高,或者要使用采用 C
编写的一个第三方 API,就常常使用这种做法。
如果在 C 外部例程中还无法实现,你就该好好想想有没有必要做这个工作了。
呵呵 Tom <Oralce 高级编程> ,其观点就是,花在数据库上的每一分钱都应该得到回报,有一项功能不用,就是浪费。
恩,确实如此.. 因为数据库中已经存在了诸多的解决方案,而数据库却又是最接近底层东西,所以,能在数据库完成的尽量在数据库完成这是性能优化的一方面. 当然,如果考虑系统的移植性,就需要考虑避免使用它来完成过多的东西了..
性能和可移植性永远是个三角,看你的重心在什么地方. 如果你重心在产品的移植性,那就会必然会牺牲部分性能. 如果重在性能势必会影响一些产品的可移植性.
99 楼
java_mike
2009-08-24
我也比较赞同楼主的观点。
98 楼
hsbljyy
2009-08-24
conrol 写道
一直有个疑问,是用hibernate自动创建表还是用powerdesign等建模工具建表?
虽然我很少使用Hibernate,不过,如果我用Hibernate的话,我会用Hibernate自己创建。
97 楼
conrol
2009-08-24
一直有个疑问,是用hibernate自动创建表还是用powerdesign等建模工具建表?
发表评论
-
vim补全
2009-10-13 16:42 0引用VIM自动不齐不需要特殊配置,只需要打开 filetype ... -
IntelliJ Idea插件Jetty Integration恢复开发
2009-08-19 14:34 3585今天在je上面看到了一条新闻 Google 选择 Jetty, ... -
PowerDesigner 中将Comment(注释)及Name(名称)内容互相COPY的VBS代码
2009-07-30 14:05 2259在用PowerDesigner时.常常在NAME或Commen ... -
使用VisualSVN Server构建自己的版本库
2008-12-16 16:13 1706VisualSVN Server是用于Subversion管理 ... -
在laszlo方法中使用参数
2006-03-22 14:56 965<canvas debug="true&quo ... -
openlasz入门---openlaszlo环境的建立
2006-04-11 22:09 1701关于openlaszlo的介绍网站上面也蛮多了,所以,在这里也 ... -
Openlaszlo调用JavaRPC和JAVA类通信
2006-04-20 10:31 1839JavaRPC允许Laszlo客户端远程调用服务端的JAVA类 ... -
使用 JavaMail 收发邮件,解决中文附件问题
2007-02-07 11:22 3848几天来一直在开发一个项目,其中一部分需要用 JavaMail ... -
FCKEditor使用说明
2007-02-17 13:53 14981. FCKeditor 介绍 FCKeditor 这个开源的 ... -
一个不错的开源数据库H2
2007-02-17 14:10 1497H2是一个采用Java开发开源的嵌入式SQL数据库。它支持集群 ... -
JAVA获取系统当前的用户
2007-03-02 17:15 6733public class Test { ... -
FCKeditor插件开发
2007-03-23 21:45 2964FCKeditor插件开发建立 ... -
Idea8试用
2008-03-23 21:56 1669刚刚在新闻频道看到关于Idea的新闻,对它的javascrip ... -
HtmlUnit测试页面
2008-03-02 22:29 9887HtmlUnit简介:引自 www.open-open.com ... -
java的数据结构
2007-11-11 19:04 1491线性表,链表,哈希表是常用的数据结构,在进行Java开发时,J ... -
P6SPY监控数据库性能
2007-11-11 18:51 2931P6SPY监控数据库性能 P6SPY通过对JDBC API的 ... -
Idea7.0注册机
2007-10-20 22:55 3233Idea7.0注册机 -
[转]普元JS验证
2007-09-16 22:25 1688* -------------------------- ... -
Apache和Subversion搭建版本控制环境
2007-08-03 23:40 15361. 安装Apache2.0.59(Apache 2.2.4和 ... -
IDEA的RUBY插件试用
2007-07-31 22:21 3878经过http://www.intellij.org.cn站长的 ...
相关推荐
"产品实习生:第一次独立带项目的总结思考" 本文是对第一次HOLD一个项目的总结与反思,作为一名新人,第一次做活动是很茫然也很容易踩坑。作者总结了许多经验和思考,希望和小伙伴们看了有所收获。 背景和目的 ...
软件项目是一次性的、以目标为导向的、通过项目经理及其团队工作完成的,而日常运作是重复进行的、通过效率和有效性体现的、职能式的线性管理。软件项目存在大量的变更管理,而日常运作则基本保持连贯性。 三、软件...
项目经理是项目成功的关键角色,而沟通管理则是项目经理的必备技能之一。有效的沟通能够管理认知,管理期望,确保项目团队的协调一致,减少冲突,并解决项目管理中可能出现的问题。以下是关于项目沟通的一些关键点:...
"项目管理课件第一次课.pptx" 提到,项目管理首先是一种见识,它涉及对复杂问题的战略性思考和决策。课程强调了改变人的观念,即世界观的重要性,这在项目管理中表现为创新的思维方式和解决问题的能力。课程采用互动...
【某国际食品城项目系统思考讲义】 该项目主要聚焦于建设一个国际食品交易平台,结合了行业背景、地域优势以及面临的挑战。以下是对该项目关键知识点的详细解析: 1. **行业背景**:中国的食品工业在2010年后呈现...
《第一次把事情做对》这本书的核心理念是倡导在工作和生活中追求零缺陷,即首次执行任务就能达到预期标准,避免返工和浪费。作者杨钢通过自己的经历和读者的反馈,强调了书中观点的影响力和实际应用效果。他认为,...
- **Spring Cloud**:基于Spring Boot实现的一套微服务云应用开发框架,提供了微服务解决方案,包括配置管理、服务注册与发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、...
### 大型项目架构演进过程及思考的关键知识点 #### 一、大型项目架构演进的基本概念 在大型项目的生命周期中,其架构和技术选型并非一成不变,而是随着业务的发展和技术的进步逐步演变而成。这一过程涉及从最初的...
课堂小结时,学生应反思在学习过程中掌握了哪些知识,如一次函数模型的建立和应用,以及在探索知识时主要运用的分析方法,可能是观察、实验、图形分析或代数推理等。 总的来说,这节课旨在提高学生的函数建模能力和...
里面讲了多种控制项目的工具和方法,以及项目的不同周期要思考和解决的问题,写得很不错! 里面讲到了很多项目上遇到的问题,让人受益匪浅! 前言 第1章 “迷你”CEO——项目经理不简单 1.1项目经理是干什么的 ...
3. 复杂性与一次性:项目应具有一定的复杂性,挑战学生的解决问题能力,同时每个项目都是独特的,避免重复性训练。 4. 客户导向:项目应以满足客户需求为出发点,让学生学会从客户的角度思考问题。 例如,设计一个...
此项目是昆明市政府重点规划的14个泛亚商贸物流中心之一,旨在打造一个集交易、加工、仓储、物流等功能于一体的高标准、国际化商贸集群,服务于东南亚、南亚、南欧乃至非洲的工业品贸易。 **立足昆明城市发展看项目...
【XXXX年中国漯河国际食品城项目系统思考】的分析展示了该项目在财务管理类的PPT文档中的详尽评估。以下是对项目关键知识点的深入探讨: 一、项目概况 该项目位于河南漯河,享有“中国食品名城”的美誉,食品工业在...
以下条款是为了更好地协助项目领导在组织内的工作。在管理项目之时,应利用这些条款来帮助确定所有的关键...根据每一项目的具体特征,应该每一次都已全新的“专业化”的态度去面对。应该以这样的态度对待每一个项目。
【建筑工程项目管理思考】 本文主要探讨了建筑工程项目管理在当前城市现代化建设背景下的重要性和面临的挑战。建筑行业作为国民经济的重要支柱,随着城市化进程的加速,工程的数量和规模日益增大,对施工技术和管理...
工程工程管理,特别是建筑工程工程管理,除了上述特性,还强调一次性管理、全过程管理和强约束性,旨在高效地实现建筑项目的目标。 建筑工程工程管理是针对建筑工程项目的特定管理活动,以优化实现项目目标为宗旨,...
南京中航科技城项目策略思考的沟通提案主要探讨了如何利用南京的历史文化底蕴和现代发展契机,打造一个集商业、科研、居住和文化于一体的综合性科技城。项目的核心目标是成为南京城市优化的引擎,促进区域升级,推动...