2013-02-02 43 views
1

輸入:如何在mySQL數據庫中乘數據來模擬比例?

包括

不隨用戶數量或時間尺度
  • 當用戶與應用程序交互是發展動態表
    • 靜態表的數據庫(所以隨着用戶的數量規模和時間)
    • 與現實生活中的數據的數據庫用於X用戶

    任務:

    • 分的數據庫來模擬較大的用戶數

    實施例:

    Tables: 
    
    t_user (scale target) 
    UserId , Name 
    1 , John 
    2, Terry 
    
    t_post (dynamic) 
    AuthorId, PostId, TagId 
    1, 1 , 1 
    1, 2 , 2 
    1, 3 , 2 
    2, 4 , 1 
    
    t_tag (static) 
    TagId, Name 
    1, C# 
    2, Java 
    

    與比例因子= 2

    t_user 
    UserId , Name 
    1 , John 
    2, Terry 
    3 , John 
    4, Terry 
    
    t_post (dynamic) 
    AuthorId, PostId, TagId 
    1, 1 , 1 
    1, 2 , 2 
    1, 3 , 2 
    2, 4 , 1 
    1, 5 , 1 
    1, 6 , 2 
    1, 7 , 2 
    2, 8 , 1 
    
    t_tag (static) 
    TagId, Name 
    1, C# 
    2, Java 
    

    Ofcourse對於這樣一個小的數據庫該期望輸出可以在MySQL中完成,但我需要一個解決方案,該解決方案可用於具有150多個表的數據庫(編寫一個縮放例程每個都不是一個解決方案)以及將數據庫形式從100個提高到10000個用戶的縮放因子。

    有沒有人知道一個專門的工具或黑客可以做到這一點?

  • 回答

    0

    我結束了寫我自己的腳本。在下面你會找到一個簡化版本(爲了清楚起見,表格中的許多列都已被忽略)。這工作得很好。我能夠非常有效地將數據庫擴展100倍。希望這有幫助

    SET autocommit = 0; 
    
    START TRANSACTION; 
    
    SET @UMAX = (SELECT MAX(UserID) AS MX FROM t_user); 
    SET @QSMAX = (SELECT MAX(QuestionSetID) AS MX FROM t_question_set); 
    SET @QGMAX = (SELECT MAX(QuestionGroupID) AS MX FROM t_question_group); 
    SET @QMAX = (SELECT MAX(QuestionID) AS MX FROM t_question); 
    SET @TMAX = (SELECT MAX(TestID) AS MX FROM t_test); 
    
    
    DROP TABLE IF EXISTS t_seq; 
    CREATE table t_seq AS 
        (
        SELECT 
         1 S 
        ); 
    INSERT INTO t_seq (S) VALUES (2),(3),(4),(5),(6),(7),(8),(9),(10);  
    
    
    INSERT INTO `t_user` 
        (
         `UserID`, 
         `Login`, 
         `Password`, 
        ) 
    SELECT 
        `UserID` + 1000000 + @UMAX * t_seq.S, 
        concat(if(Login is null, '', Login), `UserID` + 1000000 + @UMAX * t_seq.S), 
        `Password`, 
    FROM t_user, 
        t_seq; 
    
    INSERT INTO `t_question_set`(`QuestionSetID`) 
    SELECT `QuestionSetID` + 1000000 + @QSMAX * t_seq.S 
    FROM t_question_set,t_seq; 
    
    INSERT INTO `t_question_group`(
        `QuestionGroupID`, 
        `QuestionSetID` 
        ) 
    SELECT 
        `QuestionGroupID` + 1000000 + @QGMAX * t_seq.S, 
        `QuestionSetID` + 1000000 + @QSMAX * t_seq.S, 
    FROM t_question_group,t_seq; 
    
    INSERT INTO `t_question`(`QuestionID`, `QuestionGroupID`) 
    SELECT 
        `QuestionID` + 1000000 + @QMAX * t_seq.S, 
        `QuestionGroupID` + 1000000 + @QGMAX * t_seq.S, 
    FROM t_question, t_seq; 
    
    INSERT INTO `t_test` 
        (
         `TestID`, 
         `QuestionSetID`, 
         `UserID`, 
          ) 
    SELECT 
        `TestID` + 1000000 + @TMAX * t_seq.S, 
        `QuestionSetID` + 1000000 + @QSMAX * t_seq.S, 
        `UserID` + 1000000 + @UMAX * t_seq.S, 
    FROM t_test,t_seq; 
    
    INSERT INTO `t_question_answer`(
        `QuestionID`, 
        `TestID` 
        ) 
    SELECT 
        `QuestionID` + 1000000 + @QMAX * t_seq.S, 
        `TestID` + 1000000 + @TMAX * t_seq.S, 
    FROM t_question_answer,t_seq; 
    
    COMMIT; 
    
    0

    Benchmark Factory for Databases看起來像它可能會做你想要的,或者你可以試試MySQL Benchmark Tool

    +0

    你知道任何教程如何在Benchmark Factory中做到這一點嗎? – JohnnyM

    +0

    這裏是[用戶指南](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CDUQFjAA&url=http%3A%2F%2Fus-downloads.quest.com% 2FRepository%2Fsupport.quest.com%2FBenchmark%2520Factory%2520for%2520Database%2F6.5%2FDocumentation%2FBenchmark%2520Factory%2520for%2520Databases%2520User%2520Guide.pdf&EI = qLwNUeeGLpDbigKD9YDYBg&USG = AFQjCNFD35q8fA6-0KHvZTkCI80P_WciBQ&SIG2 = 4ePcuURwaqGjtDY3SAn1Uw&BVM = bv.41867550,d。 cGE) –

    +0

    不是很有幫助。我正在尋找針對此特定問題的實際解決方案,而不是指向用戶指南的鏈接。但謝謝你的嘗試。我結束了寫我自己的腳本。 – JohnnyM