分散環境で動作するデータベースの読み取りを高速化するには、あらかじめデータのコピーを用途に合わせて「作り置き」しておくことが基本的な戦術となります。RDBのデータベース設計では、データ項目の重複の排除など、テーブルの静的構造に論理的な整合性があることを重視し、データの利用に関しては問い合わせ言語(SQLのSELECT文)に任せればよい、という方針で設計すれば済んでいました。
しかし、分散環境におけるデータベースの設計では、静的なデータ構造だけでなく、「どのような目的でデータベースにアクセスするのか」とか、「アプリケーションはどういった形のデータを求めるのか」といった利用時の要件も考慮してテーブルを設計する必要があります。
つまり、これまでのようにデータベース設計の段階では、まず正規化しておいてデータ取得時の加工処理はRDBMSに任せる、というアプローチが困難になるのです。テーブル設計のまずさを問い合わせ方法を工夫することで覆い隠すことも難しくなるので、データベース設計者の腕前がよりはっきりと現れるといってよいでしょう。NoSQLデータベースの世界では、これまで以上にデータベース設計が重要になるのです。
RDBMSでは当たり前の、テーブル結合や集計機能を排したNoSQLデータベースでは、分散キャッシュに対して単純な方法でアクセスできることが求められます。このことから、「NoSQLデータベースの設計では、正規化をしてはいけない」と言う人もいます。しかし、筆者はこの意見はちょっと違うのではないかと感じます。確かにNoSQLデータベースでは、テーブルの結合ができないので、データ構造を正規化しただけではいろいろ不都合が生じてしまいます。
しかし、テーブルとテーブルの関係を整理しないまま安易に作成したデータ構造と、いったん正規化を済ませたうえで、目的に合わせて冗長化したデータ構造はまったく違うものです。データ構造の正規化は決してゴールではありませんが、設計の1プロセスとして正規化を経由した方がいいのは間違いありません。むしろ、分散キャッシュを生成するための「元ネタ」として一元管理する分には、オリジナルのデータを保存するテーブルは正規化した方が都合がよいはずです。「NoSQLデータベースの設計では、正規化をしてはいけない」のではなく、「NoSQLデータベースの設計は、正規化で終わってはいけない」というべきでしょう。
次回は、RDBMSならSQLで簡単に実現できる検索処理やソート(並べ替え)、集計などのデータ操作をNoSQLデータベースで実現する方法を説明する予定です。
株式会社システムインテグレータ
渡辺俊史
製品企画本部 製品開発グループ
Copyright © ITmedia, Inc. All Rights Reserved.