use*_*135 10 javascript d3.js crossfilter dc.js
我发现Crossfilter的所有例子都使用这样的扁平结构:
[
{ name: “Rusty”, type: “human”, legs: 2 },
{ name: “Alex”, type: “human”, legs: 2 },
...
{ name: “Fiona”, type: “plant”, legs: 0 }
]
Run Code Online (Sandbox Code Playgroud)
要么
"date","open","high","low","close","volume","oi" 11/01/1985,115.48,116.78,115.48,116.28,900900,0 11/04/1985,116.28,117.07,115.82,116.04,753400,0
11/05/1985,116.04,116.57,115.88,116.44,876800,0
我有几百MB的平面文件我处理产生一个1-2MB的JSON对象,结构大致如下:
{
"meta": {"stuff": "here"},
"data": {
"accountName": {
// rolled up by week
"2013-05-20": {
// any of several "dimensions"
"byDay": {
"2013-05-26": {
"values": {
"thing1": 1,
"thing2": 2,
"etc": 3
}
},
"2013-05-27": {
"values": {
"thing1": 4,
"thing2": 5,
"etc": 6
}
}
// and so on for day
},
"bySource": {
"sourceA": {
"values": {
"thing1": 2,
"thing2": 6,
"etc": 7
}
},
"sourceB": {
"values": {
"thing1": 3,
"thing2": 1,
"etc": 2
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望将其显示为如下表:
Group: byDay* || bySource || byWhatever
| thing1 | thing2 | etc
2013-05-26 | 1 | 2 | 2
2013-05-27 | 4 | 5 | 7
Run Code Online (Sandbox Code Playgroud)
要么:
Group: byDay || bySource* || byWhatever
| thing1 | thing2 | etc
sourceA | 2 | 6 | 6
sourceB | 3 | 1 | 3
Run Code Online (Sandbox Code Playgroud)
展平此JSON结构将很困难,并产生一个非常大的对象.
我很想利用Crossfilter的精彩功能,但我不确定它是否可行.
我可以将我当前的结构定义/解释为Crossfilter吗?也许还有另一种方法可以解决这个问题?我很乐意承认我对尺寸和许多其他关键的Crossfilter概念没有很好的把握.
Crossfilter处理一组记录,数组的每个元素通过维度(使用访问器函数定义)映射到一个或多个值.
即使您的数据包含汇总结果,您也可以将其与Crossfilter 结合使用,但请注意,在技术上不可能组合跨不同维度汇总的数据,例如在上面的示例中组合"按天"和"按源"数据.您可以为每个聚合维创建一个Crossfilter,例如一个用于"按天",并运行查询和组,但我不确定与您已有的相比有多大用处.
至于内存使用情况,你确定平整你的扁平结构真的会有问题吗?请记住,每个记录(展平数组的元素)都可以包含对嵌套结构中字符串和其他对象的引用,因此您不必耗尽所有那么多内存.