0

だから、私は次の問題があります:

私はいくつかの時系列分析を行っており、10 ^ 7 のアイデンティティまたは ID (たとえば、国の各携帯電話) のようなモデルを持っています。

各 Id には関連付けられたイベント (たとえば、日) があり、最大 10^4 のイベントにまたがることができます。イベントと ID ごとに、異なる「属性」があります (たとえば、その日 Y に電話 X から送信されたメッセージの数)。

このような量の情報を処理するための mysql データベースを設計しようとしています。私は主に時間分布のクエリを実行することに関心があります (たとえば、その特定の日のメッセージ数、または X 日と Y 日の間のアクティブな電話の数)。

  1. 最初は、異なる値ごとにテーブルを使用していました。各テーブルでは、行が ID であり、各列が 1 日です。N 個の異なる属性がある場合、N 個の異なるテーブルを持つことになります。これにより、各テーブルに 10^4 列が存在するという問題が生じます。それが良い/標準的/効率的な慣行であるかどうかはわかりません。

  2. 2 つ目は、10^7*10^4 行 (いわゆる多対多の関係) を持つ 1 つのテーブルを 1 つ持つことでした。次の列は、その特定の日にその ID に関連付けられた属性です。

「歴史的な理由から」私はすでに mysql 以外のデータベースを作成しており (大量の .txt ファイルを使用)、それを移行しようとする前に、それが本当に価値があるかどうかを知りたいと思っています。ご存じかもしれませんが、現在、私の *.txt データベースのクエリは可能な限りコストがかかる可能性があります。通常、クエリに対してすべての .txt do を開く必要があります。これは、クエリごとに 10 ~ 30m 程度に変換されます。したがって、その制限を下回る提案は、実際には私の問題に非常に役立ちます。

時間をありがとう、ホルヘ

4

1 に答える 1

0

リレーショナル データベースにかなり複雑な情報マトリックスを格納しようとしています。開始する前に、いくつかの質問に答える必要があります。

  • 特定の日に欠落しているデータはありますか? つまり、id=x が item=y の実際の値を持っている可能性がありますが、その値は何らかの操作上の理由でデータベースから欠落しています。
  • アイテムのほとんどまたはすべてが、特定の ID の特定の日に値を持っていますか? つまり、疎行列の問題で遅れていますか?

アイテムを別々の列に保存することは、初心者ではありません。MySQL には 1 行あたり 4,096 列というハード リミットがあり (こちらを参照)、これは 10^4 未満です。

各行には id と item id が必要であり、値は型の一貫性を保つ必要がありますが、より正規化されたアプローチが実行可能であるように思われます。数値を保存している場合は問題ありません。整数として保存した方がよいもの、金額として保存した方がよいもの、文字列として保存した方がよいものがある場合、問題が生じる可能性があります。

ハイブリッドアプローチが機能する可能性があると思います。1 つのテーブルに格納できる、頻繁に使用される項目がいくつかある場合があります。正規化されたアプローチを使用すると、さらに多くのアイテムが保存されます。次に、アクセスを最適化するためのパーティショニング戦略を検討できます。

そのような戦略を考案するのに十分な詳細を提供していません。多くの場合、アプローチはデータを時間で分割することです。ただし、この場合は、データをアイテムごとにパーティション分割して、すべての値をパーティション内で取得できるようにすることをお勧めします。

于 2012-11-12T21:41:46.537 に答える