程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C# 海量數據自動生成系統的架構與實現

C# 海量數據自動生成系統的架構與實現

編輯:關於C#
 

在做單元測試和功能測試的時候,需要比較多的數據來發現問題,對於軟件工程師來講,手動輸入這些數據

是蠻浪費時間的事。為了減輕咱們工程師的工作壓力和工作量,我開發了這個系統。

希望大家在使用過程中提供更多寶貴意見。

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>支持更多業務規則
 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved