2

在我的应用程序中,我必须读取大量数据。获得所有数据后,我将其放入列表中并对其进行处理并相应地工作。

现在我想知道我是否可以做任何事情来加快从数据库过程中获取数据的速度?我的数据库位于不同的服务器上,我正在使用 java 与数据库进行交互。

我没有确定的数据大小,即我需要处理的特定行数。另外我听说我可以使用多线程,但那该怎么做呢?因为我不知道如何对我的数据进行分区,因为它是不确定的。即如果要应用以下伪代码

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

或者,也许我可以根据某些属性散列数据,然后告诉每个线程获取映射的特定索引,但是在获取数据之前如何映射它?

我可以研究哪些所有可能的解决方案,我该怎么做?如果您需要更多信息,请告诉我。

谢谢。

4

1 回答 1

4

我听说我可以使用多线程,但那该怎么做呢?

这绝对是加快从远程服务器查询信息的好选择。
通常在这些任务中 - 与服务器的 IO 是主要瓶颈,并且通过多线程 - 可以同时“请求”多行 - 有效地减少 IO 等待时间。

但那怎么办呢?

这个想法是将工作分成更小的任务。查看 java高级并发 API了解更多详细信息。
一种解决方案是让每个线程从服务器读取一块大小M,并在每个线程(服务器)中仍有数据时重复该过程。类似的东西(对于每个线程):

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

我在这里假设一旦您“越界”,服务器就会返回null(或requestChunk()处理它并返回 null)。

或者,也许我可以根据某些属性散列数据,然后告诉每个线程获取地图的特定索引

如果您需要迭代数据并检索所有数据 - 散列通常是一个糟糕的解决方案。它的缓存效率非常低,对于这种情况来说开销太大了。

于 2012-08-23T06:18:42.923 回答