Core Dataと(R)DBMSとは何が違うか?

2010/02/17 at 11:46 コメントをどうぞ


例のCocoa With Loveに面白い記事が新しく追加されました。

The differences between Core Data and a Database

みんなのかゆいところをかいてくれるいい文章だと思います。私自身も最初にCore Dataを使い始めた時にまるでRDBMSを使うような感覚でオブジェクトグラフを設計していたのを今でも覚えています。

詳細は上記のリンクを読んで頂ければいいと思いますが、同記事を読んで私なりに理解したものを要約すると下記の通りです。

・DBMSはディスクにあるデータを最新の状態に保つためのものであるが、Core Dataはメモリ上のオブジェクトグラフを操作するためのものである。もちろん、Core Dataもデータのディスクへの保存やデータの取得、無欠性の保証をするが、それらはあくまでもサポート的な機能であり、そもそもの目的はオブジェクトグラフの管理と永続化である。

・DBMSは複数の使用者(プログラム)から共有されることを前提にしているがCore Dataは一つの使用者(プログラム)からの使用を前提にしている。(Core Dataは基本マルチスレッドに対応していない。ただし、マルチスレッドに対応させる方法もある。マルチスレッド対応については上記リンクの本文のコメントを参照すること)

・DBMSはトランザクションの概念があり常にディスクのデータを最新の状態に保つ。(DBMSの実装によって詳細は異なるが、少なくともプログラマにはそう意識される。)Core Dataはメモリ上のオブジェクトに対して行った変更を必要なタイミングでディスクに書き込む処理を行う必要がある。

・上記の特徴により、DBMSで大量の新しいデータを作成するよりCore Dataでする方が格段に早い。ただし、新しいデータ生成のタイミングでDBMSでは既にディスク上にもデータが存在し、システムのトラブルなどによる異常終了の際にもそのデータはちゃんと残るが、Core Dataでは新しいデータはメモリ上に存在しているだけなので異常終了の際にはそのデータは失われることとなる。これはデータの安全性とパフォーマンスからどちらをより大事にする設計思想なのかに起因すること。(ただし、Core Dataでメモリ上に生成した新しいデータを永続化する(SQLite, XML, FIleなどに書き込む処理)際にはCore Dataから永続化ツールに対する変換+永続化ツールの永続化処理の二重の処理負荷がかかり、DBMSのみを使う場合より遅くなる。)

・DBMSはテーブルの削除、WHERE句を使った絞り込みを行いその結果セットに対する操作など、個々のデータをメモリにロードせずに処理する、或は最小のデータセットのみに絞ってから処理することができる。Core Dataはメモリにロードしているデータ(オブジェクト)のみを操作できる。すべてのデータを削除したいのであれば対象データを先ずはすべてメモリにロードしないといけない。Core Dataで大量のデータを処理する際には常にメモリ使用量に対する考慮を必要とする。

・DBMSにはuniqueキーなど、データに対する制約をかけることができるがCore Dataではそのような仕組みはない。Core Dataで扱うオブジェクトは継承しオーバーライドすることができるのでそのような制約は無意味である。Core Dataを使うプログラムではデータに対する制約はプログラム側で責任を取る必要がある。

以上です。

残念なのは、私が最初にCore Dataを勉強した時にこのような文書があったらかなりの試行錯誤を防げたのになぜいまさら?ってことですが、まあ、それはさておき。

※上記は私の理解と思いが反映されたものなので、正しい内容は必ず本文を参考にしてください。

—————————————————————————————————–

・この文書はMacISVのブログにも投稿されています。

・内容についてのご意見や突っ込みはいつも歓迎です。

—————————————————————————————————–

広告

Entry filed under: Cocoa is ....

Micro-ISVを目指して1年経ちました。 Micro-ISVはハイリスク、ハイリターン?

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

Trackback this post  |  Subscribe to the comments via RSS Feed


カレンダー

2010年2月
« 1月   3月 »
1234567
891011121314
15161718192021
22232425262728

Most Recent Posts


%d人のブロガーが「いいね」をつけました。