我设计了JSON representation of a mailbox so that I can look up mails easily,例如mailjson[UID].Body
。
然而,在查看Angularjs和Ember,模板化MVC JS引擎之后,似乎JSON应该采用以下格式:
[{
"id": 1,
"body": "Blah blah blah..."
},
{
"id": 2,
"body": "More blah foo blah"
},
{
"id": 3,
"body": "Hopefully you understand this example"
}]
然后有一些findAll(id)函数根据所需的id来获取项目,它遍历JSON。所以现在我想知道我的JSON设计是否有价值?我做错了吗?为什么人们不使用我用JSON的dict查找设计?
任何其他提示,以确保我有一个良好的数据结构设计,我将不胜感激。
答案 0 :(得分:8)
在JSON中存储大表的最佳做法是使用数组。
原因是当将JSON数组解析为内存数组时,构建映射没有速度损失。如果您需要通过多个字段构建内存索引以便快速访问,则可以在加载期间或之后执行此操作。但是如果像你一样存储JSON,你就没有选择在不构建地图的情况下快速加载,因为JSON解析器总是必须根据你的结构构建那个巨大的id图。
如何在内存中存储数据的结构不必(也不应该)与磁盘上的存储结构相同,因为无法序列化/反序列化内部JavaScript映射结构。如果可能,那么就像MS SQL Server存储表和索引一样序列化和存储索引。
但是如果你使用的框架强制你在内存和磁盘中拥有相同的结构,那么我支持你选择在一个大对象中使用id作为键,因为这样就可以更容易地将JSON请求中的id传递给服务器和从服务器传递到使用电子邮件项目执行任何操作或在UI中更新它的状态,假设服务器和浏览器都在内存中保留重要的电子邮件项目列表。