【问题标题】:Storing traceroute data within a relational database在关系数据库中存储 traceroute 数据
【发布时间】:2013-01-16 15:00:54
【问题描述】:

如果我说的没有道理,请要求澄清。

我正在尝试将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)
)  

【问题讨论】:

  • 您能提供您创建的表结构吗? “吹爆”是什么意思?

标签: sql database-design relational-database rdbms


【解决方案1】:

这个问题没有明确的答案。您可以选择许多选项。纯粹的关系你可能会想出这样的东西(这不会编译/运行,只是为了演示)

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

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

【讨论】:

  • 好吧,与其说是理论上的想法,有人决定将其推入一个几乎无法查询的内存结构中。