面向对象在商务智能中的应用?

08-05-18 kaite
                   

在Jdon这个网站学习了很多面向对象的知识。看到这里很多人有数据库要灭亡的说法。
我一直很困惑,像我现在做的移动经分项目,主要做的就是数据统计,以便移动领导决策分析。
在我们这里数据统计动着几千万条,上亿条的也有可能,性能对我们很重要。我很难想象如果把这些数据从数据库中搬出来,封装在对象里面,然后在计算(我们主要做数据抽取、转换、加载)。我们有强大的数据库系统,为什么还要搬到小型的业务系统上去了。业务系统也不可能保存几十T的数据吧。

我们常常说数据库是数据冬眠的地方。是的,我也是这么认为的。但实际上我们的数据库不只是保存数据(或者面向对象的说法,叫做数据持久化)。我们可能要对些字段做统计,或者转换。当我们面临很小的数据时,如几万条或者百万条的时候,也许我们还可以从数据库把他们取出来,再统计,再转换,再插入另外一张表。这个过程我们都可以用OO完成。 如果数据量到了千万条,上亿条,我真的想象不出,为什么不用数据库自身的统计,转换能力来做这些事。却要把它抽取出来,封装在对象中,做完转换,在写回去,这样做是很浪费网络,和计算资源的。这是我的困惑之一。

我另外的困惑就是,确实现在的数据库设计思想还有很多停留在过程设计阶段。它有很多缺陷,它没用面向对象那样直观的表示。要用数学的思考方式考虑很多细节。它没有对象里面的继承实现方法。有的话,各个数据库实现也不是一样的。在我们的开发中常遇到的问题是很难封装变化点。很难重用一些做好的设计。很难使数据库开发敏捷化。
我真的希望能有一套很好的数据库面向对象设计、开发方法学。我们现在为了追求性能用的是存储过程来实现数据库的开发。

                   

kaite
2008-05-18 12:03

我自己在补充一点。数据仓库设计中也是分层设计的,也是按照业务逻辑分为:基础层,应用层,展现层。

banq
2008-05-18 12:11

>我很难想象如果把这些数据从数据库中搬出来,封装在对象里面,然后在计算(我们主要做数据抽取、转换、加载)。

怎么难以想象呢?我在 分布式云计算文章中已经说了,你封装在对象中,这样就可以在服务器群中运行,我倒是很难想象,google将全球数据放到你们移动那个一两大数据库中会是怎么情况。

http://www.jdon.com/artichect/architecture.html


不要让存在现实成为我们探索真理的阻力,也不要用成见来影响我们的创造力,地震后可以有124小时还活着。

国外对象大师MartinFowler也说了领域模型和事务脚本中,将业务封装到对象中,大则互动,进而越大,小则过程化,多么简单的大道理,应该丝毫不难以理解啊。

http://www.jdon.com/article/34056.html


>我真的希望能有一套很好的数据库面向对象设计、开发方法学。
我以上说的这些思路其实早就在JavaEE成熟实现了,2002年你如果研究EJB和JMS;2004以后你如果研究Spring Hibernate 和分布式缓存ehcache等,你就会发现,你有疑惑的那些技术早就成熟,只不过你没有去做罢了。J道网站就是反复告诉你们这些先进技术和思想的真相。

>如果数据量到了千万条,上亿条,我真的想象不出,为什么不用数据库自身的统计,转换能力来做这些事。却要把它抽取出来,封装在对象中,做完转换,在写回去

这是业务一部分,可以通过对象分析方法实现,如果你还是疑惑计算能力问题,我也说过,分布式对象可以散落N多台服务器中运行,肯定强于你一两台数据库服务器,这是一个简单的1+1=2的数学问题。所以,为什么我们现在云计算很热门,都是对过去我们集中式计算思维的调整。

[该贴被banq于2008-05-18 12:27修改过]
[该贴被banq于2008-05-18 12:28修改过]

kaite
2008-05-18 13:26

首先得感谢banq的热情回复。

你的分布式云计算文章其实我在这篇帖子之前我就看了。事实上移动也是用计算机集群来做的。虽然计算机集群和云计算还是有些区别的。但在它能够满足现今的业务需求时,是没有必要变得。

事实上我在分布式计算,面向对象,设计模式,IOC 、缓存机制上的研究从2005年就开始了。我对业务封装到对象中,大则互动,进而越大,小则过程化也是理解的。

问题是,我们的整个业务逻辑是在数据仓库上实现的,而且数据仓库也是部署在计算机集群上的。(数据仓库的设计在国际业界也是有很成熟的方法的。数据仓库不是传统的数据库)

我们既然能够用这些可用的资源来做这件事,为什么还要把它取出来,加载到另外的机器上去做这件事了。难道把它们从强大的计算资源上取出放到几十台普通服务器的内存中,就是一个好方法。

所以我仅是要解决怎么用面向对象的方法来实现sql存储过程。怎么用面向对象的方法来设计一个数据库的库表,(你知道数据库的概念模型设计可以用面向对象模型来设计,可具体的物理模型设计就完全不一样了)。这样来减少我以后的工作量。如果我离开了这家公司到了另外一家公司,当然我会有用更好的办法来做这件事。

其实用面向对象的方法来设计数据库表我也有些想法。我想看看有什么更好的方法没有。






[该贴被kaite于2008-05-18 13:37修改过]
[该贴被kaite于2008-05-18 13:41修改过]
[该贴被kaite于2008-05-18 13:47修改过]
[该贴被kaite于2008-05-18 13:49修改过]
[该贴被kaite于2008-05-18 13:59修改过]
[该贴被kaite于2008-05-18 14:39修改过]

banq
2008-05-18 15:12

>难道把它们从强大的计算资源上取出放到几十台普通服务器的内存中
为什么搞几十台普通服务器,你也可以搞强大的几十台服务器啊。只要你资金允许,或许以后处理量增加,也许这样处理能力更强大呢。

数据仓库是一种云存储,在云计算那篇文章我也指出,云存储和云计算是不同的,因为存储和计算就是非常不同的概念。

当你意识到集群存储和集群计算是两种概念,那么你就知道你们目前这样架构虽然可以解决目前问题,但不是一个终极解决方案,不是可伸缩的。

现在也有操作系统集群,比如.NET就依赖NT的集群,Linux也有集群,计算集群也可以基于数据库集群和Linux集群,但是计算集群是一种业务对象精准集群,比他们更加精准解决计算能力,相当于精确制导导弹。

当然业务对象的计算集群基础是业务对象,我们必须首先构建出业务对象,否则巧妇难为无米之炊啊。这也是云计算的难点,就象google那样好的云计算方案它的强大就是在于它的特点,它搜索的特点,所以它的云计算优点就不能象数据仓库 Linux集群一样从它的应用场景随便移出来,放到我们的应用程序中,能够借鉴的就是它的方法和思维特点。
[该贴被banq于2008-05-18 15:12修改过]