使用数据库来进行图像分布式运算中的问题
当前有个应用,需要数据库作同步,我想了很久,有些问题需要请各位高人指点一下。
在图像运算中,有些需要接近实时运算,例如,每秒钟需要运算20次以上。但是算法又太复杂,于是我计划使用LAN上的N台机机进行分布式运算,其中的N可能是随时变化的,现在大致计划30台左右。而且每台客户机的速度也可能不一样。数据库平台没有定,SQL或ORACLE 均可,算法使用 C++.net 或者C# 来实现。
我是这么构想的。算法是存储在EXE文件中,客户机执行这个EXE。
服务器上的表A:内容为需要运算的图片,定段为:
int id //主键
string FileName //源图片的定位
int RunState //运算状态
string CFileName //结果图片的输出位置
服务器上对应每个需要运算的图像生成1张表,暂名为B。其字段为:
int ID, //主键
int PictID, //表A的对应ID
int LineNO, //行号
int Channel, //通道号,如果返回的结果不是灰度图,才需要这个字段
int RunState, //当前运算情况
string Count, //返回的结果
客户机根据表A的内容,确定当前需要运算的源图,查找对应的表B,查看有哪些行还没有被运算,然后运算这个行。因为可能要跨行获取运算所需的参数,因此要先载入整个源图(如果已经下载当然就不用重新下了),然后将源图和需运算的行号输入到算法,算法计算出这一行的结果,将它转换成 char[],然后输出到表B/Count。
当然了,里面的数据和文件同步算法很简单,就此略过。图像与字符串的相互转换已经完成,这个也不复杂。
在数据库效率方面有两个限制:
1.数据库的写入阶段需要锁定,否则会造成查询用户的返回错误。
2.太多的连接或者频繁的打开关闭都会影响数据库的性能
因为 1 和 2 的限制,使我不能采用频繁打开和关闭连接的方法,同时又不能打开连接,直到完成运算并写入数据才关闭。为此,我想了另外的一个方法,就是将结果字符串不写入数据表格中,将它以文本文件的方式传入文件服务器,然后连接到表B,将运算状态写入即可。
请问这样做的话,效率是否会高一些?还会出现什么问题?
事实上几乎所有的图像算法都是遂行遍历的,因此这个构架可以大范围推广,并且可以在WAN上运行。最后我打算用 JAVA 把算法和数据库操作都写成跨等平台的,MAC,UNIX都能够运行。