質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

解決済

大量データベースの設計について

shimotani1028
shimotani1028

総合スコア4

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

2回答

1評価

1クリップ

283閲覧

投稿2022/06/21 00:40

編集2022/06/22 13:06

最近データベースを学んでいるものです。
現在テスト中のデータベースの対象テーブルは以下のように時系列と計測器の計測値データとなっております。

テーブル名:table01

計測時間計測器1計測器2計測器1000
2021-01-01 0:00:001.012.011.41
2021-01-01 0:01:001.012.011.41

横持ちにしているのはデータ容量を少なくするためです。
計測ピッチは短いところで1分以下の時もあり、1年で20万行ほどになります(最大で10年程度)。
ここから例えば計測器1の1年分のデータを抽出しようとすると、どうしても初回(おそらく共有メモリに対象テーブルがないとき)に数秒~十数秒かかってしまいます。
ただ実際には初回からもっと高速にデータの抽出をして、時系列グラフの描画をしたいと考えております。
よく使うsql文は任意の期間を抽出する以下のようなものです。

postgresql

select 測定器1 from table01 where 計測時間 >= '2021-01-01 0:00:00' and 計測時間 < '2022-01-01 0:00:00';

例えば以下のサイトの日経平均のチャートを見ると、"1日"、"1年"、"10年"等のタブを切り替えても、とても早くチャートが描画されます(1日の1分足が選択できるので、元データはかなり大きなデータだと思っております)。
日経平均 - マーケット|SBI証券

そこで質問なのですが、
こういったデータベースのテーブルの設計をする際は、高速にアクセスするためにそもそも初めから"1日"、"1年"、"10年"のテーブルを分けているのか、"10年"の大量の元データからその都度特別な方法で高速に"1年"、"5年"等のデータを抽出しているのか、どちらなのでしょうか。それとも他の方法があるのでしょうか。教えていただければ幸いです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

gU8C8Nud4E8p3uW

2022/06/21 00:57

計測器データがあとから変更が加わることがないという前提があれば、使用頻度に応じたデータの集約がなされても良さそうな気がしますが。年単位でしか使わなければ年単位に集約したデータを用意するのは当然。
kikukiku

2022/06/21 01:02

そこを考えるのがプログラマの仕事かと思います。 横軸が10年だったとして、横軸のドット数が100ドットの場合、 100個以上のデータをDBから取得したとしても それを表示する能力が画面にないということになります。 ということは無駄ということですので、 描画を早くすることができる部分ではないかと思います。 DBから表示に最低限必要な100個のデータのみ取得するのであれば 高速になるでしょう。 また自身では書いていますが、10年用のテーブルを準備することも 表示に速さにつながると思います。 まだまだいろいろなアイデアがあると思います。 自身でアイデアを出してみて、それを検証し、満足な性能がでればOkですし、 満足しなければ、自身のアイデアを提示したうえで もっと改善するためにはどうしたらいいかアイデアを募ってみるのが良いと思いました。
shimotani1028

2022/06/21 01:07

いろいろな方法を試してみたいと思います。 ありがとうございます。
kikukiku

2022/06/21 01:15

頑張ってください。 データの削減を考え始めると、どのように削減するのかという疑問がでてくると思います。 1年分のデータから1個のデータを抽出したい場合、 最大値なのか、最小値なのか、平均なのか、そのほかなのか。 それはどのような目的のグラフを表示したいのかということに行きつくと思います。 楽しいと思うので、いろいろと考えてみると良いと思います。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます