CouchDB 入門指南

唐小娟發表於2012-02-21

你曾經夢想擁有一個不需要用SQL語句就可以輕鬆訪問的強大資料庫嗎?Apache CouchDB就是這樣的資料庫。在這個教程中,你將會學到看到如何開始使用這基於文件的資料庫,以及如何用PHP使用它。

認識CouchDB

Apache CouchDB是一種新型的資料庫管理系統,這種系統通常叫作NoSQL。NoSQL是在2009年初就浮現出並開始流行起來的,即是non-SQL的資料庫。NoSQL是一種非關係型資料儲存系統,這打破了長期以來以關係型資料庫和ACID特性主導的資料庫世界。這種系統的資料儲存不需要固定的表。

讓我立即喜歡上CouchDB並決定寫這篇文章的原因是由於它是基於文件的資料庫,而不是將內容儲存在表中。這就方便我們自由儲存資訊,如同儲存在陣列中一樣

這裡有個示例文件:

另一個文件可以有這樣的資料:

很酷吧。首先我們不會用空間來儲存空的或null的列。

其次我們不再需要考慮表和列了!我們要設定資訊時,僅需要設定我們需要的資訊。但是如果我們沒有仔細計劃時,這也可能會引發問題。我們以後會詳細介紹。

我喜歡CouchDB的另一個原因是因為訪問它是通過REST API。對於那些知道REST API是什麼的人來說,它可以做許多事情!而對於那些對它沒有認知的人來說,就是可以通過JavaScript直接從瀏覽器獲得或設定資料,而不需要在伺服器端寫PHP程式碼。

使用CouchDB

現在你知道了它的基本特性,我們開始使用它吧。首先你需要知道PHP沒有內建的函式去訪問CouchDB資料庫。

訪問CouchDB我推薦PHPillow,由Kore Nodmann寫的一個類庫,是我目前為止看到的寫的最好的類。其次你需要知道設定和訪問CouchDB和MySQL語句不同。我說過,PHPillow是訪問CouchDB的最好的方法(我的觀點),所以我將在例子中採用它。

CouchDB

資料連線

連線CouchDB例項,phpillowConnection類方便簡單:

phpillowConnection->createInstance(‘localhost’, 5984, ‘user’, ‘password’);

連線建立之後,你的文件中可以使用這個連線。

自定義文件

所有的文件都是對一個基本抽象類phpillowDocument的擴充套件。定義部落格文章的完整模型如下:

 

靜態屬性$type定義了儲存文件的型別,對每個文件來說是唯一的。如果你想實現一個模組,在type前加上一個字首,譬如這個例子中的“blog”。如果你使用的是5.3版本之前的PHP,你需要在文件類中返回文件型別,如上所示。5.3以及5.3版本之上的使用者可以使用更普遍的做法,在基文件類中用static::$type來返回文件型別。

$requiredProperties定義了必須要設定的屬性。而屬性是在$properties中設定,它是在構造器當中初始化的。我們對每個屬性都採用了一個驗證器來校驗輸入。有很多更復雜的驗證器,如上面例子中的phpillowDocumentArrayValidator,稍後會提到,它的詳細描述在API文件中可以找到。

最後你需要定義生成文件ID的方法。CouchDB可以通過ID來完成一些任務,這裡通過stringToId()實現。通常你至少有一個唯一的屬性。如果不是唯一值的話,文件處理器將會附加上些資訊,這樣又唯一了。

使用文件

現在要儲存資料在上面程式碼新建的文件中,可以使用下面的程式碼:

save()函式會將文件儲存在資料庫中。呼叫這個函式之後,你可以獲得一個神奇的屬性:

直接使用這個ID,你可以又從資料庫中調出這個文件:

這個方法從資料庫中又調出上面的文件。CouchDB中的文件有幾個神奇的屬性:_id和_rev(為修改文件所用)。除了定義的屬性之外,還有個叫revisions的屬性,它儲存了該文件所有更改過的內容。

如果你更改了一個物件的某個屬性,並儲存起來,舊的版本也會儲存在資料庫中,所以沒有資訊丟失。這個自動儲存舊版本的功能可以取消,將$versioned屬性設定為false。

我提到修改嗎?

是的,我提到了!感謝你注意到了!最後說一次,如果更改了CouchDB資料庫中的文件,它自動將其儲存到前一個的版本!不再需要再進行多次資料庫操作,要確保應用事務可以回滾。

這個教程就到這裡了。下次我們將會用PHPillow來處理更多更高階的查詢。

 

原文:Jean-Baptiste Jung  編譯:伯樂線上 – 唐小娟

【如需轉載,請標註並保留原文連結、譯文連結和譯者等資訊,謝謝合作!】