为Cassandra DB生成随机数据

slm*_*ers 1 java random cassandra

我有一个学校的大数据项目,需要我们构建和查询8节点的Cassandra系统。系统必须包含至少7 TB的数据。我必须自己生成所有这些数据。不需要数据与赋值“相关”,即每一列可以只是一个随机整数。话虽如此,要求每个值是随机的或基于随机序列。

因此,我编写了一个简单的Java程序来生成random ints。我可以在中生成~200 MB随机测试数据~120s。现在除非我的数学不上课,否则我想我会很烦。

中有35000 200MB单位7 terabytes

35000 * 120 = 4 200 000 seconds

420万/ 3600〜 1167hours

1167/24 = 49 days

因此,似乎需要49天才能生成所有需要的测试数据。显然,这是不切实际的。我正在寻找可以提高生成数据速度的建议。

我已经考虑/考虑:

将复制因子设置为8,以减少需要生成的数据量,并在所有8个节点上运行数据生成程序。

编辑:我如何生成数据

private void initializeCols(){
    cols = new ArrayList<Generator>();
    cols.add(new IntGenerator(400));
}

public ArrayList<String> generatePage(){
    ArrayList<String> page = new ArrayList<String>();
    String line = "";
    for(int i = 0; i < PAGE_SIZE; i++){
        line = "";
        for(Generator column : cols){
            line += column.gen();
        }
        page.add(line);
    }
    return page;
}
Run Code Online (Sandbox Code Playgroud)

最初我是在生成更多test specific数据,例如phone numbersetc,但是后来我决定只生成随机数据ints以节省一些时间-节省不了多少。这是IntGenerator课程。

public IntGenerator(int series){
    this.series = series;
}

public String gen(){
    String output = "";

    for(int i = 0; i < series; i++){
        output += Integer.toString(randomInt(1,1000));
        output += SEPERATOR; 
    }
    return output;
}
Run Code Online (Sandbox Code Playgroud)

pha*_*act 5

使用Cassandra Stress 2.1

并使用此工具生成您的Yaml。

您将在几分钟之内用C *获得随机数据,无需编码!

  • 天哪,几周前你在哪里!我最终编写了 SSTables 并通过 JMX 加载它们,但我的上帝是你的这个链接太棒了!我想我可以和我的教授分享,这样未来的学生会更轻松。 (2认同)
  • 好吧,我说的不是C *课程。我正在阿尔伯塔大学(University of Alberta)做数据库II,作为一个可选项目,我应该构建一个简单的NoSQL系统。我们能够选择任何NoSQL系统,并且我们的小组选择了C *,因为在实验室中有一个有关如何设置集群的教程。 (2认同)