[已解决问题] 跪求思路:大批量数据导出
提问时间: 2008-06-17 23:07
悬赏分:20 浏览:370 次
 
      在做一个交通的项目,大致应用是这样的,在主要路口安装摄像机,采集通过车辆的信息,包括车速、车牌号码、近景图、远景图、号牌图等信息,把这些信息传至与它相连的工控机,工控机再把传至中心机房的数据库(数据量巨大)。我做的那块功能主要是对中心数据库数据的查询统计等功能。其中一个功能是可以查询过往车辆的信息,幷可查看对应的照片,在线查询的时候没什么问题(分页显示)。现在用户要求可以把这些查询的结果的导出,幷包含图片,幷能分页查看,跟在线查看一样。这可把我难住了,导出就要求把所有的查询结果一次取出来,数量可能数以万计,(比如查询某个时间段通过的所有车辆,为案件侦破提供线索)。
这里边有三个棘手的问题:
1. 应用是b/s结构,一次取出数以万计的记录导出,以什么形式?xml ? excel ?
    如果把这么多的记录放到html页面里,光这个页面就要几十兆,估计一点击浏览器就死掉了。
2. 导出的数据要求能翻页查看,翻页?怎么搞?
3. 应用方式和在线查询一样,点击某条记录时可以查看照片,这些图片只是在数据库的表中存了个路径,实际位置可
   能在工控机 也可能在文件服务器,在线查看的时候没什么问题,导出的话这些图片的下载怎么办?

    偶想来想出,没什么办法,只感觉到一点,不能不加限制的让他导出,一定要对导出的记录数量做个限制,要不他一下子导出十万、一百万条记录,那程序估计要挂了。
   这个功能还是比较有用的,比如某个单位向交警队要某个时间段通过某些路口的车辆的信息,交警队把导出的结果给他们。兄弟们给出出注意,咋办啊?
提问者:mapk - 初学一级

问题补充:图片不能远程读取,这个应用是在公安网内的,而导出的数据使用时可能不在公安网。

最佳答案
对你的提问逐一回答如下: 1、XML、Excel、Access都是是可以的,但是效率如何呢,关键不是导出的形式,而是导出的方法。 (1)、关于服务器压力方面。该程序为B/S模式,那么导出的结果如果不被下载那么就会存储在服务器的某个目录下,时间长了,服务器能受的了存储这么多的数据(其中有大量的重复数据)吗?所以导出的目的不是为了离线浏览,如果用户离线了你的网页还能打开吗?其实导出数据的目的主要是为了在其他地方可以导入,并查看浏览,就像你叙述的:“某个单位向交警队要某个时间段通过某些路口的车辆的信息,交警队把导出的结果给他们。”如果是这样使用的情况较多,那么建议导出为Excel,这样使用方不需要其他数据库查看软件就能打开查看。所以导出必定要被下载、下载完成必定要删除服务器上的导出结果,而导出后不下载也要删除导出结果。 (2)、关于导出数据的效率方面。需要为不同用户建立不同的文件夹以便在这些文件夹中存放用户的导出结果,而不会使得文件发生冲突(比如两个用户同时在做查询结果导出操作)。 2、不知道你说的导出结果要翻页查看是指在哪个程序里翻页查看,如果是连线状态那么就没有必要去管导出结果了,而只要用户的查询条件还在那么依旧用连线的查询方式显示就可以了(这与是否做导出功能操作无关)! 3、依旧与第2点问题一样,到底你的B/S程序是什么样的,用户离线了还能访问并浏览你的网页吗,怎么说的像是在开发C/S程序呢?还请再叙述清楚些! 关于图片的问题,导出时可以将图片插入到Excel的某个单元格中,只要你知道图片地址,能读取出图片数据就能插入到Excel中。(如果你不信,那么你可以新建一个Excel,选中某个单元格,再在Excel的功能菜单中选择插入一幅图片,看看是否能显示,所以写代码也一定能实现此功能!)
2008/6/18 18:34:20 回答者:刚刚


提问者对于答案的评价:谢谢
其它回答(5)
可以导出小文件(xml的形式),比如按照20条分页,可以每个文件100条记录,1w条就是100个文件,按照一定的格式命名文件名,以便于查询,,数目再大,可以在里面建立小文件夹,比如1w条建立一个文件夹,等等 图片应该是能读取远程的吧,一起下载了可能就大了...
3个月前   回答者:wingoo - 小虾三级
客户说要导出10w,100w的数据,但是没有让你一下都导出(因为一下导出10w条,就算你的程序能做到,这么大一坨,客户看都看不过来),你可以按照某种客户需要的顺序一页一页的导出,每页20条。
3个月前   回答者:玉开 - 大侠五级
感觉可以导成EXCEL吧(不需要程序的时间也可以查看)~~限制每个文件的总数量, 分页嘛就把这个EXCEL做为数据源,程序是固定的, 比如写个WINFORM程序就可以看了`~~要不写个ASP,.net的也可以`~
3个月前   回答者:沙加 - 老鸟四级
玉开说的对,客户只要按分页的数据一条条的察看的,你只要写个好的分页存储过程,不要用那种临时表的那中,大数据量也没什么的.还不是要一条条的操作? 如果客户要导出数据再查看,那基本上就是下载的问题了
3个月前   回答者:yeyang - 菜鸟二级
我觉得大数据导出应该不是问题。你没必要一次性从数据库里把所有数据都取出来。可以分页取,再在导出的时候,加个进度条,这样在可视化上面,就感觉很好,而且也不会出现页面长时间工作假死状态。
3个月前   回答者:李.net - 小虾三级
评论
3个月前   mapk :
谢谢大家的指点!我没有把我的应用场景讲清楚,还需要学习怎么提问题。
1.“到底你的B/S程序是什么样的,用户离线了还能访问并浏览你的网页吗,怎么说的像是在开发C/S程序呢?”
答:用户离线了不能浏览我的网页,这个应用是在公安网上(与internet物理隔离)的,导出的数据要在公安网外浏览。
举个例子说,某个人的车丢了,交警根据卡口的记录找线索(抓拍机对车牌的识别有一定的错误率,而且盗车者可能换了车牌,不能按车牌查询),查询某个时间段通过某些卡口的车辆,记录数量可能很大,交警对车主的车的特征又不很清楚,也没那个时间去一条一条的看,交警提出要不这些记录导出来,交给车主,让车主自己找去。
2.“如果客户要导出数据再查看,那基本上就是下载的问题了”
没错,让我头疼的确实是下载的问题,数据导出没什么问题。让我头疼的是在b/s结构下从不同的url下载大量的图片。
3.“怎么说的像是在开发C/S程序呢?”
这几天我在想应用场景,因为这个应用的用户是特定的几个人,用户数不多。我的难点在于在b/s下的下载,那我不用b/s不就可以了吗。
我的想法是从先网页上下载车辆信息(xml格式),这样即使数量上万,此文件的大小也就十几兆,在内网的条件下,下载不成问题;下载下来此xml文件后,客户机的程序利用此xml文件中的url去下载对应的图片保存导对应的目录下,然后在把url修改为相对路径,这样就没什么难度了。因为用户是特定的几个人,这种方式他们是可以接受的。我的这个想法是否可行,存在什么问题,欢迎大家指正!
再次谢谢大家。

3个月前   刚刚 :
首先楼主不用客气,呵呵……
其次引用楼主的问题:“ 我的想法是从先网页上下载车辆信息(xml格式),这样即使数量上万,此文件的大小也就十几兆,在内网的条件下,下载不成问题;下载下来此xml文件后,客户机的程序利用此xml文件中的url去下载对应的图片保存导对应的目录下,然后在把url修改为相对路径,这样就没什么难度了。因为用户是特定的几个人,这种方式他们是可以接受的。我的这个想法是否可行,存在什么问题,欢迎大家指正!”我的回答是:“也可以只是数据导出过程需要两个步骤(1、导出数据库非图片数据;2、导出图片数据),用户同意就没问题,但公安外部的用户如何用呢?”
最后楼主的导出形式决定采用XML来存储数据吗,还是Excel呢?
   您需要登录以后才能回答!
 

我要提问

我的问题


快到期问题

> 问题排行榜

相关内容

相关链接