在关系数据库中存储traceroute数据

时间:2013-01-16 15:00:54

标签: sql database-design relational-database rdbms

如果我所说的话没有意义,请询问澄清。

我试图在关系数据库中存储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)
)  

1 个答案:

答案 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表(有时候可以复制一些)。

你真的需要在理论上停止思考并实际尝试它!