Blog-O

個人の検証ブログ。Oracle Cloud Infrastructure がメイン。Oracle Databaseが好き。

有名どころのデータベースの違い

有名どころのデータベースの違いを調べてみました。

調査対象は、DB-Engines Ranking の上位5個とします。

  1. Oracle Database

  2. MySQL

  3. Microsoft SQL Server

  4. Postgre SQL

  5. MongoDB

まずは、それぞれの特徴とマニュアルまとめてみます。

1. Oracle Database

Oracle社が開発・販売しているリレーショナル・データベース

    • 特徴

      • 優れたロック機能

        • 行レベルロック

          • トランザクションによってアクセス中の行のみをロックする

          • 複数のユーザーが同一の表の別の行に同時にアクセス出来るので、パフォーマンスが大幅に向上する

        • 読み取り一貫性

          • 同時実行性とデータの一貫性を確保している
            (UNDO表領域に更新前確定データを一時的に保存することで対処している)

      • 管理の自動化

        • メモリ管理の自動化

          • 昔は共有メモリとUNDO領域の管理にデータベース管理者は悩まされていたが、OracleDB自身が自動的にチューニングしてくれる

        • ディスク管理の自動化

          • 物理ディスクなどの記憶域をASMで管理することで、不可分散を考慮しながら自動でデータを配置してくれるので、どのディスクに何を格納するかを意識する必要がない

        • 索引の自動化

          • Automatic Indexing機能で、データベースの利用状況に応じて索引の作成を自動で実施できる

        • メンテナンスの自動化

          • 統計情報の収集や、チューニングアドバイザによる高付加のSQLのパフォーマンス調査と推奨事項の生成が自動で出来る

      •  堅牢性が高い

        • 複数のサーバで1つのデータベースを構成するクラスタ環境"RAC"を採用すると、負荷分散、拡張性向上、耐久性向上が見込める

        • データベースを遠隔地に複製する"DataGuard"を採用すると、災害対策の環境を準備できる

        • コンプライアンス要件を満たすための高度なセキュリティ機能を実装している(暗号化、データマスキング、キー管理、行列レベルのアクセス制御、アクティビティの監視、ログ監査 etc)

           

      • マルチプラットフォーム

        • Winsows/Linux等どのプラットフォームでも全く同じDBが動作する

    • マニュアル
      Oracle Database ドキュメント | Oracle Technology Network | Oracle 日本

 

2. MySQL

Oracle社が管理しているオープンソース型のデータベース管理システム

3. Microsoft SQL Server

Microsoft社が開発・提供している法人向けのリレーショナル・データベース

    • 特徴

      • WindowsOSとの相性が良い
        • WindowsOSと相性が良く、マウスでの作業が出来るなど操作性は高い
        • 新しいバージョンでは、Linuxでも動作させることが可能
      • Microsoft社が独自に拡張したSQLTransact-SQL」も利用できる
        • データベースの操作を行う標準のSQLに加え、「Transact-SQL」も利用できる
        • Transact-SQL」では、フロー制御言語やデータベース向けの関数、ストアド・プロシージャの作成が可能となり、複雑な制御を記述出来る
          • OracleDBでいうPL/SQLのようなもの

 

 

4. Postgre SQL

Unix系のOSにも対応している、オープンソース型のリレーショナルデータベース

    • 特徴

      • 追記型アーキテクチャーを採用

        • テーブルやインデックスの共有バッファー内のページにおいて、挿入や更新時にはレコードを次々に追記していき、削除や更新時に不要になったレコードは削除マークを付けたまま残しておく

          • OracleDBは、UNDOセグメントやロック機能を用いて読み取り一貫性を実現しているので追記型アーキテクチャではない。削除された領域は再利用可能

        • 何もしないと今後参照されることのない不要レコードが徐々に増加していくことでデータファイル容量が肥大化する

        • 不要レコードの領域を回収して再利用可能な状態にするために、定期的にVACUUM処理をする必要がある(最新バージョンでは自動化済み)

      • ライセンスコストがかからない

        • オープンソースソフトウェア(OSS)であるため、ライセンスコストはかからず、世界中の技術者による知見によって開発された製品

      • 商用に耐えうる機能群を搭載

        • 標準SQLに準拠

        • マルチバイト対応しているので、日本語にも対応している

        • パラレルクエリによる処理の高速化が可能

        • オンラインバックアップに対応

    • マニュアル
      PostgreSQL: Documentation

 

5. MongoDB

ドキュメント型のNoSQL

    • 特徴

      • ドキュメント指向データベース

        • データを行と列で保存するのではなく、複数のJSONに似たドキュメントやコレクションでデータを表示する

        • ネストされたドキュメントや配列などのタイプのキーと値のペアを使用し、ドキュメント毎に異なる構造をとることも可能

          • データの一貫性が重要なシステムは、OracleDBなどリレーショナル・データベースの方が向いている

      • インメモリで動作するため処理速度が速い

        • データをメインメモリ(RAM)に読み込んでから処理するため、処理するデータ量が増えても処理速度が速い

      • 負荷分散や冗長化による処理の高速化

        • データを複数のサーバに分割して保存、処理出来る「シャーディング」機能を使い、不可を複数のサーバに分散させて全体の処理能力を向上させることが可能

    • マニュアル

      MongoDB Documentation

APEXで顧客訪問管理サイトを作る その4

ここまで、APEXでの顧客訪問サイトの作成を紹介してきました。

nk-blog.hatenadiary.jp

nk-blog.hatenadiary.jp

 

nk-blog.hatenadiary.jp



最後に、自分が作成した情報以外は顧客訪問情報が見えないように設定したいと思います。

ログイン名と営業名が同じ場合のみ情報が見えるように設定するためには、
対象サイトのソースの情報の中のWHERE句を変更すれば実現可能です。

UPPER("列名") = APEX_CUSTOM_AUTH.GET_USER() 

それでは、ステップ by ステップで説明します。

  1. 現状の確認
    まずはじめに、APEXで作成した対象サイトを確認します。
    自分以外の人の情報も確認できます。

    すべてのデータが確認出来る


  2. APEXのサイトに行き、アプリケーション・ビルダーを開き、編集したいサイトを選択します。

    アプリケーション・ビルダーを開く

     

    編集したいサイトを選択

     

  3. ”検索”の項目を選択します。

    編集したいページの選択


    検索画面の選択


  4. ソースの情報の中のWHERE句を変更します。
    ソースの詳細設定が出てこないときは、横の矢印マークを押して、詳細編集を行います。

    WHERE句の設定


  5. もう一度APEXで作成した対象サイトを確認します。
    今回は、TEST_01ユーザでログインしているので、営業名が"TEST_01"のもののみが表示されます。
    自分以外の人の情報は見えません。これで設定完了です。

    自分が作成した情報のみ表示


    以上で、APEXを使用した顧客訪問管理サイトの作成は完了しました。

 

APEXで顧客訪問管理サイトを作る その3

サイトはその2で作成出来たので、
次は、より使いやすいサイトにするために、入力フォームを選択リスト形式に変更していきます。

 

  1.  APEXのサイトに行き、アプリケーション・ビルダーを開き、編集したいサイトを選択します。

    アプリケーション・ビルダーを開く


    編集したいサイトを選択



  2. 共有コンポーネントを開き、LOVを選択します。

    共有コンポーネントを開く

    共有コンポーネントの中の、LOVを選択する

     

  3. LOVを作成します。
    LOVとは、特定のタイプのページ・アイテム(ポップアプLOV、選択リスト、チェックボックス、ラジオ・グループ、複数の選択リストなど)の表示に使用する静的または動的な定義のことです。
    今回は、静的な情報で、選択リストを作っていきたいと思います。

    LOVを作成

    LOVを新規で作成する

    静的なデータでリストを作成する

    リストのデータを入れる

     

  4. リストをAPEXのページに設定します。
    3.で作成したリストを、APEXのページに設定します。
    まずは、設定したいページを開き、設定したい項目を選択します。

    編集したいページを選択
    項目を選択したら、
    説明のタイプ:選択リスト
    LOV:タイプ:共有コンポーネント、LOV:3.で作成したリスト名
    を設定します。

    リストを追加したい項目の設定
  5. APEXのページでリストが表示されることを確認します。

    サイトに反映されていることを確認


以上で、リスト形式の登録フォーマットが完成です。

 

今回は、リストの中身は静的なデータで作成しましたが、

リストのデータをDBで管理している場合は、DBのテーブルとリスト内容を紐づけることが出来るので、動的なデータにも対応可能です。

APEXで顧客訪問管理サイトを作る その2

それでは、早速顧客訪問記録を管理するサイトを作っていきたいと思います。
エクセルで管理している顧客訪問の記録を、ADBに取り込んで、そこからAPEXでサイトを作ります。

 

  1. エクセルシートの情報をADBに取り込む
    APEXのトップ画面を開きます。(その1を参照)
    SQLワークショップ」の「ユーティリティ」「データ・ワークショップ」を選択します。

    データ・ワークショップを選択

    予めxlsx形式で準備してあるエクセルシートを取り込みたいので、「データのロード」を選択します。

    データのロード

    画面表示に従い、準備しておいたエクセルファイルをロードします。
    プレビュー画面でロード対象のデータに問題がないことが確認できたら、表の名前を入力し、「データのロード」を選択します。

    表名をつけて、データをロードする

    データがロード出来たら、次は「アプリケーションの作成」を押して次に進みます。



  2. アプリケーションの作成
    データをロードし、「アプリケーションの作成」を押すと、いくつかのページが自動で作成されます。

    アプリケーションの作成

    デフォルトで作成されたが、いらないページは、「編集」を選択して出てきたプロントの「削除」を押すことで消すことが出来ます。

    今回は「ファセット検索」として作られたページを利用したいと思います。
    このページでは、検索だけなく入力もしたいと思うので、「フォームを含める」を選択し、入力フォームを追加します。

    「フォームを含める」を追加する

    アプリケーション名を変更したり、好きなようにカスタマイズしたら、「アプリケーションの作成」を押し、次に進みます。

    アプリケーションの作成

    それでは、「アプリケーションの実行」を押し、実際のページを見てみましょう。

    アプリケーションの実行

     

  3. 作成したサイトを確認する
    APEXのユーザでログインすると、作成したサイトが表示されます。

    作成したサイトの確認

    まだ1ページしかありませんが、ホーム画面が表示されるので、「Customervisitrecord」のページを選択して、顧客訪問管理ページが出来ているか確認します。

    顧客訪問管理ページ

    出来ていますね。「作成ボタン」を押すと、入力フォームも表示されることが確認できます。

    入力フォーム


    以上がエクセルで管理している顧客訪問の記録からAPEXのサイトを作成する手順となります。
    こんな簡単な手順で、複数人で同じファイルを利用する場合に起こる、煩雑なバージョン管理がいらなくなると思うと便利ですね!

    次は、もっと簡単に情報を入力できるように、入力フォームの編集を紹介したいと思います。

APEXで顧客訪問管理サイトを作る その1 〜Excelのバージョン管理から脱却!〜

部門内で、Excelシートベースでデータ入力・共有する運用は、バージョン管理が面倒。
でも、アプリケーションを1から構築・運用するのは敷居が高い。。。
そんな時に、ローコードで短期間でアプリケーションを作成できるのがOracle APEX。

 

手元にあるAutonomous Database(ADB)の環境から、APEXを利用してサイトを作ってみました。

※  Autonomous Databaseの環境がなくても、Always Freeサービスを使用して、Autonomous Databaseを無料で試せる!
https://www.oracle.com/jp/autonomous-database/free-trial/

 

やりたいこと

  1. 部門内の顧客訪問記録を管理するサイトを作りたい
  2. フリー形式の入力は面倒なので、なるべくリスト形式の登録フォーマットにしたい
  3. 上司は全部のデータが見えるが、担当者間はお互いの入力データが見えないようにしたい

APEXでやりたいこと


やりたいことが決まったので、まずはAPEXをセットアップしたいと思います。

※ OCIチュートリアル  105: ADBの付属ツールで簡易アプリを作成しよう(APEX) に手順がわかりやすい。
https://oracle-japan.github.io/ocitutorials/database/adb105-create-apex-app/

 

APEXでアプリケーションを作成するための環境準備

Oracle APEXはOracle Databaseのライセンに包含されている1つの機能です。

手元にあるADBインスタンスを利用して、まずはアプリケーションを作成するための環境となる"APEXのワークスペース"を準備します。

 

  1. OCIコンソールのADBインスタンスの画面からAPEXを開く

    "データベース・アクション" の中の "すべてのデータベース・アクションの表示” を選択します。

    APEXの画面への移動1

     

     ADB上で利用できる機能が表示されるので、その中の”APEX”を選択します。

    APEXの画面への移動2
  2. APEXのワークスペースを作成

    ADBの管理者(ADMIN)ユーザでログインをすると、"ワークスペースの作成" 画面が表示されるので、画面に従い "Create Workspace" を選択します。

    ワークスペースの作成

     

    今回は、新規スキーマワークスペースを作成しようと思うので、"New Schema" を選択します。

    新しいスキーマワークスペースを作成

    今回は、ワークスペース名とワークスペース・ユーザ名を同じ "TEST_01" として作成します。

    ワークスペース名の設定



  3. APEXのワークスペースが作成完了

    ワークスペースが作成されたと表示されます。

    ワークスペースの作成完了

     

    画面表示が英語になっていますが、一番下にスクロールすると言語設定があるので "日本語" に変更出来ます。

    表示言語の変更


  4. 作成したユーザでサインイン

    ワークスペースの作成は "ADMIN" ユーザで行っているので、現在は ”ADMIN” ユーザでサインインしている状態です。

    しかし、アプリケーションを構築するためには、作成したユーザ "TEST_01" でサインインする必要があります。

    ワークスペース構築画面にも、お知らせ*1が記載されているので、まずは右上にある "ADMIN" ユーザのアイコンをクリックし、 "Sign out" します。

    ADMINユーザからサインアウト

    サインアウトしたら、サインイン画面が表示されるので、先程作成したユーザ名、ワークスペース名、パスワードをそれぞれ入力し、サインインします。

    サインイン画面が英語表示の場合は、下にある "日本語" を選択すると日本語表示に変更され、サインイン後の画面も日本語で表示されます。

    サインイン画面



  5. 作成したユーザで、APEXコンソール画面へのログイン完了

    作成たユーザで、APEXのコンソール画面にログイン出来ました。

    作成したユーザでのログイン完了

    この画面のURLを記憶しておけば、次回から直接APEXコンソールへログインすることが出来ます。

    次回はこのURLからログインし、実際にアプリケーションを作っていきたいと思います!

 

 

 

 

*1:APEXのコンソール画面上部の緑枠内がお知らせ:Workspace created. Sign out of Administration Services and sign in to TEST_01 to begin building applications.