【发布时间】:2015-02-19 03:10:50
【问题描述】:
我有一个学校的大数据项目,需要我们构建和查询一个 8 节点 Cassandra 系统。系统必须包含至少 7 TB 的数据。我必须自己生成所有这些数据。不要求数据与分配“相关”——即每列可以只是一个随机整数。话虽如此,要求每个值都是随机的或基于随机序列。
所以,我编写了一个简单的 java 程序来生成随机的ints。我可以在~120s 中生成~200 MB 的随机测试数据。现在除非我的数学是关闭的,否则我认为我在泡菜。
7 terabytes中有35000200MB单位。
35000 * 120 = 4 200 000 seconds
4 200 000 / 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;
}
最初我生成了更多的test specific 数据,例如phone numbers 等,但后来我决定只生成随机的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;
}
【问题讨论】:
-
请发布您如何生成数据以及如何将其存储在数据库中。
-
我还没来得及将数据加载到数据库中,但架构是
single table和400 columns,此时它们都将是int值。跨度> -
随着循环中的串联数量不断增加,您是否考虑过使用 StringBuilder 从中榨取更多汁液?
-
不敢这么大数量地连接字符串! :) 使用 StringBuilder 作为@OblivionCreations 提到的。