10

我发现的所有 Crossfilter 示例都使用如下扁平结构:

[
  { name: “Rusty”,  type: “human”, legs: 2 },
  { name: “Alex”,   type: “human”, legs: 2 },
  ...
  { name: “Fiona”,  type: “plant”, legs: 0 }
]

或者

"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
            }
          }
        }
      }
    }
  }
}

我想将其显示为如下表格:

Group: byDay* || bySource || byWhatever

           | thing1 | thing2 | etc
2013-05-26 |      1 |      2 |   2
2013-05-27 |      4 |      5 |   7

或者:

Group: byDay || bySource* || byWhatever

           | thing1 | thing2 | etc
sourceA    |      2 |      6 |   6
sourceB    |      3 |      1 |   3

扁平化这个 JSON 结构会很困难,并且会产生一个非常大的对象。

我很想利用 Crossfilter 的精彩功能,但我不确定这是否可能。

我是否可以向 Crossfilter 定义/解释我当前的结构?也许还有另一种方法可以解决这个问题?我很容易承认我对维度和许多其他关键的 Crossfilter 概念没有很好的掌握。

4

1 回答 1

6

Crossfilter 作用于记录数组,数组的每个元素通过维度映射到一个或多个值(使用访问器函数定义)。

即使您的数据包含汇总结果,您也可以将其与 Crossfilter 一起使用,但请注意,在技术上不可能合并已跨不同维度汇总的数据,例如合并上面示例中的“按天”和“按源”数据. 您可以为每个聚合维度创建一个交叉过滤器,例如一个用于“按天”的交叉过滤器,并对此运行查询和组,但我不确定与您已有的相比会有多大用处。

至于内存使用,你确定扁平化你的扁平结构真的会有那么大的问题吗?请记住,每条记录(展平数组的元素)都可以包含对嵌套结构中的字符串和其他对象的引用,因此您不一定会占用那么多内存。

于 2013-06-14T21:35:06.967 回答