用于构造用于查询的JSON数据的有效方法

时间:2013-10-22 21:38:06

标签: javascript arrays json csv data-structures

我正在尝试提出一种在JSON中存储静态数据的有效方法,以便它可以在客户端的查询中使用。

目前,这些数据包含大约60个CSV文件,每个文件大约有一个。每个2000-2200个条目。我解析这个数据服务器端并有一个web服务来处理来自客户端的查询。如上所述,我希望能够将其移至客户端,以便Web应用程序可能使用应用程序缓存脱机工作。

数据的样本如下:

Battle Axe,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
150,19EK,21EK,23EK,25EK,33ES,33ES,36ES,36ES,34ES,36ES,40ES,40ES,34ES,34ES,39ES,42ES,38ES,41ES,44ES,46ES
149,19ES,21ES,23ES,25ES,33ES,33ES,36ES,36ES,34ES,36ES,40ES,40ES,34ES,34ES,39ES,42ES,38ES,41ES,44ES,46ES
148,19EK,21EK,23EK,25EK,33ES,33ES,36ES,36ES,34ES,36ES,39ES,40ES,34ES,34ES,39ES,42ES,37ES,40ES,44ES,45ES
147,19ES,21ES,23ES,25ES,33ES,32ES,35ES,35ES,33ES,35ES,39ES,39ES,33ES,33ES,38ES,41ES,37ES,40ES,43ES,45ES

我最初转换为JSON的尝试基于以下内容:

  • 每个文件都是一个JSON对象(让我们称这个对象'武器')
  • 文件中的每一行都是另一个存储在相应武器对象
  • 下的数组中的JSON对象
  • 行的每个条目都存储在行对象
  • 下的固定长度数组中
  • 所有'武器'对象都存储在一个数组中。

这意味着我有一个由大约组成的阵列。 60个对象,其中平均有100个对象存储在其中。这100个对象中的每一个都有一个由20个对象组成的数组,每个条目由实际值和一些额外的元数据组成。正如你所看到的,我已经处于120K的对象......得到的缩小的json字符串是3mb。以下小样本:

var weapon = 
{
 Name: 'Broadsword',
 HitEntries: [ 
 {
    High: 150,
    Low: 150,
    Unmodified: false,
    Hits: [ { Hits: '12', Critical: 'CK', Fail: false},...,{ Hits: '1', Critical: '', Fail: false}]
 }, 
 ...
 {
    High: 50,
    Low: 47,
    Unmodified: false,
    Hits: [ { Hits: '3', Critical: '', Fail: false}] 
 }
 ]
}

下面将运行一个查询示例。它将基于上面显示的示例数据csv:

  • 选择了战斧武器
  • 为卷(行)选择值147
  • 为装甲类型(列标题)选择了9的值

以上结果应为 39ES (行与标题之间的交叉引用)

此时我认为在走这条道路之前得到一些建议可能是一个好主意。感谢任何输入=)

1 个答案:

答案 0 :(得分:0)

您可以在此处进行一些优化:

  1. 尽可能使用WebSockets传输数据
  2. 将数据转换为TypedArrays(blob) - 您最终会处理类似10K文件的内容。
  3. 使用索引DB查询是否需要