设为首页 收藏本站
查看: 1148|回复: 0

[经验分享] 海量数据自动生成系统的架构与实现(附源码)

[复制链接]

尚未签到

发表于 2016-11-22 10:12:01 | 显示全部楼层 |阅读模式
  海量数据自动生成系统介绍
  在做单元测试和功能测试的时候,需要比较多的数据来发现问题,对于软件工程师来讲,手动输入这些数据
  是蛮浪费时间的事。为了减轻咱们工程师的工作压力和工作量,我开发了这个系统。
  希望大家在使用过程中提供更多宝贵意见。

  该系统的主要功能
          1> 自动生成字符串、中文字符串、整数和浮点数。
          2> 目前支持MSSql,MySql, Oracle,Sqlite
          3> 对需要加密用户密码的系统,提供加密

          4> 支持第三方开发的插件

  该系统的使用方法

  该系统已内置了三种常用的数据库,包括MSSql,MySql, 和Oracle.

  对于这几种数据库的使用方法如下: (在App.Config需要配置ConnectionString)
  MSSql:

  //定义插入数据表的sql语句  
  string query = "insert into Users(Email,Password, Salt, Status, Online, CreateDate, VerifyDate, LastLoginDate) values(@Email, @Password, @Salt, @Status, @Online, @CreateDate, @VerifyDate, @LastLoginDate)";
            //创建 PreparedStatement
            PreparedStatement pstmt = new PreparedStatement(DBType.MSSql, query);            
  for (int index = 0; index < 1000000; index++)
  {               
  var email = Gloser.GetRandomEmail(8, "@gmail.com");  
  var password = Gloser.getRandomString(8);
  pstmt.SetParam("@Email", email);  
  pstmt.SetParam("@Password", CryptographyManager.EncodePassowrd(password));
  pstmt.SetParam("@Salt", Gloser.getRandomString(15));
  pstmt.SetParam("@Status", 1);  
  pstmt.SetParam("@Online", 1);
  pstmt.SetParam("@CreateDate", DateTime.Now);
  pstmt.SetParam("@VerifyDate", DateTime.Now);  
  pstmt.SetParam("@LastLoginDate", DateTime.Now);
  pstmt.AddBatch();
  if ((index > 0) && (index % 500 == 0))
  {   
  pstmt.Execute();  
  pstmt.ClearParameters();
  }  
  }            
  pstmt.Execute();
   MySql
  string query = "insert into settings(k,v) values(@k,@v)";
            PreparedStatement pstmt = new PreparedStatement(DBType.MySql, query);
            for (int index = 0; index < 100000; index++)
            {
                pstmt.SetParam("@k", Gloser.getRandomString(32));
                pstmt.SetParam("@v", Gloser.GetRandomChinese(100));
                pstmt.AddBatch();
                if ((index > 0) && (index % 500 == 0))
                {
                    pstmt.Execute();
                    pstmt.ClearParameters();
                }
            }
            pstmt.Execute();
  Oracle:
  string query = "insert into book(bookid,bookname,author,price) values(:bookid,:bookname,:author,:price)";
            PreparedStatement pstmt = new PreparedStatement(DBType.Oralce, query);
            for (int index = 0; index < 100000; index++)
            {
                pstmt.SetParam(":bookid", Gloser.GetRandomInt(100000));
                pstmt.SetParam(":bookname", Gloser.GetRandomChinese(25));
                pstmt.SetParam(":author", Gloser.GetRandomChinese(10));
                pstmt.SetParam(":price", Gloser.GetRandomInt(200));
                pstmt.AddBatch();
                if ((index > 0) && (index % 500 == 0))
                {
                    pstmt.Execute();
                    pstmt.ClearParameters();
                }
            }
            pstmt.Execute();
  Sqlite:
  Sqlite的使用方法与以上数据库类似,不同的地方是系统通过插件接口调用的。需要在配置文件中定义:

           <appSettings>
            <add key="SqlCacheAssembly" value="PerfRunner.Sqlite"/>
            <add key="SqlCacheName" value="PerfRunner.Sqlite.SqlitePerformanceTest"/>
      </appSettings>

            SqlCacheAssembly指实现Sqlite的程序集名称,SqlCacheName指实现ISqlCache接口的类名

  配置Connection:

  <add name="OtherDbConnectionString" connectionString="Data Source=E:\test.db" />

  生成海量数据代码如下:
  string query = "insert into book(bookid,bookname,author,price) values(@bookid,@bookname,@author,@price)";
            PreparedStatement pstmt = new PreparedStatement(query);
            for (int index = 0; index < 100000; index++)
            {
                pstmt.SetParam("@bookid", index);
                pstmt.SetParam("@bookname", Gloser.GetRandomChinese(25));
                pstmt.SetParam("@author", Gloser.GetRandomChinese(10));
                pstmt.SetParam("@price", Gloser.GetRandomInt(200));
                pstmt.AddBatch();
                if ((index > 0) && (index % 500 == 0))
                {
                    pstmt.Execute();
                    pstmt.ClearParameters();
                }
            }
            pstmt.Execute();
  该系统的架构

  未来的发展路径

  以后的版本会提供如下功能:
  1>支持Mono
  2>支持更多的数据库,包括DB2,Postgsql等等。
  3>界面操作
  4>集成在开发环境中
  5>支持更多业务规则

  参考
  C#中海量数据的批量插入和更新   

  PreparedStatement
  ConnectionString
  设计模式 from TerryLee
  插件系统的设计
  Reflection in .NET
  test driven
  Ezsocio

  dotConnect for PostgreSQL

  主键生成器
  generating random char and random string, random double
  oracle 数据测试
  表或视图不存在

  附源码

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-303905-1-1.html 上篇帖子: 说说列存储技术 下篇帖子: 下载AutoCAD Map 3D 2011免费试用版
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表