用于构建用于查询的 JSON 数据的有效方法
Effecient method for structuring JSON data for querying
我正在尝试提出一种在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(行和标题之间的交叉引用)
在这一点上,我决定在走这条路之前获得一些建议可能是个好主意。任何输入都值得赞赏=)
您可以在此处进行一些优化:
- 如果可能,使用 WebSocket 流式传输数据
- 将数据转换为TypedArrays(blob) - 你最终会处理一个10K文件。
- 如果需要,使用索引数据库进行查询
相关文章:
- Regex用于有效和无效的电子邮件地址
- Javascript正则表达式,用于检查字符串是否为有效数字
- 我的标记在 jsfiddle 中有效,但不适用于任何浏览器
- 使用 HTML5 更改<源> 音频在 Chrome 中有效,但不适用于 Safari
- 用于散列有效负载发布数据的最佳加密货币
- 为什么这种用于计算数组重复并将其存储到对象中的方法有效
- 为什么从位置哈希中选择下拉列表在 Chrome 上有效,但不适用于 Firefox、IE 或 Safari
- 用于构建用于查询的 JSON 数据的有效方法
- Ajax 构建关系按钮有效,用于显示引导模式的第二个按钮有效,但两者不能协同工作
- Javascript切换图像边框在Firefox中有效,但不适用于IE
- 来自 jquery 的 toggleClass() 不适用于有效的选择
- 用于验证预言机编号的有效正则表达式
- 有效的javascript算法,用于从数组中选择项目,其中每个条目具有不同的权重
- 这个用于编辑图像的javascript弹出框在firefox和chrome中有效,但在InternetExplorer中
- 有效,不适用于IE8
- 引导工具提示CSS更改在文件中有效,但不适用于jQuery
- javascript中if(a>b)的有效替代方案,用于检查变量范围
- .hooper()有效,但不适用于每个单独的项
- Angularjs 量角器:用于排除嵌套元素的有效选择器
- 将非用户字段添加到有效负载中以用于JWT令牌