客户端上传文件直接写到内存了?

bukebuhao 2008-04-27 11:48:57
从客户端里上传文件,读出文件内容,然后写到数据库里,我直接把文件内容写到内存里,用数组保存下来,然后遍历数组更新数据库。如果数据量大了,将会出现什么问题呢?有没有好点的解决方式?当数据量很大了,我现在做的客户数据量不是很大,最多也就是几兆,即能不用写到临时文件里面,也不用担心内存会溢出,也可能就是速度奇慢的? 或处理这类问题,有没有其他的方案,就是读取文件的内容,更新到数据库里?
...全文
247 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiasys001 2011-05-17
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 zhmilo 的回复:]

对于大量的数据的话,你可以采用db4o来做缓存,然后在系统间歇的时候,再将db4o中的数据写到别的关系型数据库中。
[/Quote]

如何将db4o中的数据写到别的关系型数据库?
wensheng_zh2007 2008-04-29
  • 打赏
  • 举报
回复
^_^jf^_^
milo-higgs 2008-04-29
  • 打赏
  • 举报
回复
对于大量的数据的话,你可以采用db4o来做缓存,然后在系统间歇的时候,再将db4o中的数据写到别的关系型数据库中。
chensjmail 2008-04-29
  • 打赏
  • 举报
回复
你不写数据库,也不生成临时文件,你总要生成一个上传后的文件吧,要不你上传做什么呀,
即然要生成一个文件,那就边上传边生成咯,用一个缓冲流就可以了。
其它的不用考虑。
shili150 2008-04-29
  • 打赏
  • 举报
回复
大数据量的话就一边读一遍写

如果小的话就更好办了

用一个jspsmartupload组件上传或是下载都行
胡矣 2008-04-28
  • 打赏
  • 举报
回复
还是用个上传组件放到服务器的硬盘上吧
数据库中写一个目录
这样是否能好些
East271536394 2008-04-27
  • 打赏
  • 举报
回复

看下我这个代码

import java.sql.*;
import java.io.*;
public class Mp3Test{
public static Connection con=null;
public static PreparedStatement ps=null;
public static void main(String[] args){
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=pubs";
con=DriverManager.getConnection(url,"sa","");

InputStream in=new FileInputStream("f:/1.mp3");
String sql="insert into [Table] values(?)";
ps=con.prepareStatement(sql);
ps.setBinaryStream(1,in,in.available());
System.out.println("insert into Database");
ps.executeUpdate();


OutputStream out=new FileOutputStream("c:/2.mp3");
String sql1="select * from [Table]";
ps=con.prepareStatement(sql1);
ResultSet rs=ps.executeQuery();
rs.next();
InputStream in1=rs.getBinaryStream(2);
byte [] buffer=new byte[1024*2];
int length=0;

while((length=(in1.read(buffer,0,buffer.length)))!=-1){
out.write(buffer,0,buffer.length);
}
System.out.println("ok");
rs.close();
ps.close();
con.close();


}catch(ClassNotFoundException ce){
ce.printStackTrace();
}catch(SQLException se){
se.printStackTrace();
}catch(IOException ie){
ie.printStackTrace();
}

}
}
搞懂了就差不多了
kokobox 2008-04-27
  • 打赏
  • 举报
回复
我一般都写到数据库

写错了,改成:

我一般都不写到数据库
kokobox 2008-04-27
  • 打赏
  • 举报
回复
lz 对于大文件大数据,我是这样处理的,我一般都写到数据库,除非用户要手工书写,但是一般用户手工书写我们也限制在5k---7k之间,就像csdn这样的显示


剩下的就是用户文件上传,一般我们都是把文件保存在服务器目录中,不保存在数据库中,这样如果用想看到文件的话,我们给连接或让用户下载

这样速度会快很多。

剩下就是一些其他的处理,如果我没说明白或是lz没理解的话 可以再联系我

Shine_Panda 2008-04-27
  • 打赏
  • 举报
回复
我们在处理大文件的时候一般是定义一个数组 作为缓存 如: byte[] buff = new buffer[1024*1024];
然后循环读取 ,边读边写(可以是写到文件,也可以是写到数据库). 这样不管你的文件有多大(当然不能比你的硬盘还要大)
都可以把他 分割成 buff.lenght 大小. 如果要控制性能 实际上就是要控制 buff的大小.

代码: 可以参看一下.http://blog.csdn.net/caoyinghui1986/archive/2008/04/05/2252772.aspx
bukebuhao 2008-04-27
  • 打赏
  • 举报
回复
不是我能看懂,我只是想找一个适合的方法,也不一定是读取大数据量的文件。目前客户的文件内容不大,写到内存里应该是可以吧,我只是想多了解一下各种方法的 优缺点,最好有各种方法的详细分析,比较,不是看代码如何实现,而是实现的思路?
nanjg 2008-04-27
  • 打赏
  • 举报
回复
commonupload虽然没有提供很多API,但是它有比较灵活,它上传的过程中会把上传的文件先写入磁盘,所以上传的大小只是带宽有关系
nanjg 2008-04-27
  • 打赏
  • 举报
回复
你用的是commonupload么 这个好1点
kokobox 2008-04-27
  • 打赏
  • 举报
回复
如果数据量太大了,全部写到内存容易内存溢出,lz可以看一看nio包的一些类和方法

大数据的数据库读写网上也有很多的例子,lz google一下就一大把,很多的,也很容易看懂。
KKK2007 2008-04-27
  • 打赏
  • 举报
回复
不一定都一下读到内存中在向数据库里写,你可以边读边往数据库里写,缓存设置的合理的话就每问题的。
bukebuhao 2008-04-27
  • 打赏
  • 举报
回复
另外告诉大家的就是,数据量很小,只有几兆而已,不是处理大数据量的问题,只是想探讨一下,处理这类问题的一般的方法。大家提的,我都会总结一下的,提的好的,我会多多给分的。
我是风 2008-04-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sigmod 的回复:]
可以分批写吧,
1。一个线程接收客户端输入,保存到内存
2。另一个线程定期把内存里的数据写到数据库,也可以根据数据流的速度动态调整写数据库的周期

如果没那么大,1G以内,改下虚拟机参数就可以吧
[/Quote]
sigmod 2008-04-27
  • 打赏
  • 举报
回复
可以分批写吧,
1。一个线程接收客户端输入,保存到内存
2。另一个线程定期把内存里的数据写到数据库,也可以根据数据流的速度动态调整写数据库的周期

如果没那么大,1G以内,改下虚拟机参数就可以吧

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧