如果我所说的话没有意义,请询问澄清。
我试图在关系数据库中存储traceroute数据,traceroute数据的结构如下:
public class Traceroute
{
IPAddress origin;
IPAddress destination;
Collection<Hop> hops;
}
public class Hop
{
int[] times;
IPAddress here;
Hop previousHop;
Hop nextHop;
}
现在我正在寻找的是存储这些数据的关系方式,最终发生的事情是我的数据库被彻底烧毁(理论上)。有没有办法正确地,通过正确的意思是最小的空间,将traceroute数据存储在关系数据库中并有效(快速)查询它?
理论表格结构
Traceroutes
(
traceroute_id number,
previousNode varchar2(200), --nullable
nextNode varchar2(200), --nullable
rtt_1 number,
rtt_2 number,
rtt_3 number,
currentNode varchar2(200)
)
答案 0 :(得分:2)
这个问题没有明确的答案。您可以选择多种选项。纯粹的关系,你可能会想出这样的东西(这不会编译/运行,只是为了证明)
TraceRoute (
TraceRouteID INTEGER PRIMARY KEY,
OriginIP NVARCHAR,
DestinationIP NVARCHAR
)
Hop (
HopID INTEGER PRIMARY KEY,
TraceRouteID INTEGER, -- foreign key linking to TraceRoute table PK
HopNumber INTEGER, -- this instead of storing previus and next nodes
Time1 INTEGER,
Time2 INTEGER,
Time3 INTEGER,
Host NVARCHAR
)
请注意,您不需要存储每个跃点相对于彼此的位置。每个跟踪路由请求都包含许多跳,您可以通过跳数来订购。
下一步是编写查询以提取信息。看看性能如何。如果您不满意,请尝试调整您的数据库(索引列等)。如果你仍然不满意,那么合并TraceRoute和Hop表(有时候可以复制一些)。
你真的需要在理论上停止思考并实际尝试它!