日期:2014-05-17  浏览次数:20460 次

【原】MATALB结合的多层分析应用服务。
这么晚了,我还在写代码。唉,命苦啊。

写个话题,皆因我很久没有写东西了,心里想,写点吧。于是,就找了这个话题,而且是我最新的话题。写了一点。希望大家有兴趣。

我在这里只是简要介绍我自己的一套方法,希望有更好方法的同学也拿出来分享一下。

这个话题有点大,这是结合本人现在做的一个东西:数据库,数据仓库与MATLAB结合的多层后台分析服务系统.

对MATALB熟悉的人都知道,MATLAB中最好用的就是工具箱,但是,工具箱却不能编译为NET的DLL.我也曾试过很多方法.在人大的经济论坛里加了几个人的QQ,想请教他们关于MATALB工具箱的编译问题.但最终结果都是否.不可行.

这的确是一个头大的问题,困绕了我很久.最终导至的结果是,放弃MATALB的编译.而将MATALB直接作为分析的系统.换句话说,就是直接在MATALB中运行M代码.有点类拟在VB中操作OFFICE.

但这样又导至了另一个问题,如何将MATALB的结果返回到NET中.为解决这个问题,其实,这也是这个系统的一个核心问题,这个问题解决了,其它的都是水到渠成.为这个问题,我绕了好大的一个弯.今天要描述的,就是这个弯怎样绕.这也可能是MATALB应用关心的一个问题.

整个系统分为四个层.

1.WEBSERVICES层.
  这个层是接收前台发送的M代码,并将M代码交给第2层.

2.WINDOWS服务.
  这个服务其实就是一个容器.里面有两个哈稀表描述的结构,一个是用于保存WEBSERVICES中提交的M代码.一个保存M代码运行的结果.这是一个静态层.本身不做任何操作.

3.WCF层.
 这个层是用于分析后台(MATLAB后台)与WINDOWS服务间的通信.它只接受后台的申请.从WINDOWS服务容器中提取M代码.提取后将M代码从2的服务中删除.

4.MATALB交互程序.
  这个应用程序直接与3的WCF和MATALB之间建立联系的纽带.从MATALB中申请M代码。然后通过OLE发送到MATALB对象,MATLAB接收到代码后直接RUN,将结果何存到一个内存虚拟盘上。该程序再从虚拟盘中读出相关的分析结果。提交给WCF,WCF会将这个结果直接写入到WINDOWS服务中。

5.WEBSERVICES(这是第1层的WEB服务)在提交M代码后,一直在等待的状态。并侦测2层的WINDOWS服务的哈稀表是否有返回结果。如果有,则从服务中提取结果,并将结果从服务中删除。并将结果返回给前台用户。

这些就是这个分析后台的一个简要介绍。不过,做起来还是很复杂的。题外话:我这个人,不是很勤奋的人,写代码也是三天打鱼两天晒网的那种。刚开始准备这个东东时,把文档和相关的关系描述后,自己看着在摇头,心里想,这么大的代码量,都不知道什么时候能完成。不过,每日点点滴滴,终于进入了测试阶段。感觉还挺好。呵呵。。

相关要点:

A. 1,2,3 在同一台服务器上。4 和MATALB在另一台服务器上。当然,可以横向或纵向扩展。
B. MATALB返回的结果可以是N个矩阵列或N个图片。每段MATALB代码在写虚拟盘时都应该有相应的标识(标识就是文件名,也是哈稀表中的KEY)。有一个与之对应的数据库对M代码进行相关的描述。

我为什么要至力于开发这个后台呢?因为我觉得MATALB的算法非常多,有很多相关的 预测,插值,数据挖掘,最优化算法 代码(本人磁盘就保存了好几个G)。扩展非常容易。而相应的算法如果用.NET来写,我感觉算直就是在浪费生命。
做这个后台可能我本人的工作方式有关。我总喜欢把事情弄得一了百了,免得罗里罗索的,没完没了的( 这句话可能做报表和数据提取的朋友很有感觉. :) )。

这里介绍了相关的开发要点和各层次的关系。有兴趣的朋友可以自己写。当然,如果你有更好的办法,不防大家交流一下。


------解决方案--------------------
关注
------解决方案--------------------
sf
------解决方案--------------------
关注一下,确实够复杂。
MSTOP可以考虑下跟官方联系看看有没有什么其他的解决方案,呵呵。
毕竟,如果能平滑地挂接.Net平台,对MATALB也是非常有有益的事情
------解决方案--------------------
看看
------解决方案--------------------
路过~~
------解决方案--------------------
学习
------解决方案--------------------
好强大 学习一下
------解决方案--------------------
学习!
------解决方案--------------------
哦,难点在工具箱函数 ?
------解决方案--------------------
包含了工具箱函数的M代码 能编译为 一个命令行的exe吗?
你的gui程序可以调用此exe,然后得到它执行的结果再来显示。。。。。。。。
------解决方案--------------------
啥东西?看看.顺便接分.
------解决方案--------------------
学习 帮顶
------解决方案--------------------
学习
------解决方案--------------------
厉害,只看过点皮毛 MATALB,谢谢分享
------解决方案--------------------
您至少需要安装matlab runtime, 约莫200M左右,matlab导出function以dll形式和c/c++交互
------解决方案--------------------
浩大的工程!
------解决方案--------------------
学习
------解决方案--------------------
~
探讨
学习