5

私は最近、140 を超える企業の株価を保存するのに適したデータベースをモデル化する任務を与えられました。データは、これらすべての企業から毎日 8.5 時間、15 分ごとに収集されます。私が今直面している問題は、データベースをセットアップして、このデータを指定して高速な検索/フェッチを実現する方法です。

1 つの解決策は、次の列を含む 1 つのテーブルにすべてを格納することです。

| Company name | Price | Date | Etc... |

または、会社ごとにテーブルを作成し、データが収集されたときの価格と日付 (および atm がわからないその他のパラメーター) を保存することもできます。

この種のソリューションについてどう思いますか? 問題が十分に詳細に説明されていることを願っています。それ以外の場合はお知らせください。

他の解決策は大歓迎です!

4

5 に答える 5

6

すでに述べたことに加えて、次のことを言いたいと思います: 「会社名」や「Ticker Symbol」などを主キーとして使用しないでください。お気づきかもしれませんが、株価には無視されがちな 2 つの重要な特徴があります。

  • 一部の企業は複数の証券取引所に上場することができるため、証券取引所ごとに異なる見積価格を持っています。
  • 一部の企業は、同じ証券取引所で複数回取引されていますが、異なる通貨で取引されています。

その結果、適切に一般的なソリューションでは、(ISIN、通貨、証券取引所) トリプレットをクオートの識別子として使用する必要があります。

于 2014-01-06T13:56:20.913 に答える
6

生成される可能性が高い多数のレコードを考えると、パフォーマンスについて懸念していると思います - 140 社 * 4 データ ポイント/時間 * 8.5 時間 * 250 取引日/年 は、年間約 120 万のデータ ポイントを見ていることを意味します。 .

最新のリレーショナル データベース システムは、1 つのテーブルでその数のレコードを簡単に処理できます (いくつかの重要な考慮事項に従う必要があります)。100 年分のデータ ポイントを格納することに問題はないと思います。

したがって、はい、最初の設計がおそらく最適です。

会社名 | 価格 | 日付 | など... |

会社名と日付でインデックスを作成します。これにより、次のような質問に答えることができます。

  • 会社 x の最高株価はいくらでしたか
  • 日付 y における会社 x の株価はいくらでしたか
  • 日付 y の最高株価はいくらでしたか

パフォーマンスの問題を防ぐために、テスト データベースを構築し、そこにサンプル データを入力して ( dbMonsterなどのツールを使用すると簡単に作成できます)、実際のシステムに対して実行するクエリを構築します。データベース システムのチューニング ツールを使用して、これらのクエリやインデックスを最適化してください。

于 2013-03-23T15:08:18.407 に答える
4

最初のより重要な質問は、このテーブルに対して実行されるクエリの種類と使用パターンは何かということです。これはオンライン トランザクション処理 (OLTP) アプリケーションで、クエリの大部分が 1 つのレコードに対して行われるか、それともレコードの小さなセットに対して行われるか? または、ほとんどのクエリが集計を生成して分析を行うために、非常に大きなデータセットを読み取って処理する必要があるオンライン分析処理アプリケーションです。これら 2 つの非常に異なるタイプのシステムは、異なる方法でモデル化する必要があります。

それが最初のタイプのアプリ (OLTP) である場合は、最初のオプションの方が適していますが、テーブルに配置するインデックスのタイプを決定するには、使用パターンとクエリのタイプが依然として重要です。

それが OLAP アプリケーションである場合 (数十億の株価を格納するシステムは OLAP アプリのように聞こえます)、設定したデータ構造は、事前に集計されたデータ値を格納するように整理されているか、さらには用途が広がる可能性があります。スター スキーマに基づくOLAP キューブのような多次元データベース。

于 2013-03-23T15:01:06.300 に答える
3

それらを 1 つのテーブルにまとめます。最新の DB エンジンは、指定したボリュームを簡単に処理できます。

行ID | 証券コード | priceTimeInUTC | 価格コード | アスクプライス | 入札価格 | 音量

  • rowid: ID UniqueIdentifier。
  • Company の代わりに StockCode。企業には複数の種類の靴下があります。
  • PriceTimeInUTC は、任意の日時を特定のタイムゾーンに標準化することです。
  • また、datetime2 (より正確)。
  • PriceCode は、オプション/先物/CommonStock、PreferredStock などの価格を識別するために使用されます。
  • AskPrice は購入価格です
  • BidPrice は販売価格です。
  • ボリューム (売買) が役立つ場合があります。

個別に、StockCode テーブルと PriceCode テーブルを用意します。

于 2013-03-23T15:19:32.313 に答える
-2

それはブルートフォースのアプローチです。検索可能な要素を追加すると、すべてが変わる可能性があります。より柔軟で洗練されたオプションは、任意の量のデータにスケーリングできるスター スキーマです。私はこれに取り組んでいる民間団体です。

于 2013-06-12T20:26:14.397 に答える