0

私が言っていることが意味をなさない場合は、説明を求めてください。

リレーショナル データベース内に 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)
)  
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 リクエストには、ホップ番号で並べ替えることができるホップ数が含まれています。

次のステップは、情報を抽出するためのクエリを作成することです。パフォーマンスの様子をご覧ください。満足できない場合は、データベースを調整してみてください (インデックス列など)。それでも問題が解決しない場合は、TraceRoute テーブルと Hop テーブルをマージします (少し重複しても問題ない場合があります)。

本当に理論的に考えるのをやめて、実際にやってみる必要があります!

于 2013-01-16T15:29:48.707 に答える