Cassandra 插入数据压力测试(2)-阿里云开发者社区

开发者社区> 余二五> 正文

Cassandra 插入数据压力测试(2)

简介:
+关注继续查看

 对于Cassandra 两节点集群我们已经做了插入数据的压力测试:文章见http://supercharles888.blog.51cto.com/609344/869276

 

这里纯粹作为对比,我们在关系数据库中插入50W条数据,来作为和NoSQL的比较

我们选用Oracle DB ,当然了,数据库所在的宿主机器也是VM并且和刚集群的一样。

为了提高速度,我们用了预编译语句,这样没必要多次打开游标,并且可以重用这条插入语句的执行计划。

代码如下,为了减少时间开销,我把所有的变量,字段的定义都放在循环外面了,这样可以减少创造大量小对象所用的额外时间开销,而且我以牺牲可读性的方式减少函数之间的调用开销,所以看到所有的执行过程都封装在一个函数中:


  1. /*  
  2.  */ 
  3. package com.charles.cassandra.demo; 
  4.  
  5.  
  6. import java.sql.Connection; 
  7. import java.sql.Date; 
  8. import java.sql.DriverManager; 
  9. import java.sql.PreparedStatement; 
  10. import java.sql.ResultSet; 
  11. import java.sql.Statement; 
  12. import java.sql.ResultSetMetaData; 
  13. import java.sql.Timestamp; 
  14.  
  15.  
  16. /** 
  17.  * 
  18.  * Description:插入50W条记录到关系数据库中 
  19.  * 
  20.  * @author charles.wang 
  21.  * @created May 19, 2012 5:25:36 PM 
  22.  *  
  23.  */ 
  24.  
  25. public class OracleStressTest1 { 
  26.  
  27.   
  28.      
  29.      
  30.      
  31.     /** 
  32.      * 既然要测负载,就尽可能减少方法调用的时间开销,所以我用了最原始的写法 
  33.      * @param args 
  34.      */ 
  35.      
  36.     public static void main(String[] args){ 
  37.          
  38.         String url="jdbc:oracle:thin:@192.168.129.14:15210:ora11g"
  39.         String username="Charles_Stress_Test1"
  40.         String password="Charles_Stress_Test1"
  41.          
  42.         String sDBDriver = "oracle.jdbc.driver.OracleDriver"
  43.  
  44.         try
  45.              
  46.             System.out.println("开始压力测试,我们以预编译的方式插入50W条数据到Oracle中"); 
  47.             System.out.println("..."); 
  48.             //标记开始时间 
  49.             long startTime=System.currentTimeMillis(); 
  50.                      
  51.                      
  52.             Class.forName(sDBDriver).newInstance(); 
  53.             Connection conn = DriverManager.getConnection(url,username,password); 
  54.              
  55.             //因为这里使用预编译语句,所以不用每次都生成新的执行计划 
  56.              
  57.             String rowkey=null
  58.             String id=null
  59.             String name=null
  60.             Date date=null
  61.             String statementString="insert into Student (rowkey,id,name,create_date )values(?,?,?,?)";; 
  62.             
  63.             PreparedStatement pstmt = conn.prepareStatement(statementString); 
  64.             for(int i=0;i<500000;i++){ 
  65.                 rowkey="a"+i; 
  66.                 id=""+i; 
  67.                 name="student"+i; 
  68.                 date= new Date(System.currentTimeMillis()); 
  69.                   
  70.                 pstmt.setString(1,rowkey); 
  71.                 pstmt.setString(2, id); 
  72.                 pstmt.setString(3,name); 
  73.                 pstmt.setDate(4, date); 
  74.                 pstmt.execute(); 
  75.             } 
  76.              
  77.             //关闭相关连接 
  78.             pstmt.close(); 
  79.             conn.close(); 
  80.              
  81.             long endTime=System.currentTimeMillis(); 
  82.             long elapsedTime=endTime-startTime; 
  83.              
  84.             System.out.println("压力测试完毕,用时: "+elapsedTime+" 毫秒"); 
  85.              
  86.         }catch(Exception e){ 
  87.             System.out.println("数据库连接失败"); 
  88.             e.printStackTrace(); 
  89.         } 
  90.          
  91.         
  92.         
  93.     } 
  94.      
  95.  

我们最终执行结果是:


  1. 开始压力测试,我们以预编译的方式插入50W条数据到Oracle中 
  2. ... 
  3. 压力测试完毕,用时: 446223 毫秒 

为了验证我们数据库的确插入了50W条记录:

所以,从这里看出,我们插入50W 条记录一共用了446223毫秒,差不多7分半钟,这个成绩甚至好于同样低硬件配置条件下的插入50W条记录到Cassandra集群中的用时(11分半钟)。

 

所以官方教程说Cassandra对于写操作性能很强大,我想应该是基于硬件配置足够强大的情况,那时候才能体现Cassandra的优势。对于低配置的机器,也许关系数据库更好。

 





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/869414,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Apache Flink 在实时金融数据湖的应用
本文由中原银行大数据平台研发工程师白学余分享,主要介绍实时金融数据湖在中原银行的应用。
1976 0
Pandas之三选择数据
介绍在pandas中筛选数据的几种方法,快速定位某行、某列、具体元素的方法
81 0
mysql 插入数据失败防止自增长主键增长的方法
mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说mysql插入数据失败,怎么能防止主键增长? MYSQL不保证AUTO_INCREMENT依次增长(1,2,3,4,5),但是可以保证正向增长(1,3,5,9)所以,当你某次操作失败后,下次A
1763 0
+关注
20382
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载