java如何读取1千万级别的数据

java如何读取1千万级别的数据,第1张

如果数据很庞大的情况,估计没有人会直接使用

select * from table

select * from table limit 100000012

之类的SQL语句,这样的 *** 作别说数据库的 *** 作很慢了,在网络IO传输也是一个很大的问题,

把一千万的数据读取出来在网络进行传输,这样性能消耗也会有瓶颈。

所以,读取大批量的数据一般都是采用分批次的读取方式。

(一)通过测试,一万条数据一次性读取出来所花费的时间要比分十次,每次读1千数据的速度要慢很多。

(二),主键是uuid,可以进行排序,利用排序和比较值的大小来分批读取数据。

SELECT * FROM `kw_seo_keyword` as t

WHERE t.id >'31baf874-0fc5-4bb0-82ff-7bc77c6b63f5'

ORDER BY t.id

LIMIT 10001234

每一次,读取一千条数据,然后取这一千条数据的有序集合的最后一条数据的id,在进行大小的比较。如此反复,直到数据读取完为止。

(三),安全性的考虑,执行上千万的数据,有时候程序出现异常,结果修改异常后再重新这上千万的数据,那就太蛋疼了。所以我们分批次处理数据的时候。

比如说,我们每次读取一千条数据,等集合的数据超过100万的时候,就处理数据,然后通过一个redis的key来保存最后一次的id。

页面乱码

这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可

代码如下

<%@

page

contentType="text/html

charset=gb2312"

language="java"

import="java.sql.*"

errorPage="err.jsp"

%>

数据库乱码

这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,

解决方法如下:

在数据库连接字符串中加入编码字符集

代码如下

String

Url="jdbc:mysql://localhost/digitgulf?user=root&password=root&useUnicode=true&characterEncoding=GB2312"

并在页面中使用如下代码:

代码如下

response.setContentType("text/htmlcharset=gb2312")

request.setCharacterEncoding("gb2312")

URL传值乱码

方法一:

1.

在b.jsp中把pageEncoding="GB2312"改为pageEncoding="ISO8859-1"

虽然这样b.jsp页面显示的内容还是乱码,但是不是那种“??????”的乱码,而是一些特殊字符

2.

然后在浏览器中查看菜单中修改成GB2312的编码,这时乱码就显示中文了。

3.

但是这种方法是不可行的。

方法二:

1.

在b.jsp中把

代码如下

String

name=request.getParameter("name")

修改为

代码如下

String

name=new

String(request.getParameter("name").getBytes("ISO-8859-1"),"GB2312")

2.

这时再在页面上显示,则就是中文了。

千万条数据是用SQL的。

1.真正做过几个项 目才会明白,写sql语句会比编程代码还要多。真正的程序,其实是sql。 最后说一句,如果经验足够丰富,写出的统计过程,其执行时间在数分钟甚至几个小时都是正常的。

2.在SQL语句中实现通常效率更高,因为在java代码中往往会损耗很大性能。比如一个最简单的场景A表100W,B表100W,他们连接的结果是1000条数据。那么在SQL里面做连接 *** 作的话,数据库和java程序之间只需要传递1000条数据。如果在Java代码里面实现数据库和Java程序之间需要传递200W条数据。

3.从这个简单的场景可以看到,徒增了传输的性能损耗。并且占据了更多应用进程的内存和CPU资源,所以大部分场景下建议是在SQL里面处理比较优。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6693188.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存