`
hyw520110
  • 浏览: 223648 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ibatis 学习笔记(一) 批量处理 存储过程

    博客分类:
  • java
阅读更多
Java代码 复制代码
  1. /*  
  2. *在项目中,遇到这样的一个问题,当某一模块需要插入,更新一批大的数据量时,  
  3. *此处大的含义是:更新到的数据记录比较多  
  4. *用ibatis实现一条一条的插入,更新,如此循环下去。速度很慢  
  5. *分析:  
  6. * 这些操作有个共同点:  
  7. * PreparedStatement对象和已映射的语句完全一致(简单点说:就是操作不断重复)  
  8. * 由于事物是交给spring管理了,所以每做一次操作都会起一个事物,久而久之导致  
  9. * 性能问题。  
  10.  
  11. * batch批处理就适合那些查询,插入,更新,删除等大量重复的操作  
  12. *  
  13. * 存储过程也比较适合这样的场合,但要求很多   
  14. * 批处理 是把 所有sql语句  放入一块内存中,然后一次性全部写到服务器,这个节省了客* 服端到服务器的访问时间  
  15. */  
  16. -- Create table   
  17. create or replace table DEMO   
  18. (   
  19.   UUID      NUMBER,   
  20.   UUSER     VARCHAR2(50),   
  21.   UPASSWORD VARCHAR2(50)   
  22. )   
  23.   
  24. --Insert a million records with the DEMO procedure   
  25. create or replace procedure demo_p(total in integer) AS   
  26. uuid number :=1;   
  27. uuser varchar2(50) := 'user';   
  28. upassword varchar2(50) :='password';   
  29. begin   
  30. loop     
  31.   insert into demo(uuid,uuser,upassword) values(uuid,uuser||uuid,upassword||uuid);   
  32.   uuid := uuid + 1;   
  33.   exit when uuid >= total;   
  34. end loop;   
  35. end;   
  36.   
  37. ---Clear table then call procedure to insert a million records    
  38. truncate table demo;   
  39. call demo_p(1000);   
  40. select * from demo;   
  41.   
  42. --Java实现   
  43. --1--ibatis普通实现插入一百条条数据--   
  44.   
  45. --2--ibatis批量插入一百万条数据--   
  46.   
  47. --3--ibatis调用存储过程插入一百万条数据--  
/*
*在项目中,遇到这样的一个问题,当某一模块需要插入,更新一批大的数据量时,
*此处大的含义是:更新到的数据记录比较多
*用ibatis实现一条一条的插入,更新,如此循环下去。速度很慢
*分析:
* 这些操作有个共同点:
* PreparedStatement对象和已映射的语句完全一致(简单点说:就是操作不断重复)
* 由于事物是交给spring管理了,所以每做一次操作都会起一个事物,久而久之导致
* 性能问题。
* 
* batch批处理就适合那些查询,插入,更新,删除等大量重复的操作
*
* 存储过程也比较适合这样的场合,但要求很多 
* 批处理 是把 所有sql语句  放入一块内存中,然后一次性全部写到服务器,这个节省了客* 服端到服务器的访问时间
*/
-- Create table
create or replace table DEMO
(
  UUID      NUMBER,
  UUSER     VARCHAR2(50),
  UPASSWORD VARCHAR2(50)
)

--Insert a million records with the DEMO procedure
create or replace procedure demo_p(total in integer) AS
uuid number :=1;
uuser varchar2(50) := 'user';
upassword varchar2(50) :='password';
begin
loop  
  insert into demo(uuid,uuser,upassword) values(uuid,uuser||uuid,upassword||uuid);
  uuid := uuid + 1;
  exit when uuid >= total;
end loop;
end;

---Clear table then call procedure to insert a million records 
truncate table demo;
call demo_p(1000);
select * from demo;

--Java实现
--1--ibatis普通实现插入一百条条数据--

--2--ibatis批量插入一百万条数据--

--3--ibatis调用存储过程插入一百万条数据--





1--构建环境 添加 classes12.jar ibatis-2.3.4.726.jar

2--写好ibatis基本配置文件,公共资源文件

SqlMapConfig.properties

Java代码 复制代码
  1. # DB Config    
  2. driver=oracle.jdbc.driver.OracleDriver   
  3. url=jdbc:oracle:thin:@localhost:1521:orcl   
  4. username=scott   
  5. password=tiger  
# DB Config 
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=scott
password=tiger



SqlMapConfig.xml

Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE sqlMapConfig   
  3. PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"  
  4. "http://www.ibatis.com/dtd/sql-map-config-2.dtd">   
  5. <!-- Always ensure to use the correct XML header as above! -->   
  6. <sqlMapConfig>   
  7.     <properties  resource = "com/oyp/sqlmap/SqlMapConfig.properties" />   
  8.        
  9.     <settings  cacheModelsEnabled="true" enhancementEnabled="true"  
  10.         lazyLoadingEnabled="true" maxRequests="32" maxSessions="10"  
  11.         maxTransactions="5" useStatementNamespaces="false" />   
  12.        
  13.     <transactionManager type = "JDBC">   
  14.         <dataSource type  = "SIMPLE">   
  15.             <property name="JDBC.Driver" value="${driver}" />   
  16.             <property name="JDBC.ConnectionURL" value="${url}" />   
  17.             <property name="JDBC.Username" value="${username}" />   
  18.             <property name="JDBC.Password" value="${password}" />   
  19.         </dataSource>   
  20.     </transactionManager>   
  21.     <sqlMap resource = "com/oyp/sqlmap/User.xml"/>   
  22.        
  23. </sqlMapConfig>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<!-- Always ensure to use the correct XML header as above! -->
<sqlMapConfig>
	<properties  resource = "com/oyp/sqlmap/SqlMapConfig.properties" />
	
	<settings  cacheModelsEnabled="true" enhancementEnabled="true"
		lazyLoadingEnabled="true" maxRequests="32" maxSessions="10"
		maxTransactions="5" useStatementNamespaces="false" />
	
	<transactionManager type = "JDBC">
		<dataSource type  = "SIMPLE">
			<property name="JDBC.Driver" value="${driver}" />
			<property name="JDBC.ConnectionURL" value="${url}" />
			<property name="JDBC.Username" value="${username}" />
			<property name="JDBC.Password" value="${password}" />
		</dataSource>
	</transactionManager>
	<sqlMap resource = "com/oyp/sqlmap/User.xml"/>
	
</sqlMapConfig>




3--dto层,或者说是model层
User.java

Java代码 复制代码
  1. package com.oyp.model;   
  2.   
  3. import java.io.Serializable;   
  4. /**  
  5.  * @author oyp 2009-12-14  
  6.  */  
  7. public class User implements Serializable {   
  8.     private static final long serialVersionUID = 2804032598967813289L;   
  9.     private int id;   
  10.     private String name;   
  11.     private String password;   
  12.     public String getPassword() {   
  13.         return password;   
  14.     }   
  15.     public void setPassword(String password) {   
  16.         this.password = password;   
  17.     }   
  18.     public int getId() {   
  19.         return id;   
  20.     }   
  21.     public void setId(int id) {   
  22.         this.id = id;   
  23.     }   
  24.     public String getName() {   
  25.         return name;   
  26.     }   
  27.     public void setName(String name) {   
  28.         this.name = name;   
  29.     }   
  30.        
  31. }  
package com.oyp.model;

import java.io.Serializable;
/**
 * @author oyp 2009-12-14
 */
public class User implements Serializable {
	private static final long serialVersionUID = 2804032598967813289L;
	private int id;
	private String name;
	private String password;
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}





4--sqlmap映射文件

Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2.   
  3. <!DOCTYPE sqlMap    
  4.     PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"    
  5.     "http://www.ibatis.com/dtd/sql-map-2.dtd">   
  6.        
  7.     <sqlMap namespace = "user" >   
  8.         <typeAlias alias = "user" type = "com.oyp.model.User"/>   
  9.         <insert id = "insert_user" parameterClass = "user" >   
  10.           INSERT INTO DEMO (UUID, UUSER, UPASSWORD) VALUES ( #id#,#name#, #password# )   
  11.         </insert>   
  12.            
  13.         <update id = "clear_user" >   
  14.                 truncate table demo   
  15.         </update>   
  16.              
  17.           <parameterMap id="oypmap" class="java.util.Map">   
  18.             <parameter property="total" javaType="int" jdbcType="INTEGER" mode="IN" />   
  19.          </parameterMap>   
  20.          <procedure id="procedureoyp" parameterMap="oypmap"  >   
  21.             { call demo_p(?) }   
  22.          </procedure>    
  23.     </sqlMap>  
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE sqlMap 
    PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
    "http://www.ibatis.com/dtd/sql-map-2.dtd">
    
    <sqlMap namespace = "user" >
        <typeAlias alias = "user" type = "com.oyp.model.User"/>
     	<insert id = "insert_user" parameterClass = "user" >
     	  INSERT INTO DEMO (UUID, UUSER, UPASSWORD) VALUES ( #id#,#name#, #password# )
     	</insert>
     	
     	<update id = "clear_user" >
				truncate table demo
     	</update>
     	  
     	  <parameterMap id="oypmap" class="java.util.Map">
			<parameter property="total" javaType="int" jdbcType="INTEGER" mode="IN" />
		 </parameterMap>
     	 <procedure id="procedureoyp" parameterMap="oypmap"  >
			{ call demo_p(?) }
		 </procedure> 
    </sqlMap>



5--DAO层

Java代码 复制代码
  1. package com.oyp.dao;   
  2.   
  3. import java.sql.SQLException;   
  4.   
  5. import com.ibatis.sqlmap.client.SqlMapClient;   
  6. import com.oyp.model.User;   
  7.   
  8. public class UserDAO {   
  9.        
  10.     public static SqlMapClient sqlMap = AppSqlConfig.getSqlMap();   
  11.        
  12.     public static void insertUser(User user) throws SQLException {   
  13.         sqlMap.insert("insert_user",user);   
  14.     }   
  15.     public static void clearTable()  {   
  16.         try {   
  17.             sqlMap.update("clear_user");   
  18.         }catch (SQLException e) {   
  19.             e.printStackTrace();   
  20.         }   
  21.     }   
  22. }  
package com.oyp.dao;

import java.sql.SQLException;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.oyp.model.User;

public class UserDAO {
	
	public static SqlMapClient sqlMap = AppSqlConfig.getSqlMap();
	
	public static void insertUser(User user) throws SQLException {
		sqlMap.insert("insert_user",user);
	}
	public static void clearTable()  {
		try {
			sqlMap.update("clear_user");
		}catch (SQLException e) {
			e.printStackTrace();
		}
	}
}



5--获取封装数据库信息的Ibatis对象

Java代码 复制代码
  1. package com.oyp.dao;   
  2.   
  3. import java.io.IOException;   
  4. import java.io.Reader;   
  5.   
  6. import com.ibatis.common.resources.Resources;   
  7. import com.ibatis.sqlmap.client.SqlMapClient;   
  8. import com.ibatis.sqlmap.client.SqlMapClientBuilder;   
  9.   
  10. public class AppSqlConfig {   
  11.     private static final SqlMapClient sqlMap;   
  12.     static {   
  13.         try {   
  14.           Reader reader = Resources.getResourceAsReader("com/oyp/sqlmap/SqlMapConfig.xml");   
  15.           sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);   
  16.           reader.close();    
  17.         } catch (IOException e) {   
  18.           // Fail fast.   
  19.           throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);   
  20.         }   
  21.       }   
  22.     public static SqlMapClient getSqlMap() {   
  23.         return sqlMap;   
  24.     }   
  25.   
  26.   
  27. }  
package com.oyp.dao;

import java.io.IOException;
import java.io.Reader;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class AppSqlConfig {
	private static final SqlMapClient sqlMap;
	static {
	    try {
	      Reader reader = Resources.getResourceAsReader("com/oyp/sqlmap/SqlMapConfig.xml");
	      sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
	      reader.close(); 
	    } catch (IOException e) {
	      // Fail fast.
	      throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
	    }
	  }
	public static SqlMapClient getSqlMap() {
		return sqlMap;
	}


}




大公告成,等着测试下
休息................

开始测试

Java代码 复制代码
  1.   
  2. /**  
  3.  * 描述:一般处理  
  4.  * @author oyp 2009-12-15  
  5.  */  
  6. public class Main {   
  7.     public static int number =Util.number;   
  8.     public static void main (String[] args) throws SQLException {   
  9.         //清空表   
  10.         UserDAO.clearTable();   
  11.         //一般处理   
  12.         List<User> list = new ArrayList<User>();   
  13.         for (int i = 0 ; i < number; i++) {   
  14.             User tempuser = new User();   
  15.             tempuser.setId(i);   
  16.             tempuser.setName("user"+i);   
  17.             tempuser.setPassword("password"+i);   
  18.             list.add(tempuser);   
  19.         }   
  20.         //开始   
  21.         UserDAO.sqlMap.startTransaction();   
  22.         long begin = System.currentTimeMillis();   
  23.         for (int i = 0 ; i < number ; i++) {   
  24.             try {   
  25.                  UserDAO.insertUser(list.get(i));   
  26.             } catch (SQLException e) {   
  27.                 e.printStackTrace();   
  28.             }   
  29.         }   
  30.         UserDAO.sqlMap.commitTransaction();   
  31.         UserDAO.sqlMap.endTransaction();   
  32.         System.out.println(System.currentTimeMillis()-begin);   
  33.     }   
  34. }   
  35.   
  36.   
  37. /**  
  38.  * 描述:batch处理  
  39.  * @author oyp 2009-12-15  
  40.  */  
  41. public class MainBatch {   
  42.     public static int number =Util.number;   
  43.     public static void main (String[] args) throws SQLException {   
  44.         //清空表   
  45.         UserDAO.clearTable();   
  46.         //批量插入的对象   
  47.         List<User> list = new ArrayList<User>();   
  48.         for (int i = 0 ; i < number; i++) {   
  49.             User tempuser = new User();   
  50.             tempuser.setId(i);   
  51.             tempuser.setName("user"+i);   
  52.             tempuser.setPassword("password"+i);   
  53.             list.add(tempuser);   
  54.         }   
  55.         //批量处理开始   
  56.         long begin = System.currentTimeMillis();   
  57.         UserDAO.sqlMap.startTransaction();   
  58.         for (int i = 0 ; i < number ; i ++) {   
  59.             if (i % 10000 == 0) {   
  60.                 UserDAO.sqlMap.startBatch();   
  61.             }   
  62.             UserDAO.insertUser(list.get(i));   
  63.             if ((i+1) % 10000 ==0) {    
  64.                 UserDAO.sqlMap.executeBatch();   
  65.             }   
  66.         }   
  67.         UserDAO.sqlMap.executeBatch();   
  68.         UserDAO.sqlMap.commitTransaction();   
  69.         UserDAO.sqlMap.endTransaction();   
  70.         System.out.println(System.currentTimeMillis()-begin);   
  71.     }   
  72. }   
  73.   
  74. /*  
  75.  *描述:调用存储过程  
  76.  *@author oyp 2009-12-15  
  77.  */  
  78.   
  79.   
  80. public class MainProcedure {   
  81.     public static int number =Util.number;   
  82.     public static void main (String[] args) throws SQLException {   
  83.         //清空表   
  84.         UserDAO.clearTable();   
  85.         HashMap map = new HashMap();   
  86.         map.put("total", number);   
  87.         //调用存储过程   
  88.         long begin = System.currentTimeMillis();   
  89.         UserDAO.sqlMap.startTransaction();   
  90.         UserDAO.sqlMap.insert("procedureoyp",map);   
  91.         UserDAO.sqlMap.commitTransaction();   
  92.         UserDAO.sqlMap.endTransaction();   
  93.         System.out.println(System.currentTimeMillis()-begin);   
  94.     }   
  95.        
  96. }  
/**
 * 描述:一般处理
 * @author oyp 2009-12-15
 */
public class Main {
	public static int number =Util.number;
	public static void main (String[] args) throws SQLException {
		//清空表
		UserDAO.clearTable();
		//一般处理
		List<User> list = new ArrayList<User>();
		for (int i = 0 ; i < number; i++) {
			User tempuser = new User();
			tempuser.setId(i);
			tempuser.setName("user"+i);
			tempuser.setPassword("password"+i);
			list.add(tempuser);
		}
		//开始
		UserDAO.sqlMap.startTransaction();
		long begin = System.currentTimeMillis();
		for (int i = 0 ; i < number ; i++) {
			try {
				 UserDAO.insertUser(list.get(i));
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		UserDAO.sqlMap.commitTransaction();
		UserDAO.sqlMap.endTransaction();
		System.out.println(System.currentTimeMillis()-begin);
	}
}


/**
 * 描述:batch处理
 * @author oyp 2009-12-15
 */
public class MainBatch {
	public static int number =Util.number;
	public static void main (String[] args) throws SQLException {
		//清空表
		UserDAO.clearTable();
		//批量插入的对象
		List<User> list = new ArrayList<User>();
		for (int i = 0 ; i < number; i++) {
			User tempuser = new User();
			tempuser.setId(i);
			tempuser.setName("user"+i);
			tempuser.setPassword("password"+i);
			list.add(tempuser);
		}
		//批量处理开始
	    long begin = System.currentTimeMillis();
	    UserDAO.sqlMap.startTransaction();
	    for (int i = 0 ; i < number ; i ++) {
	    	if (i % 10000 == 0) {
	    		UserDAO.sqlMap.startBatch();
	    	}
	    	UserDAO.insertUser(list.get(i));
	    	if ((i+1) % 10000 ==0) { 
	    		UserDAO.sqlMap.executeBatch();
	    	}
	    }
	    UserDAO.sqlMap.executeBatch();
	    UserDAO.sqlMap.commitTransaction();
	    UserDAO.sqlMap.endTransaction();
	    System.out.println(System.currentTimeMillis()-begin);
	}
}

/*
 *描述:调用存储过程
 *@author oyp 2009-12-15
 */


public class MainProcedure {
	public static int number =Util.number;
	public static void main (String[] args) throws SQLException {
		//清空表
		UserDAO.clearTable();
		HashMap map = new HashMap();
		map.put("total", number);
		//调用存储过程
		long begin = System.currentTimeMillis();
		UserDAO.sqlMap.startTransaction();
	    UserDAO.sqlMap.insert("procedureoyp",map);
	    UserDAO.sqlMap.commitTransaction();
	    UserDAO.sqlMap.endTransaction();
	    System.out.println(System.currentTimeMillis()-begin);
	}
	
}





Java代码 复制代码
  1. 1-- Util.number = 1000 ;   
  2.    普通处理:593ms   
  3.    批量处理:94ms   
  4.    存储过程处理:218ms   
  5.   
  6. 2--Util.number = 10000;   
  7.    普通处理:2734ms   
  8.    批量处理:328ms   
  9.    存储过程处理:1172ms   
  10.   
  11. 3--Util.number = 100000;   
  12.    普通处理: 32641 ms  休息....   
  13.    批量处理: 1937ms   休息....   
  14.    存储过程处理:8453 ms   
  15.   
  16. 4--Util.number = 300000;   
  17.    批量处理: 3937 ms   休息....   
  18.   
  19. 5--Util.number = 1000000;   
  20.     批量处理: 电脑被我折腾着不行了   
  21.     Exception in thread "main" java.lang.OutOfMemoryError: Java heap      space   
  22.     at java.util.Arrays.copyOf(Arrays.java:2760)   
  23.     at java.util.Arrays.copyOf(Arrays.java:2734)   
  24.     at java.util.ArrayList.ensureCapacity(ArrayList.java:167)   
  25.     at java.util.ArrayList.add(ArrayList.java:351)   
  26.     at MainBatch.main(MainBatch.java:24)   
  27.   (注:因为要创建插入数据库的对象所以内存耗尽, :twisted: 公司配的电脑太差!)   
  28.   
  29.    存储过程: 119906 ms   
1-- Util.number = 1000 ;
   普通处理:593ms
   批量处理:94ms
   存储过程处理:218ms

2--Util.number = 10000;
   普通处理:2734ms
   批量处理:328ms
   存储过程处理:1172ms

3--Util.number = 100000;
   普通处理: 32641 ms  休息....
   批量处理: 1937ms   休息....
   存储过程处理:8453 ms

4--Util.number = 300000;
   批量处理: 3937 ms   休息....

5--Util.number = 1000000;
    批量处理: 电脑被我折腾着不行了
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap      space
	at java.util.Arrays.copyOf(Arrays.java:2760)
	at java.util.Arrays.copyOf(Arrays.java:2734)
	at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
	at java.util.ArrayList.add(ArrayList.java:351)
	at MainBatch.main(MainBatch.java:24)
  (注:因为要创建插入数据库的对象所以内存耗尽, :twisted: 公司配的电脑太差!)

   存储过程: 119906 ms 


 

这些纯属菜鸟级的试验,真正的项目当中要考虑到各方面的原因,要比这复杂多了,所以哪里需要改善,或者有什么好的建议,尽管砸吧!~~(事务,数据库)
   
   ps: 这种情况,存储过程的效率怎么比不上批处理  ??

分享到:
评论

相关推荐

    iBATIS学习笔记

    ### iBATIS学习笔记知识点概览 #### 一、iBATIS简介 - **定义**:iBATIS是Apache的一个开源项目,它提供了一种对象关系映射(ORM)的解决方案,通过这种方式可以将Java对象与数据库表进行映射,从而简化了数据访问...

    ibatis 的关系映射

    文件名如 "iBatis2学习笔记:多对多映射(双向).htm" 暗示了文档可能深入讲解了如何配置和使用双向多对多映射,而 "iBatis2学习笔记:SqlMap的配置总结(18条).htm" 可能提供了关于 iBatis 配置的全面概述。...

    lim_3ck_01b_0718.pdf

    lim_3ck_01b_0718

    C2Former: 解决RGB-红外物体检测中模态校准与融合不精确问题的标定互补变压器

    内容概要:本文介绍了一种新颖的变压器模型C2Former(Calibrated and Complementary Transformer),专门用于解决RGB图像和红外图像之间的物体检测难题。传统方法在进行多模态融合时面临两个主要问题——模态错位(Modality miscalibration)和融合不准确(fusion imprecision)。作者针对这两个问题提出采用互模交叉注意力模块(Inter-modality Cross-Attention, ICA)以及自适应特征采样模块(Adaptive Feature Sampling, AFS)来改善。具体来说,ICA可以获取对齐并且互补的特性,在特征层面进行更好的整合;而AFS则减少了计算成本。通过实验验证了基于C2Former的一阶段和二阶段检测器均能在现有公开数据集上达到最先进的表现。 适合人群:计算机视觉领域的研究人员和技术人员,特别是从事跨模态目标检测的研究人员,对Transformer架构有一定了解的开发者。 使用场景及目标:适用于需要将可见光和热成像传感器相结合的应用场合,例如全天候的视频监控系统、无人驾驶汽车、无人

    pepeljugoski_01_0108.pdf

    pepeljugoski_01_0108

    [AB PLC例程源码][MMS_044696]ME Faceplates for 1797 Digital and Analog I-O.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    matlab程序代码项目案例模型预测控制(MPC)基准测试问题的开放集合.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    lusted_3ck_02_1118.pdf

    lusted_3ck_02_1118

    虚拟同步发电机非对称电网故障下自适应低电压穿越方法的研究与应用

    内容概要:本文提出了用于虚拟同步发电机(VSG)在非对称电网故障期间的一种自适应低电压穿越(LVRT)方法。现有LVRT方法由于故障检测延迟可能导致逆变器损坏的问题以及新的电网标准(GCs)规定了逆变器基资源(IBRs)需要注入负序电流的需求。所提出的LVRT方法采用初始故障时刻电压控制环差补及有功功率环相角调整,使系统能够在正常运行时保持特性不受影响,并在出现不对称故障时立即限制输出电流。模拟结果显示,新方法不仅能迅速响应并抑制故障电流,在不同类型的不对称故障条件下亦能良好表现。此外,该方法不需要参数设计,且能够最大限度利用IBRs电流,同时维持IBRs电压源特性和符合新的GCs。 适合人群:电力电子与能源系统的学术研究人员和技术人员,熟悉虚拟同步发电技术以及LVRT相关背景的工程师。 使用场景及目标:主要适用于包含虚拟同步发电机的新能源系统中的故障穿越技术改进,以满足最新国际电气电子工程师协会(IEEE)的电气互连标准,并解决当前LVRT方法无法全面符合规范的问题,确保系统的安全可靠运行。该研究可用于改进新能源并网逆变器的设计。 其他说明:文章通过对现有的LVRT控制方法进行改进来

    AI工具DeepSeek的应用指南:从入门到高级提示词策略与实战案例

    内容概要:本导读书籍《DeepSeek从入门到精通》旨在为读者提供对AI工具DeepSeek全面的认识。书籍首先概述了DeepSeek作为一个国产、开源的多功能AI平台的功能和特点,接着详细介绍了如何入门操作,并通过实战演示来帮助用户掌握不同应用场景下的高级提示词策略和使用技巧,如针对不同类型的提示语的设计方法和实际应用。特别是在‘发散’部分,对提示语进行了深入剖析,不仅探讨了提示词的高级技术和策略,还包括AI幻觉、人机协作以及知识生成等方面的讨论,有助于用户深入理解和灵活应用提示词,在各种任务中提高效率并获得更好的效果。最后一章展望了AI与人类在未来内容创作中的角色转变和发展趋势。这本详细的指导手册能帮助读者形成系统的AI工具认知和技术体系,快速上手并在实践中不断加深对该领域的理解。 适用人群:面向希望深入了解AI工具尤其是提示词设计的专业人士、开发者及所有有兴趣探索这一领域的个人;适合有一定技术背景的从业者。 使用场景及目标:帮助初学者快速启动DeepSeek的日常使用,为中高级用户提供更深入的高级功能理解和实践,特别是涉及提示词构建的技术细节,助力于提升特定任务处理效率和结果品质

    支持适用于PERC H330/H730/H730P/H830/H730P系列RAID卡MX/FD33xD/FD33xS控制器的驱动安装指南

    下载 1. 单击“立即下载”,以下载该文件。 2. 出现“文件下载”窗口后,单击“保存”,以将文件保存到硬盘。 安装 1. 浏览至文件下载目标位置并双击新下载的文件。 2. 仔细阅读对话窗口中显示的发布信息。 3. 下载并安装对话窗口中标识的任何必备项,然后再继续。 4. 单击“Install”(安装)按钮。 5. 按照其余提示执行更新。 安装 1. 将解压的文件复制到可访问Windows的介质。 2. 将系统重新引导至Windows操作系统。 3. 打开“服务器管理器”->“设备管理器”->“存储控制器”,然后单击“PERC控制器”。 5. 单击“更新驱动程序软件”,并按照提示更新驱动程序。 4. 重新引导系统以使更改生效。

    Saxena_01_0107.pdf

    Saxena_01_0107

    [AB PLC例程源码][MMS_040317]DINT Conversion of INT data type and Arithmetic operations like Div, Mul.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_046353]using RSlogix v16 alarming instructions with RSViewSE-32 and.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    第8节模型预测控制在运动规划中的应用

    第8节模型预测控制在运动规划中的应用

    2024年 中国统计年鉴excel整理版.zip

    覆盖了人口统计、经济发展、教育体系、环境资源等多个关键领域,旨在为研究人员、政策规划者及相关各界提供全面洞察社会现状与趋势的窗口。 2024年修订内容如下: 资源和环境–增加“倒塌房屋间数”。 农业–增加“大豆”、“花生”、“油菜籽”、“芝麻”“甘蔗”“甜英”业及辅助性活动”产值和指数。 工业–增加“智能手机”产量。 卫生和社会服务–增加“分地区儿童健康情况`和“分地区孕产妇健康情况”。 文化和体育–增加公共图书馆“少儿文献数”和国有博物馆“未成年人参观人次”情况。 城市、农村和区域发展–增加“乡村办水电站”“农村水电装机容量”“农村水电年发电量”情况。 科学技术–新增分行业新产品开发经费支出、新产品销售收入等指标。 运输、邮电和软件业–公路营业性客运量包括班车包车客运量、公共汽电车城际城乡客运量、出租汽车(含巡游出租汽车、网络预约出租汽车)城际城多客运量 运输、邮电和软件业–公路客运周转量包括班车包车客运周转量、公共汽电车城际城乡客运周转量、出租汽车(含巡游出租汽车、网络预约出租汽车)城际城乡客运周转量。 就业和工资、固定资产投资、工业、建筑业、批发和零售业、房地产、科学计算等修订主要内容: (1)拓展适用范围 为了更全面覆盖统计调查对象,新标准按照市场主体登记注册管理实际对分类范围作相应调整,从“企业”扩大至所有“市场主体”,增加了“农民专业合作社(联合社)”和“个体工户”等类别。 (2)取消相关类别 由于《中华人民共和国私营企业暂行条例》已被废止,根据《中华人民共和国公司法》《中华人民共和国个人独资企业法》《中华人民共和国合作企业法》,将相关“私营有限责任公司”、“私营股份有限公司”分别列入“有限责任公司、“股分有限公司”范围类别。引国,“私营独资企业”调整为“个人独资企业”,“私营合伙企业”调整为“合伙企业”。 (3)调整分类结构 一是关于“内资企业”。根据《中华人民共和国市场主体登记管理条例》规定,将原内资企业分类“国有企业”“集体企业”、“股份合作企业”、“联营企业”、“有限责任公司”、“股份有限公司”、“私营企业”和“其他企业”等8个类别调整为“有限责任公司”、“股份有限公司”、“非公司企业法人”、“个人独资企业”、合伙企业”和“其他内资企业”等6个类别。其中,原“国有企业”、“集体企业”、“股份合作企业”“联营企业”纳入新类别“非公司企业法人”下;原“私营企业”类别取消(上段已述)。二是关于“外商投资企业”和“港澳台投资企业”。根据《中华人民共和国外商投资法》规定,将原外商投资企业分类“中外合资经营企业”“中外合作经营企业”、“外资企业”、“外商投资股份有限公司”和“其他外商投资企业”等5个类别调整为“外商投资有限责任公司”、“外商投资股份有限公司”、“外商投资合伙企业”和“其他外商投资企业”等4个类别。港澳台投资企业参照外商投资企业分类方法调整。 (4)规范类别名称根据市场监管部门对登记注册管理的规范名称,分别将原“国有企业”、“集体企业”更名为“全民所有制企业(国有企业)”、“集体所有制企业(集体企业)” (5)统一内资范围根据《中华人民共和国外商投资法》和相关部门规定,将登记注册为内资公司的有限责任公司(外商投资企业投资)、登记注册为内资公司的股份有限公司(上市、外商投资企业投资)等市场主体,即外商投资企业市场主体在中国境内的再投资市场主体,由原标准中的“外商投资企业”调整为新标准中的“内资企业”相关类别。

    [AB PLC例程源码][MMS_046682]ME Faceplates for 1734 Digital and Analog I-O with Descriptions.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_046233]Tank Volume AOI.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    基于COMSOL软件的PED单晶生长模型

    基于comsol 6.2软件,建立了单晶生长的二维模型,用的是数学模块的PDE方法,涵盖了温度场和浓度场。

    Gaussian-Filter

    Gaussian_Filter

Global site tag (gtag.js) - Google Analytics