JavaScript – Crossfilter是否需要平面数据结构?

前端之家收集整理的这篇文章主要介绍了JavaScript – Crossfilter是否需要平面数据结构?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我发现Crossfilter的所有示例都使用如下这样的平面结构:
  1. [
  2. { name: Rusty”,type: human”,legs: 2 },{ name: Alex”,...
  3. { name: Fiona”,type: plant”,legs: 0 }
  4. ]

要么

“日期”,“开放”,“高”,“低”,“关闭”,“卷”,“oi”11/01 / 1985,115.48,116.78,116.28,900900,0 11/04/1985,117.07,115.82,116.04,753400,0
11月5日/ 1985,116.57,115.88,116.44,876800,0

我有数百MB的平面文件,我处理以产生一个1-2MB的JSON对象,结构大致如下:

  1. {
  2. "Meta": {"stuff": "here"},"data": {
  3. "accountName": {
  4. // rolled up by week
  5. "2013-05-20": {
  6. // any of several "dimensions"
  7. "byDay": {
  8. "2013-05-26": {
  9. "values": {
  10. "thing1": 1,"thing2": 2,"etc": 3
  11. }
  12. },"2013-05-27": {
  13. "values": {
  14. "thing1": 4,"thing2": 5,"etc": 6
  15. }
  16. }
  17. // and so on for day
  18. },"bySource": {
  19. "sourceA": {
  20. "values": {
  21. "thing1": 2,"thing2": 6,"etc": 7
  22. }
  23. },"sourceB": {
  24. "values": {
  25. "thing1": 3,"thing2": 1,"etc": 2
  26. }
  27. }
  28. }
  29. }
  30. }
  31. }
  32. }

我想显示的表格如下:

  1. Group: byDay* || bySource || byWhatever
  2.  
  3. | thing1 | thing2 | etc
  4. 2013-05-26 | 1 | 2 | 2
  5. 2013-05-27 | 4 | 5 | 7

要么:

  1. Group: byDay || bySource* || byWhatever
  2.  
  3. | thing1 | thing2 | etc
  4. sourceA | 2 | 6 | 6
  5. sourceB | 3 | 1 | 3

展开这个JSON结构将是困难的,并产生一个非常大的对象.

我很乐意利用Crossfilter的精彩功能,但我不确定是否有可能.

我可以定义/解释我目前的结构到Crossfilter吗?也许还有另一种方法可以解决这个问题?我很容易承认,我对尺寸和许多其他重要的Crossfilter概念没有很好的把握.

解决方法

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

即使您的数据包含聚合结果,也可以使用Crossfilter,但是请注意,在不同维度上合并已汇总的数据在技术上是不可能的,例如在上面的示例中组合“按天”和“按源”数据.您可以为每个聚合维度创建一个Crossfilter,例如一个用于“按天”,并在此上运行查询和组,但我不知道与您已经拥有的比较有多么有用.

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

猜你在找的JavaScript相关文章