1

私は、研究所の Wi-Fi ルーターに Wi-Fi 対応デバイスを関連付ける最大 1 週間の生ログを持っています。今のところ、次のようにデータベースに配置する予定です
: 列を持つ1つの大きなテーブル:

  • ルーターの MAC アドレス
  • デバイスの MAC アドレス
  • タイムスタンプ

データベースは、特定のデバイスの 1 週間の接続履歴を取得するためだけに照会されます。
レコードが 1 週間経過すると、削除されるか、別の場所に移動されます。

現在、デバイスの数は 800 から 2000 の間である可能性があります。したがって、デバイスごとに個別のテーブルを用意するのは意味がありませんか?

Wi-Fi ルーターの数は約 40 未満だと思います。

最終的に、1 週間のログは 1 GB 未満になります。

私は今のところSQLデータベースを使用しています(本当にこれに固執していて、変更したくありませんが、大幅に改善された場合は代替案について言及してください)。

今私の質問は、(1 つのテーブル) 効率的な時間的アプローチです。クエリを実行して結果を返すまでの時間です。 スペースと冗長性は問題ではなく、クエリが返される速度だけです*。

また、そのようなシステムをスケーラブルにするためにどのような手段/変更を行うことができるかについてコメントしてください。

*保守が困難になるほど複雑であってはなりません。

4

2 に答える 2

1

これを他の方法で分割する必要がある理由はわかりません。ルーターとデバイスのアドレスを日時スタンプとともに保存することが唯一の目的である場合、他に何もする必要はありません。1つのテーブルで十分です。

正規化の背後にある全体的な考え方 (はい、ここでは単純化しすぎています) は、複数のテーブルで同じデータを何度も繰り返す必要がないということです。

たとえば、これを保存したいとします。

Router | Mac Address | Device Type | IP Address | Device Model | Device Serial Number

これらすべてを指定し、特定のDeviceIDものと言うものを持つルーター/デバイステーブルを用意することをお勧めします

DeviceID | TimeStamp

これを行うと、ログ エントリごとにすべての情報を毎回繰り返す必要がなくなります。

お役に立てれば...

于 2013-10-28T17:28:46.977 に答える
1

データを保存および削除する方法により、タイムスタンプでパーティション分割された単一のテーブルを作成することをお勧めします。この方法の利点:

  • データのアーカイブ (パーティションの削除、パーティションの移動) は、大規模な DELETE よりもペナルティが少なくなります。
  • クエリを実行するテーブル サイズが小さくなるため、クエリは高速になります (注意事項は常に適用されます)。
  • タイムスタンプでパーティション分割し、クエリでそのパーティション分割キーを使用すると、制約の除外が有効になります。つまり、対象のデータを含むパーティションでクエリが実行され、他のデータは計画から破棄されます。

その上、クエリのデータをすばやく取得するために特別に設計されたインデックスを使用して、複数の列にインデックスを付けることができます。これらのインデックスがどのようになるかは、DDL、サンプル データ、またはクエリがないため、現時点では言うことができません (これは追加の質問になる可能性があります)。静的データ (WORM) があるため、CLUSTERed インデックスを使用することも役立ちます。

INET タイプで非常に高速なルックアップが必要な場合 (組み込みのネットワーク データタイプが十分に高速でない場合)、彼らは IP4R データ タイプを調べています: http://pgfoundry.org/projects/ip4r/

于 2013-10-28T18:09:00.477 に答える