各位兄弟,请教了。我现在做一个数据库管理系统,难点在每个记录都对应一个到多个图片,要数据和图片一块显示出来。(图片太多,存储于数据库中会很大,很慢)
我现在的设计方案是这样:
 1.服务器端数据存储到数据库,图片以编码为名称存储在一个文件夹下,对此文件夹提供ftp下载服务
 2.客户端按查询得的编码,下载图片到客户端。
 3.对下载到的图片产生缩略图。
 4.将缩略图与数据写入客户端的一个临时数据库中。
 5.界面上的数据就采用DBCtrlGrid1将(数据+图片)成块显示出来。
以上是小弟的初步方案,我现在担心的是一旦一次要下载图片的图片很多时,会不会很慢?第四步是否
必要要将数据+图片同时写入数据库,因为这一步会相对耗时很多?是否有更好的办法
小弟不知各位还是否有更好的方案,能否告知?我的方案也请各位指出不足,谢谢各位了

解决方案 »

  1.   

    怎摸进行图片压缩,能具体点吗?
    如果全放到数据库中,速度就是最大的频径,数据可能2--5万比,恐怕query.open都得等上好久
      

  2.   

    把图片存到本地,不放在数据库不行吗?
    转换为流 :TFileStream TMemoryStream   处理 
    即使放到数据库单独放一个表种,界面显示的时候,先显示数据记录,图片显示部分先loading... 然后显示图片,大家就能接收,谁都知道图片慢,但记录不能慢
    存的时候同样
      

  3.   

    这说的这个模式只限 C/S 。
    1、图片大的问题。通常我会这么解决图片太大的问题,我会保存为 Jpg,并根据我的要求调整压缩比。
    2、数据结构:
      TableMain 你的主记录表,pID 为主键,TablePic 同样以 pID 为主键,一对一的关系。
    3、显示问题:
      在批量浏览的时候只显示主表记录,如果想查看图片,可单独做按钮,或双击一条记录显示详细内容,这个时候再从数据库中把对应的图片取出来显示,由于是单条就会很快。
    4、效率问题:
       如果想大量的显示,比如一屏显示 N 条记录,则要费一点工夫了,会大加程序量:
       1、采用本地缓存技术,即每看一张图片就把它给保存到本地的目录中,并且打上最后更新的时间,否则你没办法判断,本地的图片新,还是服务器的图片新。
       2、分屏显示,因为屏幕的大小是有限的,你不可能一下子显示很多图片,太多也没法看,
          最多也就是二三十条,那这个时候如果用 C/S 程序一部分从本地取,一部分从远程取,就
          会很快,我所说的一部分是本地有的就在本地,本地没有的就去服务器取。
    5、保存在数据库(SQL Server)中后,数据库急骤膨胀的问题:
       可以把图片这张表建在另一个数据库中例如在 SQL Server 中,DBMain 这是主数据库,
       DBPic 是照片数据库,把 TablePic 建在 DBPic 中,把 TableMain 建在 DBMain 中。缺点:
    我们用的是 SQL Server 的数据库,存入大量的图片以后,数据库的尺寸会急骤膨胀,而且删除、插入操作越频繁数据库日志文件的尺寸膨胀就越利害。说的比较多,不知道对楼主有没有用,咱们相互交流。
      

  4.   

    Jpg 压缩网上有好多例子,都是如何把 bmp 转换成 jpg 的,要用的 TJPEGImage 对象和 JPEG 单元。 下面是我自己的一个例子,注意  JPG 压缩并保存到数据库中后不可以用 DBImage 显示,要自己写程序,不然会报错,不过你可以用第三方的组件,也很方便,压缩转换的代码如下:
    procedure TForm1.Button2Click(Sender: TObject);
    var
      B:TBitmap;
      J:TJPEGImage;  //<<<用此类,你要 uses JPEG 单元。
    begin
      B:=TBitmap.Create;
      try
        B.LoadFromFile('c:\Desktop.bmp');
        J:=TJPEGImage.Create;
        try
          J.Assign(B);
          J.SaveToFile('c:\Desktop.Jpg');
          // Desktop.bmp 为我从我当前 Delphi 的编辑环境抓屏的图为 1024 * 768 的 24bit(真彩图)
          // 3MB多的图,未经任何处理,
          // 转换后变成了 166KB 当然视图片的内容而言,内容不同压缩比不同。
          // 别忘了 JPG 图片是失真的。
          //-------------------------------------------------------
          //再试试 50% 压缩;
          J.CompressionQuality:=50;   //<<<压缩比
          J.Compress();               //<<<压缩函数
          J.SaveToFile('c:\CompressionQuality.Jpg');
          //效果比较差,尺寸又小了许多,变成了 90KB 。
        finally
          J.Free;
        end;
      finally
        B.Free;
      end;
    end;
      

  5.   


    我最近也做了个类似的程序,用来扫描并保存质保书的,以前也是保存在数据库中,但保存的时候极慢。现在改为上传到服务器,以文件形式存放,数据库只保留路径。客户端查询时FTP形式下载,目前用户反映良好。
      

  6.   

    我看到过一款专业的图形与数据集成的软件,叫Visualnet。它们在网络版上的图形处理速度和单机版差不多。
    你可以到  www.ntw.com   上了解一下他们怎么做的。
      

  7.   

    我觉得可以如存到数据库,用TMEMORYSTREAM读出数据来
      

  8.   

    应用程序里嵌个浏览器,把查询做成asp岂不很省事?