簡體   English   中英

以最有效的方式從數據庫中獲取大量數據

[英]Getting a huge amount of data from database in the most efficient way

在我的應用程序中,我必須閱讀大量數據。 獲得所有數據后,我將其放入列表並對其進行處理並相應地進行操作。

現在我想知道我是否可以做任何事情,加速從數據庫進程獲取數據的任何事情? 我的數據庫位於不同的服務器上,我正在使用java與數據庫進行交互。

我沒有一定數量的數據,即我需要處理的特定行數。 另外我聽說我可以去多線程,但那怎么辦呢? 因為我不知道如何對我的數據進行分區,因為它是無限期的。 即,如果要應用以下偽代碼

for(i=0 to number of partition) // Not certain on the number of partitions
    create new thread and get data.

或者我可以在某些屬性的基礎上散列數據,然后告訴每個線程獲取地圖的特定索引,但是如何在獲取數據之前映射它?

我可以研究所有可能的解決方案,我該如何解決這個問題? 如果您需要更多信息,請告訴我。

謝謝。

我聽說我可以去多線程,但那怎么辦呢?

這絕對是加速從遠程服務器查詢信息的好選擇。
通常在這些任務中 - 服務器的IO是主要的瓶頸,通過多線程 - 可以同時“請求”多行 - 有效地減少IO等待時間。

但那怎么辦呢?

我們的想法是將工作分成更小的任務。 有關更多詳細信息,請查看Java 高級並發API
一種解決方案是讓每個線程從服務器讀取一個大小為M的塊,並在其中仍有數據(服務器)時為每個線程重復該過程。 類似的東西(對於每個線程):

data = "start";
int chunk = threadNumber;
while (data != null) {
  requestChunk(chunk);
  chunk += numberOfThreads;
}

我假設一旦你“超出界限”,服務器返回null (或者requestChunk()處理它並返回null)。

或者我可以在某些屬性的基礎上散列數據,然后告訴每個線程獲取地圖的特定索引

如果您需要迭代數據並檢索所有數據 - 散列通常是一個糟糕的解決方案。 緩存效率非常低,而且開銷對於這種情況來說太大了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM