私はまだ新しい NoSQL データベースを使用したことがありませんが、ウィキペディアの記事やブログを読んだり、NoSQL DB のドキュメントを覗いたりして、最新情報を入手しようと努めてきました。
php|architect の 2009 年 8 月版、具体的には非リレーション データベースに関する記事を (再) 読んだところ、いくつかの質問が頭に浮かびました。私を混乱させるのに十分...
CouchDB
CouchDB に関する私の主な質問は、なぜそんなに誇大宣伝されているのですか? . 私が理解したことによると、CouchDB は、データベース内にデータベースとドキュメントを作成できる Web サービスを提供します。ドキュメントには、JSON でエンコードされたいくつかの属性を含めることができ、ドキュメントのリビジョンを追跡するための特別な_id
and属性も含めることができます。_rev
私は本当にこれについて大騒ぎしているわけではありません。数年前、ペットプロジェクトのために、ドキュメントを保存するための同様の(?)システムをコーディングしましたが、構造は次のようなものでした:
documents/
document-name/
(revision) timestamp/
(contents) md5-hash.txt
PHP Serialized Data
非常に基本的なものが欠けていると確信しています。それ以外の場合 (PHP 開発者の観点から)、CouchDB と同じ利点があり、高速になります。JSON をエンコードおよびデコードする必要はありません。
Amazon SimpleDB
今、これは本当に私の頭をぐるぐるさせます... 著者(Russell Smith)は次の例を挙げています:
$sdb->putAttributes('phparch', 'may', array('title' => array('value' => 'May 2009'), 'have' => array('value' => false)));
$sdb->putAttributes('phparch', 'june', array('title' => array('value' => 'June 2009'), 'have' => array('value' => true)));
$sdb->putAttributes('phparch', 'july', array('title' => array('value' => 'July 2009'), 'have' => array('value' => true)));
彼は次に、Amazon が SQL に似たインターフェイスをサポートするようになり、次のクエリを実行すると述べています。
$sdb->select('phparch', 'SELECT * FROM phparch WHERE have = "1"');
彼は、CouchDB でそのクエリを実行する方法の類似の例を示していません (ビューと Map/Reduce に関するいくつかのヒントを残しています) が、それも可能だと思います。それ?
私の最初の推測では、すべてのドキュメントを開き (分散環境では可能)、reduce 操作を適用して属性が検索基準に一致しないドキュメントをフィルター処理しますが、これは過度に高価ではありません (CPU とディスクI/O) 並列計算でも?
分散や一貫性などのいくつかの重要なことを無視していることはわかっていますが、NoSQL ストレージの非常に基本的な内部動作を把握しようとしています。
PS: また、CouchDB と Amazon SimpleDB の両方が Erlang で構築されている理由を誰か説明してもらえますか?