7
回答
JavaWEB开发 把临时数据存入Session还是存到缓存中
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

用户故事:把经销商信息的EXCEL表格,导入到系统,在前端页面显示数据信息,数据超过50条需要分页;操作员确认信息无误后,点击导入到数据库;

我的问题是:把Excel导入系统中(还未插入到数据,只是需要在前端页面显示,让操作员确认信息是否正确),把解析excel后的数据放到Session中,在进行分页,还是使用Lucene生成缓存数据,那种方式更实用,各位是否还有其他方式?

多谢!

举报
YOTOO
发帖于4年前 7回/6K+阅
共有7个答案 最后回答: 4年前


代码有点乱,不好意思开源,所以没有上传到oschina。

主要是用了一个自己的小框架,不过直接换成servlet很容易的。主要的所有关于Excel的操作的函数都在com.jyapp.excel的CmsExcel类里面。接入servlet的response和request的接口在ExcelUtils类里面

用了ExcelSet对象,保存所有的Excel里面的数据。

 

看的时候,从web目录下的excel/index.html开始看就行。

访问的时候也是访问/excel/index.html

在index.html里面,先用jquery的fileupload上传一个文件,带滚动条的。。

上传的文件被ExcelScene接收(ExcelScene本质就是一个ExcelServlet,我自己封装着玩的)。

然后ExcelScene里面调用一个ExcelIntentor,ExcelIntentor其实就是Request对象的一个Decorator,装饰器模式的封装,应该叫ExcelIntentDecorator,太长了,所以少写点,改名为ExcelIntentor。Intent里面就是一个Request而已。

然后我在 ExcelIntentor里面调用, excel = ExcelUtils.httpInput(request);,把上传的Excel的数据直接解析为ExcelSet的对象,文件没有保留直接扔掉了。

然后将ExcelSet对象,返还给 excel/index.html的javascript。然后这个对象被保存在store.js里面

然后弹出一个窗口,写入要导入的表名。提交表名和刚刚保存在store.js里面的ExcelSet对象。

提交到TableScene(就是TableServlet),在TableScene里面我吧ExcelSet变成可以看的html。装饰一下返还给index.html,其中还把表名的对应的表结构给取出来,组成一个可以拖拽的html,

最后一步,可以拖拽表里面的字段,到excel的数据表格字段的下面,进行数据绑定,表明数据库表里面的那一列对应excel的那一行。。然后提交后,插入数据库。


--- 共有 3 条评论 ---
Brin想写程序回复 @281165273 : 看楼主的具体需求和业务场景吧。我这边只是给他一个例子而已。50页的excel,应该不太多。 4年前 回复
281165273看他说的导入的excel数据量不小,全部解析出来放到内存不太好吧。我感觉这个直接导入就存进数据库就可以,注意批量提交。然后直接读出来给操作人员增删改查,反正数据库最后的结果也是跟确认的是一样的。 4年前 回复
YOTOO多谢 Brin,回答的太详细啦,正在读你的代码。。。。 4年前 回复

千万不要把这种类型的数据存储到session中,你可以全部出去然后序列化,或者说直接把文件存在临时文件夹中,要读取的时候,就直接读取文件,一直到保存后再删除文件。至于你说的存在lucene中,个人觉得不是个明智的选择,更不要说存在session中了。

--- 共有 1 条评论 ---
YOTOO1.全部出去然后序列化:不太明白,指的是存到临时表吗? 2.存到临时文件夹中:导入的Excel文件大概有10W条,这些信息都是要经过检查后才可以导入数据库,也就是说,在插入数据库之前,可能对这些数据进行增删改查的操作。如果需要修改其中一条数据,需要在整个临时文件中去找这条记录,然后修改后,再重新组合成临时文件;另外这个还需要分页功能,我想这样效率应该会很低。不知是否还有其他方案 ,多谢! 4年前 回复

推荐你了解store.js工具

http://www.oschina.net/p/store-js

我在项目里面使用了,类似你的业务场景,感觉不错。

而且你说的excel导入导出功能。我正好有个实现。如果你需要,可以留个邮箱,我发给你。

--- 共有 4 条评论 ---
Brin想写程序回复 @YOTOO : 已经回复你的邮件了。要不我在下面贴一下邮件内容吧。 4年前 回复
YOTOO回复 @Brin想写程序 : 多谢你的代码,能大概说一下你的处理逻辑吗?有些代码没看太懂 4年前 回复
Brin想写程序回复 @YOTOO : 已发送 4年前 回复
YOTOO太好啦,发给我参考以下吧,多谢Brin!yotoo#live.com,把#换成·就可以拉。再次感谢 4年前 回复
顶部