SQLiteで株価のデータベース構築

数百社の株価データや計算結果を数十年分にわたって保管・処理することも、十分に対応可能です。

SQLiteの能力と制限

1. データ量

SQLiteは、非常に大きなデータセットを扱うことが可能です。特に株価データのような単純な時系列データは、SQLiteにとって負荷が少ない部類に入ります。

  • ファイルサイズ: SQLiteのデータベースファイルサイズの上限は、約140テラバイト(TB)です。株価データ(1つの取引日あたり数バイトのデータ)の場合、数百万行のデータでも数ギガバイト(GB)程度に収まることが多いため、数十年分の数百社のデータでもファイルサイズ上の問題はありません
  • レコード数: SQLiteのレコード数に理論上の上限はありませんが、非常に大規模なデータセットでも数百万行程度であれば、問題なく動作します。

2. パフォーマンス

SQLiteは軽量で、データの読み込みや書き込みが高速です。ただし、大量のデータを頻繁に更新する場合は、MySQLなどのサーバーベースのデータベースに比べてパフォーマンスが低下する可能性があります。

  • 読み込み: 株価データのような読み取り中心の作業には強く、日々の価格データの追加や計算には十分対応できます。
  • 書き込み: 一度に大量のデータを書き込む(例えば、毎日の新しい株価データを多数の企業分まとめて保存する)場合は、処理時間がかかる場合があります。ただし、毎日少量のデータを追加する程度であれば問題はありません。

3. シンプルな構造

SQLiteはファイルベースのデータベースであり、ファイルを1つの場所に保管するだけでバックアップや移行が簡単に行えます。データ構造がシンプルなため、時系列データの保存に適しています。

SQLiteを使用する際の実践的な方法

  • テーブル設計: 株価データを効率的に保存するために、以下のようなテーブルを設計します。
  • データの長期保存: SQLiteはデータがファイルベースで保存されるため、長期的なデータの保管やバックアップも容易です。例えば、クラウドサービス(OneDriveやGoogle Drive)にファイルを置いておくことで、簡単にバックアップと同期が可能です。

SQLiteが適している場面

  1. データの頻繁な更新が少ない: 株価データは1日に1回の更新で十分なため、頻繁な書き込みが発生しない場合に非常に適しています。
  2. 読み取りがメインの作業: RSIなどの計算は、基本的に過去のデータの読み取りがメインとなるため、SQLiteの高速な読み込みが有効です。
  3. ローカルでデータを管理: ファイルベースでデータが保存されるため、サーバーを立てる必要がなく、ローカル環境でシンプルに管理できます。

MySQLとの比較

  • MySQLが優れている場面: 複数のユーザーが同時にアクセスするシステムや、書き込み頻度が非常に高い場合は、MySQLの方が適しています。また、大規模なデータセットで複雑なクエリやトランザクションが頻繁に発生する場合も、MySQLが強力です。
  • SQLiteが優れている場面: 単一ユーザーで、ローカル環境でのデータ処理を行い、シンプルに扱いたい場合はSQLiteが優れています。セットアップが不要で、パフォーマンスも高く、バックアップも容易です。

具体的にDBeaverで構築

DBeaverを使ってデータベースを構築し始めるための初期設定を、ステップごとに分かりやすく説明します。

今回は、SQLiteを使って進める方法をガイドします(MySQLを使う場合の基本的な流れもほぼ同じです)。

ステップ1: DBeaverを起動

  1. DBeaverを起動します。インストールが完了していれば、デスクトップやアプリケーションメニューから起動できます。
  2. 初期画面の確認:
    • DBeaverを初めて開いたときに、何もデータベースが設定されていない画面が表示されます。
    • 「No active connection」という表示が出ている場合、まだどのデータベースにも接続していないことを意味します。

ステップ2: 新しいデータベース接続の作成

次に、新しいデータベースの接続を設定していきます。

  1. 「Database」メニューを開く:
    • 上部のメニューバーにある「Database」をクリックします。
  2. 「New Database Connection」を選択:
    • メニューから「New Database Connection(新しいデータベース接続)」をクリックします。
  3. SQLiteを選択:
    • 新しいウィンドウが表示され、たくさんのデータベースの種類が出てきます。この中から「SQLite」を探してクリックします。
      • 検索バーで「SQLite」と入力するとすぐに見つかります。
  4. Nextをクリック:
    • 「Next」ボタンをクリックして、次の設定画面に進みます。

ステップ3: SQLiteデータベースファイルを作成

  1. 新しいデータベースファイルの作成:
    • 「Database file」という欄に、SQLiteのデータベースファイルを指定する場所があります。ここで、新しいデータベースファイルを作成します。
    • Browse」ボタンをクリックして、自分のパソコン内の好きな場所に新しいファイルを保存します。ファイル名は自由に決めて「.db」を末尾につけます(例: stocks.db)。
  2. 「Finish」をクリック:
    • データベースファイルを指定したら、「Finish」ボタンをクリックします。これで、新しいSQLiteデータベースが作成されます。

ステップ4: テーブルを作成

データベースを作成したら、次はデータを保存するための**テーブル(表)**を作成します。

  1. 作成したデータベースに接続:
    • 左側に「Database Navigator」というエリアがあり、先ほど作成したデータベースが表示されているはずです。これを右クリックします。
    • 「SQL Editor」→「New SQL Script」を選び、新しいSQLスクリプトウィンドウを開きます。
  2. テーブルを作成するSQLコマンドを入力:
    • 次に、以下のようなSQLコマンドを入力します。これは、株価データを保存するためのテーブルを作成するための命令です。
CREATE TABLE stocks (
    symbol TEXT,
    date DATE,
    adj_close REAL,
    PRIMARY KEY (symbol, date)
);
    • 解説:
      • symbol: 株の銘柄コード(例: 4021.T など)。
      • date: 株価の日付。
      • adj_close: 調整後終値(株価の値)。
  1. SQLコマンドを実行:
    • 上部の「Run」ボタン(緑色の三角形のアイコン)をクリックして、テーブル作成のコマンドを実行します。
    • 「Success」と表示されれば、テーブルが無事に作成されています。

ステップ5: データの確認

テーブルが作成されたら、次にデータが正しく保存されることを確認します。

  1. テーブルを確認する:
    • 左側の「Database Navigator」にあるデータベース名をクリックして展開すると、「stocks」というテーブルが表示されているはずです。
    • このテーブルを右クリックして「View Data」を選択すると、今後保存されるデータを確認する画面が表示されます(まだ何もデータが入っていない状態です)。

ステップ6: データの挿入(テスト)

次に、実際にデータを入れてみます。

  1. データ挿入用のSQLコマンド:
    • 再度、SQLスクリプトウィンドウを開き、以下のコマンドを実行します。
INSERT INTO stocks (symbol, date, adj_close)
VALUES ('4021.T', '2024-10-20', 4500.75);
    • このコマンドは、銘柄「4021.T」の2024年10月20日の株価データ(4500.75)を挿入しています。
  1. データの確認:
    • もう一度「View Data」でテーブルを確認すると、今入力したデータが表示されるはずです。

ステップ7: 毎日のデータ更新

ここまでで、SQLiteにデータベースが作成され、テーブルが作成され、データも挿入できました。今後は、yfinanceなどから取得した株価データを毎日このテーブルに追加することができます。

  1. 新しいデータを追加:
    • 毎日のデータを追加する際も、INSERT INTOコマンドで日付ごとの株価を挿入していきます。プログラムで自動化も可能です。

ステップ8: バックアップ(オプション)

SQLiteはファイルベースなので、データベースのファイルをそのままコピーしてバックアップできます。

例えば、作成したstocks.dbファイルをOneDriveやGoogle Driveに保存しておくと、どこからでも同じデータベースを使えます。


これでDBeaverとSQLiteを使って株価データベースを構築し、簡単にデータを管理・更新できるようになりました。次は、yfinanceと組み合わせて自動的にデータを取得し、DBeaverのデータベースに保存する方法に進めます。