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();
兩數之差
就是佔用答內存