海量数据自动生成系统的架构与实现(附源码)

海量数据自动生成系统介绍

         在做单元测试和功能测试的时候,需要比较多的数据来发现问题,对于软件工程师来讲,手动输入这些数据

    是蛮浪费时间的事。为了减轻咱们工程师的工作压力和工作量,我开发了这个系统。

    希望大家在使用过程中提供更多宝贵意见。

test-data 

该系统的主要功能

        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 数据测试 

表或视图不存在

附源码

转载于:https://www.cnblogs.com/caichunsheng/archive/2010/05/29/1746561.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值