我目前正在开发一个以简单层次结构存储数据的应用程序。该模型与此类似(用类似C#的语法表示):
class Box {
int Id { get; set; }
}
class Gadget {
int Id { get; set; }
int ParentBox { get; set; }
}
所以,我有几千个盒子,我有零个或多个小工具属于一个盒子。为了访问数据,我创建了一个小型REST API,允许我查询所有框或其中的一部分。通过API的响应是一个数据传输对象,它包含属于该框的所有小工具。典型的JSON答案是:
{ "Boxes": [
{ "Id: 1,
"Gadgets": [
{ "Id": 100 }
{ "Id": 101 }
]
},
{ "Id: 2,
"Gadgets": [
{ "Id": 200 }
{ "Id": 201 }
]
}
}
不幸的是,结果表明性能很糟糕。获取数据的逻辑(再次,使用类似C#的语法):
var boxes = Db.Select<Boxes>();
foreach (var box in boxes) {
var boxDto = new BoxDto();
boxDto.Gadgets = ConvertToDto(Db.Select<Gadget>().Where(q => q.Box == box.Id));
}
我知道我的解决方案很天真。我有成千上万个盒子,每个盒子里有几十个小工具。我的问题是:
任何想法/反馈都将不胜感激。
答案 0 :(得分:0)
一种可能性是假设您使用的是SQL Server,您可以编写一个输出XML的查询。这样,您可以加入数据库中的框和小工具,并返回具有所需层次结构的XML文件。
当您的应用程序获取XML时,将其转换为JSON是一个快速的过程。
或者,对于真的只是JSON,您可以在TSQL中进行字符串连接。基本上组成您自己的JSON并从存储过程返回它。如果层次结构很复杂,它会非常快速地变得非常讨厌。