我正在创建一个需要收集大量数据、将数据处理为对象并将对象作为列表返回的 java 应用程序。
收集的所有数据都来自我数据库中的不同表(有些是连接的,但它们都是不同的 SQL 调用)
我正在考虑通过不同的线程获取这些数据,但是由于多个线程不能使用相同的连接来访问数据库中的数据,我必须为每个线程创建一个新连接。
我的问题是:同时访问和处理数据库中的多个数据的最佳方法是什么?
我正在创建一个需要收集大量数据、将数据处理为对象并将对象作为列表返回的 java 应用程序。
收集的所有数据都来自我数据库中的不同表(有些是连接的,但它们都是不同的 SQL 调用)
我正在考虑通过不同的线程获取这些数据,但是由于多个线程不能使用相同的连接来访问数据库中的数据,我必须为每个线程创建一个新连接。
我的问题是:同时访问和处理数据库中的多个数据的最佳方法是什么?
如果您有足够的内存,我会使用同步到数据库的完整二级更改。使用缓存使其速度非常快。如果您在服务器/客户端上没有足够的内存,您可以在 sqlserver 上缓存您的查询,并使用一个包含查询中的所有值的表,并且该表每秒更新一次。
否则,您可以使用带有线程的线程池,它将查询结果插入到结果的共享对象中。
理想情况下,数据库应该以这样一种方式设计,即您应该能够在单个查询中获取所有相关数据(可能使用 JOINS)。不确定在您的情况下是否可以实现。
有三个可行的选项,您已经尝试过创建多个线程并获取数据。我将只为该方法添加一个输入,您可以尝试以防优化。创建 Data Fetcher 线程以从不同的表中获取数据,并创建一个 Data Processor 线程来处理 Data Fetcher 线程获取的数据。
或者
第二种方法是创建一个存储过程,它将直接在数据库上运行并可以为您进行一些数据处理。这将避免在您的 java 代码中创建太多线程并进行大量处理。
或者
混合这两种方法以获得最佳结果。
祝你好运!
我正在使用Spring framework
。假设存在声明所有常量的 ModelBean 类。在 ModelBean 中,类名是声明的字段。
public class CurriculumReportDaoImpl extends JdbcDaoSupport{
public List<String> fetchList(){
String query="";
List<ModelBean > tempList=new ArrayList<ModelBean >();
List<Map<String,Object>> record = getJdbcTemplate().queryForList(query);
for(Map<String,Object> result=record){
/*create new instance of ModelBean*/
model=new ModelBean();
/*"name" is the column name which are fetch from db*/
model.setName(result.get("name").toString);
/*now set model in tempList*/
tempList.add(ModelBean );
}
return tempList;
}
}
如果你有很多连接那么你可以在这里创建很多 List 并设置到 ModelBean 类中。我想这会对你有所帮助。