0

如果我所说的没有意义,请要求澄清。

我正在尝试将 traceroute 数据存储在关系数据库中,traceroute 数据的结构如下:

public class Traceroute  
{
    IPAddress origin; 
    IPAddress destination;  
    Collection<Hop> hops;  
}

public class Hop  
{  
     int[] times;  
     IPAddress here;  
     Hop previousHop;
     Hop nextHop;
}  

现在我正在寻找的是一种存储这些数据的关系方式,最终发生的是我的数据库被严重破坏(理论上)。有没有办法正确地(正确地我的意思是最小的空间)将跟踪路由数据存储在关系数据库中并有效(快速)查询它?

理论表结构

Traceroutes  
(  
    traceroute_id number,
    previousNode varchar2(200), --nullable  
    nextNode varchar2(200), --nullable  
    rtt_1 number,  
    rtt_2 number,  
    rtt_3 number,  
    currentNode varchar2(200)
)  
4

1 回答 1

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 表(有时可以进行一些重复)。

真的,您需要停止理论上的思考并实际尝试一下!

于 2013-01-16T15:29:48.707 回答