java查询大数据数据库
这样每次去读取上百万条数据,不崩掉才怪,
我的想法是,你分批去查,然后分批导出,
类似于分页,每1000 或者更多为一批
按批次去执行,然后做一个进度条,按有多少批次为进度数进行导出
这样应该会好很多
还可以做个缓存机制,按批次进行存储,下次拿数据就直接从缓存中获取
Ⅱ 有关数据库中庞大数据量查询的问题!
遍历一遍?你是搞c的吧?
晕死,搞数据库的和搞c的果然有一道鸿沟,语言说不到一起去,如果是你要求的目的,其实很简单
首先,索引是必须的,这可以减少大量的查询时间,至于是否重复,各个数据库有不同的语法,这里只说通用写法,而不说个别数据库的专用写法
比如说有一张表users,里面存了所有人的人员信息,其中,姓名,性别,年龄,出身时间几个字段不能完全相同,最简单的方法就是将这几个字段设为唯一索引,好处是如果出现重复会自动停止报错,坏处是如果你有大量操作的话,可能会因为报错,整个作业都停下来
第二种方法,将这几个字段拼起来进行存在性判断,将不存在的插入
比如将user1的数据插入user2,且都有主键user_id,最简单的防止重复手段是
insert into user2 select * from user1 where user_id not in (select user_id from user2)
这种解决办法的写法很多,但是大多数属于专用的,不是所有数据库都能用的,比如 insert into user2 select * from user1 except select * from user2
这是很少有数据库能用的专用语句
当然,这种写法虽然通用,性能不是如何好
第三种是比较特殊的,需要写过很长时间语句的人才能写出来,为什么这么写我很难解释清楚,但是性能提高很多,这里举个例子。
insert into user2
select a.* from user1 a left join user2 b on a.user_id=b.user_id
where b.user_id is null
Ⅲ java数据库一次性取出大数据量的数据用arraylist还是linklist
取出大数据量的数据和用arraylist还是linklist没有任何关系!
看你的关注点在哪里,如果数据量够大回,你要考虑查询答时间会不会太长,你能不能接受
ArrayList和LinkList的区别是底层数据结构不一样。
ArrayList底层用得是数组,查询快。
LinkedList底层是自定义数据体,增删快。
所以你要如何处理这个数据,可以根据不同的特别来决定使用哪一个?
如果仅仅只是作为一个接收体,并不对数据做任何处理,那么两者都一样
Ⅳ java如何查询大数据
我正在学习java 感觉楼上说的非常对 ,希望可以帮到你!
Ⅳ java使用哪种框架解决数据库查询频繁
如果说框架的话,使用的比较频繁的是Hibernate,它不仅能够查询数据库,还能够进行插入更新删除等操作
Ⅵ 如何用java jdbc 向数据库表插入大数据量
一次性插入大量数据,只能使用循环,
如:游标,while 循环语句
下面介绍While 循环插入数据,
SQL 代码如下:
IF OBJECT_ID('dbo.Nums') IS NOT NULL
DROP TABLE dbo.Nums;
GO
CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);
DECLARE @max AS INT, @rc AS INT;
SET @max = 5000000;
SET @rc = 1;
INSERT INTO Nums VALUES(1);
WHILE @rc * 2 <= @max
BEGIN
INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;
SET @rc = @rc * 2;
END
INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max;
--以上函数取自Inside SQL Server 2005: T-SQL Query一书。
INSERT dbo.Sample SELECT n, RAND(CAST(NEWID() AS BINARY(16))) FROM Nums
Ⅶ 如何在大数据结果集下查询
如果你检出一个大的数据结果集,你应当使用EntityListIterator通过迭代方式读取数据,而非List.
示例,如果你使用:
List procts = delegator.findAll("Proct");
你可能获得一个"java.lang.OutOfMemoryError".这是由于你通过findAll, findByAnd,
findByCondition等方法来获得一个大的内存数据结果集导致内存溢出.在这种情况下,
应该使用EntityListIterator迭代方式来读取你的数据. 这个示例应改写成:
proctsELI = delegator.findListIteratorByCondition("Proct", new
EntityExpr("proctId", EntityOperator.NOT_EQUAL, null),
UtilMisc.toList("proctId"), null);
注意获得EntityListIterator的方法只用通过条件, 所以你需要将你的条件重写为EntityExpr
(在此次情况下,proctId是主键字段不可能为空的, 所以将返回所有Proudct实例,)或 EntityConditionList.
此方法参数中包含检出的字段(这里为proctId)以及排序字段(这里不需要,所以赋了null)
你可以传递一个null作为EntityCondition参数来获得所有结果.然后这不一定在所有数据库下都能正常工作!在maxdb及其它不常用的数据库下时你要小心使用这些高级功能.
* 如何使用EntityListIterator
当我们通过EntityListIterator迭代访问数据时, 通常是这样:
while ((nextProct = proctsELI.next()) != null) {
.
//
operations on nextProct
}
在EntityListIterator 中使用 .hasNext()方法是一种不经济的做法.
在你完成你的操作后,要记得关闭此迭代
proctsELI.close();
Ⅷ JAVA开源大数据查询分析引擎有哪些方案
大数据查询分析是云计算中核心问题之一,自从Google在2006年之前的几篇论文奠定云计算领域基础,尤其是GFS、Map-Rece、 Bigtable被称为云计算底层技术三大基石。GFS、Map-Rece技术直接支持了Apache Hadoop项目的诞生。Bigtable和Amazon Dynamo直接催生了NoSQL这个崭新的数据库领域,撼动了RDBMS在商用数据库和数据仓库方面几十年的统治性地位。FaceBook的Hive项 目是建立在Hadoop上的数据仓库基础构架,提供了一系列用于存储、查询和分析大规模数据的工具。当我们还浸淫在GFS、Map-Rece、 Bigtable等Google技术中,并进行理解、掌握、模仿时,Google在2009年之后,连续推出多项新技术,包括:Dremel、 Pregel、Percolator、Spanner和F1。其中,Dremel促使了实时计算系统的兴起,Pregel开辟了图数据计算这个新方 向,Percolator使分布式增量索引更新成为文本检索领域的新标准,Spanner和F1向我们展现了跨数据中心数据库的可能。在Google的第 二波技术浪潮中,基于Hive和Dremel,新兴的大数据公司Cloudera开源了大数据查询分析引擎Impala,Hortonworks开源了 Stinger,Fackbook开源了Presto。类似Pregel,UC Berkeley AMPLAB实验室开发了Spark图计算框架,并以Spark为核心开源了大数据查询分析引擎Shark。由于
Ⅸ java访问数据库返回大数据量的性能问题
首先回答1、2的问题:
> executeQuery(strSql);主要是消耗DB服务器上的内存
> while(rs.next)是消耗WEB服务器上的内存
对于500W条数据,不论版DB服务器还权是WEB服务器,都会消耗很多内存.
3、“取一条记录,保存一条记录到文件中”:这样做会在一定程度上会节约很多内存(在500W条数据时会很明显),但是在取操作上可能会麻烦点,增加了复杂度,在实际运用中要看项目的具体取舍。
Ⅹ java如何查看有哪些大数据占用
首先加入一个静态方法:
public
static
long
getmemory()
{
return
runtime.getruntime().freememory();
}
这个是查看运行时空闲内存的语句。
线程启动前
long
point1
=
getmemory();
线程调回用
long
point2
=
getmemory();
两数之差
就是占用答内存