• ベストアンサー

データの持ち方

はじめまして。 データベースの知識があまりないので データの持ち方で悩んでいます。 過去のデータから、同じような値の変化を検索し、次の値を予測したいのですが どういう風にデータを持てば効率がいいのか、どういうSQLで取得したらいいのか思いつきません。 例えば、現在10→12→10→8→14という変化データの場合±1の誤差で検索し、次の値を取得したいです。 過去データに以下のようなデータがある場合、 10→12→10→8→14→15→13→11→11→9→15→18→20→19→15→14 1個目~5個目のデータの次の値の「15」と7個目~11個目のデータの次の値の「18」を取得したいです。 条件としては以下のようになります。 ・ある間隔で値を記録し、値の前後関係が取得できる ・検索は連続する値(5~10個程度)を過去データからそれに近い変化の次の値を取得したい ・データ数は100万件位 ・検索時間重視 説明下手でわかり難くて申し訳ないのですが、皆様の知恵をお貸しください。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

SQLにおいてデータ同士の前後関係というのはデータ管理上あまり 効率的にデータをもっているわけではありません。 それを考えるとデータの前後で差をとることは非効率なSQLを 書かざるを得ないでしょう。 もしやりたいのであれば、データ自体に「前のデータ」という フィールドをつくり前のデータをもつか、連番でIDフィールドを もち、1ズラしてinner join するかのどちかかになるのでは? 前者の方が時間は短縮されると思いますが 後者の方が汎用性が高く、データ管理もらくになると思います

hideki744
質問者

お礼

36万件ほどランダムなデータ登録して実験してみました。 取得できる件数が多いと帰ってこないですが 誤差を少なくすれば1秒くらいで取得できたので データが増えてきたら誤差を少なくすることで対応できそうです。 ありがとうございました。

hideki744
質問者

補足

回答ありがとうございます。 やはり、難しそうですね。 「前のデータ」を持つには連続数が5~10と不確定な状態なので 後々、15にしたい場合に変更が難しい状態になりますので できれば連番のIDの方にしたいですが inner joinを複数書く場合、100万件あっても大丈夫でしょうか? データの状態や、マシンスペックにもよるでしょうが 目標は1秒くらいで検索したいです。 遅くても10秒以内で表示させたいですね。 現実的でしょうか? ちなみにマシンスペックは CPU:Core 2 Duo E6400 メモリ:1G(場合によっては増やします) OS:Fedora Core 6 ※DB専用ではなくJavaで作ったWebサービスなども動かします

その他の回答 (1)

回答No.1

>現在10→12→10→8→14という変化データの場合±1の誤差で検索し、次の値を取得したい 「±1の誤差」とは、具体的にどういうアルゴリズムになるのか示してください。 >ある間隔で値を記録し、値の前後関係が取得できる 前後関係とは? n番目のデータを検索という意味なら、簡単に行えます。 「~関係」と言われると、何を示しているのか分からないと、具体的なアドバイスはできません。 >検索は連続する値(5~10個程度)を過去データからそれに近い変化の次の値を取得したい 「それに近い変化」とは、どういう意味でしょうか? 具体的にどういうアルゴリズムか分からなければ、アドバイスのしようがありません。 MySQLに関する質問をする場合は、使用バージョンを明記してください。~4.0、4.1、5.0~で、機能が大幅に違います。

hideki744
質問者

補足

>「±1の誤差」とは、具体的にどういうアルゴリズムになるのか示してください。 10→12→10→8→14を取得した場合 ばらばらで考えると、まず、10の±1の値を検索します (値 >= 9 and 値 <= 11) その結果の中から、次の値が12の±1の値を検索します (1回目検索で取得した値の次の値 >= 11 and 1回目検索で取得した値の次の値 <= 13) という具合に、5回~10回繰り返したような結果をできれば1回のSQLで取得したいです。 >>ある間隔で値を記録し、値の前後関係が取得できる >n番目のデータを検索という意味なら、簡単に行えます。 >「~関係」と言われると、何を示しているのか分からないと、具体的なアドバイスはできません。 n番目のデータを検索という意味です。 >「それに近い変化」とは、どういう意味でしょうか? >具体的にどういうアルゴリズムか分からなければ、アドバイスのしようがありません。 上記で書いた「±1の誤差」です。 >MySQLに関する質問をする場合は、使用バージョンを明記してください。~4.0、4.1、5.0~で、機能が大幅に違います。 現在は「5.0.27」です。 仕事でしているわけではなく、個人的に作成しているので このバージョンなら実現できるというのがあれば変更は可能です。

関連するQ&A