在我的应用程序中,我必须阅读大量数据。获得所有数据后,我将其放入列表并对其进行处理并相应地进行操作。
现在我想知道我是否可以做任何事情,还有什么可以加速从数据库进程中获取数据?我的数据库位于不同的服务器上,我正在使用java与数据库进行交互。
我没有确定的数据大小,即我需要处理的特定行数。另外我听说我可以去多线程,但那怎么办呢?因为我不知道如何对我的数据进行分区,因为它是无限期的。即如果要应用以下伪代码
for(i=0 to number of partition) // Not certain on the number of partitions
create new thread and get data.
或许我可以在某些属性的基础上散列数据,然后告诉每个线程获取地图的特定索引,但是如何在获取数据之前映射它?
我可以研究所有可能的解决方案,我该如何解决?如果您需要更多信息,请与我们联系。
感谢。
答案 0 :(得分:3)
我听说我可以选择多线程,但那怎么办呢?
这绝对是加速从远程服务器查询信息的好选择。
通常在这些任务中 - 服务器的IO是主要的瓶颈,通过多线程 - 可以同时“请求”多行 - 有效地减少IO等待时间。
但是怎么办呢?
这个想法是将工作分成更小的任务。有关更多详细信息,请查看java high level concurrency API。
一种解决方案是让每个线程从服务器读取一个大小为M
的块,并在其中仍有数据(服务器)时为每个线程重复该过程。类似的东西(对于每个线程):
data = "start";
int chunk = threadNumber;
while (data != null) {
requestChunk(chunk);
chunk += numberOfThreads;
}
我假设一旦你“超出界限”,服务器返回null
(或requestChunk()
处理它并返回null)。
或许我可以根据某些属性对数据进行哈希处理,然后告诉我 每个线程来获取地图的特定索引
如果您需要迭代数据并检索所有数据 - 散列通常是一个糟糕的解决方案。缓存效率非常低,而且这种情况下的开销太大了。