我正在创建一种预订系统,并希望以类似于此的格式向用户显示数据:
Hours
ID 0 1 2 3 4 5 6 7 8 9 . .
------------------------------------------------------------
03/09/2015 ID1 ----++++++++++++++++++++++++++++++++++-------
ID2 -----------++++++++++++----------------------
ID3 ----+++++++++++-----------------+++++++++++++
03/09/2015 ID1 ----++++++++++++++++++++++++++++++++++-------
ID2 -----------++++++++++++----------------------
ID3 ----+++++++++++-----------------+++++++++++++
我还控制了公开这些数据的Web服务,所以我试图想出最好的方法(我将使用D3.js来使用这个Web服务)
我可以使用绘图点列表以非常原始的方式公开数据:
var data = [
["01/01/2015 00:00:00", "ID1", 0],
["01/01/2015 00:00:15", "ID1", 0],
...
];
似乎有点浪费,因为会传输大量重复数据。另一个选择是在服务器端打包数据并将其作为“数组映射图”提供,如下所示:
var data = [
{date: "01/01/2015", value: [
{id: "ID1", value: [0,0,0,0,1,1,1,1,1...]},
{id: "ID2", value: [0,0,0,0,0,0,0,0,0...]},
{id: "ID3", value: [0,0,0,0,1,1,1,1,1...]}
},
{date: "01/02/2015", ...
];
所以你有一张地图,其中包含“午夜约会”和地图的值,其中包含“id”键和数组值,其中包含96个布尔值(每15分钟递增1个)。但是,此选项似乎与数据表紧密耦合。
对于现在和可预见的未来,这个表是这个Web服务的唯一消费者,因此耦合它可能不是那么糟糕。另一方面,对表的任何更改都可能会强制我们更改表视图和Web服务。
答案 0 :(得分:1)
首先,我认为值得努力减少似乎有点浪费,因为gzip编码将消除大部分冗余,您应该专注于维护成本。作为协议,您的第二个提案非常具体且不灵活。如果将精度更改为10分钟怎么办?这将花费你一些重写。所以我认为应该在协议中保留一些灵活性。
另一点需要注意的是ISO8601 Time intervals。这样您就可以在时间范围内发送保留的间隔,例如每周:
var data = {
'ID1' : [
'2015-01-01T01:00:00Z/2015-01-01T09:15:00Z',
'2015-01-02T01:00:00Z/2015-02-01T09:15:00Z'
],
'ID2' : [
'2015-01-01T02:45:00Z/2015-01-01T05:30:00Z',
'2015-01-02T02:45:00Z/2015-02-01T05:30:00Z'
],
...
};
但是,再次,我在第一个提案中没有看到任何不好的内容,因为简单性很重要。