Apache CouchDBは、 Erlangで実装されたオープンソースのドキュメント指向NoSQLデータベースです。
CouchDBは、データの保存、転送、処理に複数のフォーマットとプロトコルを使用します。データの保存にはJSON 、クエリ言語にはMapReduceを使用したJavaScript、APIにはHTTPを使用します。[ 2 ]
CouchDBは2005年に初めてリリースされ、その後2008年にApacheソフトウェア財団のプロジェクトとなった。
リレーショナルデータベースとは異なり、CouchDBデータベースはデータとリレーションシップをテーブルに格納しません。代わりに、各データベースは独立したドキュメントの集合体です。各ドキュメントは独自のデータと自己完結型のスキーマを保持します。アプリケーションは、ユーザーの携帯電話に保存されているデータベースとサーバーに保存されているデータベースなど、複数のデータベースにアクセスできます。ドキュメントのメタデータには改訂情報が含まれているため、データベースが切断されている間に発生した可能性のある差異をマージすることが可能です。
CouchDBは、マルチバージョン同時実行制御(MVCC)の一種を実装しているため、書き込み中にデータベースファイルをロックしません。競合の解決はアプリケーションに委ねられます。競合の解決は一般的に、まずデータをいずれかのドキュメントにマージし、次に古いドキュメントを削除するという手順で行われます。[ 3 ]
その他の機能としては、結果整合性を備えたドキュメントレベルのACIDセマンティクス、(増分) MapReduce、(増分) レプリケーションなどがあります。CouchDBの特徴的な機能の一つはマルチマスターレプリケーションで、これによりマシン間でスケーリングして高性能システムを構築できます。Fauxton(旧Futon)と呼ばれる組み込みのWebアプリケーションが管理を支援します。
主な特徴
- ACIDセマンティクス
- CouchDBはACIDセマンティクスを提供します。[ 12 ]これは、マルチバージョン同時実行制御を実装することによって実現され、CouchDBは競合することなく大量の同時読み取りおよび書き込みを処理できます。
- オフライン向けに構築
- CouchDBは、オフライン状態になる可能性のあるデバイス(スマートフォンなど)にデータを複製し、デバイスがオンラインに戻った際にデータの同期を自動的に処理します。
- レプリケーションを備えた分散アーキテクチャ
- CouchDBは、双方向レプリケーション(または同期)とオフライン操作を念頭に置いて設計されています。つまり、複数のレプリカが同じデータの独自のコピーを持ち、それを変更し、後でその変更を同期できるということです。
- 文書保管
- CouchDBはデータを「ドキュメント」として保存します。ドキュメントは、 JSON形式で表現された1つ以上のフィールドと値のペアで構成されます。フィールドの値には、文字列、数値、日付などの単純なものだけでなく、順序付きリストや連想配列も使用できます。CouchDBデータベース内のすべてのドキュメントには一意のIDがあり、ドキュメントスキーマは必須ではありません。
- 最終的な一貫性
- CouchDBは、可用性とパーティション耐性の両方を提供するために、結果整合性を保証します。
- マップ/リデュースビューとインデックス
- 保存されるデータはビューを使用して構造化されます。CouchDBでは、各ビューは、マップ/リデュース操作のマップ側として機能するJavaScript関数によって構築されます。この関数はドキュメントを受け取り、それを単一の値に変換して返します。CouchDBはビューにインデックスを作成し、ドキュメントの追加、削除、更新に応じてインデックスを最新の状態に保つことができます。
- HTTP API
- すべてのアイテムには、HTTP経由で公開される固有のURIがあります。すべてのリソースに対して、 HTTPメソッドのPOST、GET、PUT、DELETEを使用して、4つの基本的なCRUD(作成、読み取り、更新、削除)操作を実行します。
CouchDBには、Web経由でアクセスできるFauxtonと呼ばれる組み込みの管理インターフェースも用意されている。[ 13 ]
ユースケースと本番環境への導入
CouchDBのレプリケーション機能と同期機能は、ネットワーク接続が保証されていないモバイルデバイスでの使用に最適です。モバイルデバイスでは、アプリケーションはオフラインでも動作し続ける必要があります。
CouchDBは、蓄積され、時折変更されるデータがあり、定義済みのクエリを実行する必要があり、バージョン管理が重要なアプリケーション(CRM、CMSシステムなど)に最適です。マスター・マスターレプリケーションは特に興味深い機能であり、マルチサイト展開を容易にします。[ 14 ]
ユーザー
CouchDBのユーザーには以下のような企業が含まれます。
データ操作:ドキュメントとビュー
CouchDBはJSONドキュメントのコレクションを管理します。ドキュメントはビューによって整理されます。ビューは集計関数で定義され、フィルタはMapReduceと同様に並列で計算されます。
ビューは一般的にデータベースに保存され、そのインデックスは継続的に更新されます。CouchDBは外部ソケットサーバーとJSONベースのプロトコルを使用したビューシステムをサポートしています。[ 27 ]その結果、ビューサーバーはさまざまな言語で開発されています(JavaScriptがデフォルトですが、PHP、Ruby、Python、Erlangもあります)。
HTTP経由でデータにアクセスする
アプリケーションはHTTPを介してCouchDBとやり取りします。以下では、コマンドラインユーティリティであるcURLを使用したいくつかの例を示します。これらの例では、CouchDBがlocalhost(127.0.0.1)のポート5984で実行されていることを前提としています。
オープンソースコンポーネント
CouchDBは、デフォルトパッケージの一部として、他の多くのオープンソースプロジェクトを含んでいます。
参考文献
- ↑ 「リリース 3.5.2」。2026年5月14日。 2026年5月15日取得。
- ↑ Apache Software Foundation. "Apache CouchDB" . 2012年4月15日取得。
- ↑ Smith, Jason. "CouchDBのレプリケーションプロトコルとは何ですか?Gitのようなものですか?" . StackOverflow.Stack Exchange . 2012年4月14日取得。
- ↑ 「Exploring CouchDB」 . Developer Works . IBM. 2009年3月31日. 2016年9月30日取得.
- ↑ Apacheメーリングリストのお知らせ(mail-archives.apache.org)
- ↑ Re: 提案された決議: mail-archives.apache.org に
- ↑「CouchDB NoSQLデータベース、本番環境での使用準備完了」 PC World誌2010年7月号の記事( 2010年11月15日にWayback Machineにアーカイブ済み)
- ↑カッツ、ダミアン。「CouchDBの未来」 。 2012年4月15日取得。
- ↑スレーター、ノア (2013 年 7 月 25 日)。「ようこそ BigCouch」 。2013年7 月 25 日取得。
- ↑ "「2.0」. 2016年9月20日。2017年1月13日に取得。
- ↑ "1.8. 2.0.x ブランチ — Apache CouchDB® 3.3 ドキュメント" . docs.couchdb.org . 2024-08-04に取得.
- ↑ CouchDB、技術概要(2011年10月20日、Wayback Machineにアーカイブ済み)
- ↑ 「couchdb-fauxton」。GitHub。アパッチ。2023 年5 月 2 日に取得。
- ↑ Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase の比較(Kristóf Kovács より)
- ↑フィンリー、クリント (2010-08-26)。「大型ハドロン衝突型加速器の科学者が CouchDB を使用している理由」。ReadWrite。2022年 6 月 17 日のオリジナルからアーカイブ済み。2022-03-29に取得。
- ↑ iDAT、赤十字コード、2021年7月31日、 2022年3月29日取得
- ↑ 「データベースの詳細解説 - CouchDB」。www.ibm.com。2019年7月19日。 2022年3月29日取得。
- ↑ 「データベースの詳細解説 - CouchDB」。www.ibm.com。2019年7月19日。 2022年3月29日取得。
- ↑ 「ユナイテッド航空がCouchbaseで業務を効率化|事例研究」。www.couchbase.com。2022年3月29日取得。
- ↑「CouchDB の実用例」 製品の Web サイトの記事 (2017 年 7 月 20 日アーカイブ) には、CouchDB を使用しているソフトウェア プロジェクトと Web サイトのリストが掲載されています。
- ↑カトラー、キムマイ(2012年6月9日)。 「ミーボ、グーグルによる買収と人材採用の典型的な手法を受ける:ほとんどの製品が間もなく閉鎖へ」。TechCrunch。AOL Inc。2016年1月7日閲覧。
- ↑ "npm-registry-couchapp" . GitHub . npm. 2015年6月17日. 2016年1月7日取得.
- ↑ BBCにおけるCouchDBは、耐障害性、拡張性、マルチデータセンター対応のキーバリューストアとして活用されている。
- ↑エリオット・マーフィー (Canonical) からのメール。2011年5月5日にWayback Machineにアーカイブされ、CouchDB-Develメーリングリストに
- ↑ CanonicalがUbuntu OneからCouchDBを削除(Slashdot)
- ↑ "Protogrid - 私たちについて" .
- ↑ wiki.apache.org のWayback Machineに 2008 年 10 月 20 日にアーカイブされたサーバー ドキュメントを表示
参考文献
- アンダーソン、J.クリス、スレーター、ノア、レーンハルト、ヤン(2009年11月15日)、『CouchDB: 決定版ガイド(第1 版)』、O'Reilly Media、300ページ 、ISBN 978-0-596-15816-3
- Lennon、Joe (2009 年 12 月 15 日)、Beginning CouchDB (第 1 版)、Apress、p. 300、ISBN 978-1-4302-7237-32010年12月5日にオリジナルからアーカイブされ、 2009年11月1日に取得されました。
- Holt, Bradley (2011年3月7日)、CouchDBにおけるMapReduceビューの記述とクエリ(第1 版)、O'Reilly Media、p. 76、ISBN 978-1-4493-0312-9
- Holt, Bradley (2011年4月11日)、Scaling CouchDB (第1 版)、O'Reilly Media、p. 72、ISBN 978-1-4493-0343-3
- Brown, MC (2011年10月31日)、Getting Started with CouchDB (第1 版)、O'Reilly Media、p. 50、ISBN 978-1-4493-0755-4
- トンプソン、ミック(2011年8月2日)『Getting Started with GEO, CouchDB, and Node.js』(第1 版)、O'Reilly Media、64ページ 、ISBN 978-1-4493-0752-3
外部リンク
- 公式サイト
- CouchDB:決定版ガイド
- 完全なHTTP APIリファレンス
- CouchDBと通信するためのシンプルなPHP5ライブラリ
- Java 用非同期 CouchDB クライアント
- Scala 用の非同期 CouchDB クライアント
- Lehnardt, Jan (2008). "Couch DB at 10,000 フィート" . Erlang eXchange 2008 . 2012 年 11 月 9 日のオリジナルからアーカイブ済み . 2012 年4 月 15 日取得.
- Lenhardt, Jan (2009). "CouchDB for Erlang Developers" . Erlang Factory London 2009 . 2011年6月19日のオリジナルからアーカイブ済み。 2012年4月15日取得。
- Katz, Damien (2009年1月). "CouchDBと私" . RubyFringe . InfoQ. 2011年4月27日のオリジナルからアーカイブ済み。 2012年4月15日閲覧。