Thứ Tư, 3 tháng 8, 2011

CouchDB cơ bản cho lập trình viên PHP

Là lập trình viên PHP thì chắc hẳn mình đã quá quen thuộc với việc tương tác cơ sở dữ liệu (CSDL), dám cá là phần nhiều trong số các bạn đọc bài này dùng MySQL cho công việc/học tập hàng ngày :)

Thực tế chứng minh MySQL là lựa chọn tốt cho dữ liệu có cấu trúc[1] và nhiều ràng buộc[2]. Mình bắt đầu bằng thiết kế các schema, tạo các bảng, định nghĩa kiểu dữ liệu cho các cột và tiếp theo là viết code cho các thao tác CRUD[3]. Vấn đề là trong dự án sẽ có nhiều trường hợp dữ liệu không đoán trước được kiểu, định dạng, độ lớn, hay các đặc tính cần có. Nếu mình thiết kế schema để đón đầu, CSDL sẽ theo thời gian chứa nhiều field bị null, hoặc phát sinh các ràng buộc phức tạp, câu lệnh SQL cũng vì thế mà rắc rối lên nhiều.

Với dự án như này, hãy thử một hướng đi khác, ko liên quan đến CSDL quan hệ. Vậy cái mình cần là 1 CSDL dạng document-based, schema free, ad-hoc.

Question: Với một Web developer thì tại sao lại phải biết SQL để lập trình web (?).

CouchDB là gì?

Theo Apache CouchDB website, CouchDB là

  • document database server, truy vấn thông qua RESTful JSON API[3].

  • ad-hoc, flat, và schema-free[4].

  • distributed.

  • sử dụng Javascript để query dữ liệu.


Cấu tạo một CouchDB như sau

- database

- document

+ _id

+ _rev

+ {"field" : "value"}

+ {"field" : "value"}

...

Ví dụ

- database: contacts



{

_id: 528c3917ed78a2ce16ddc130f700063f

_rev: 1-901de5ccbf8ff7faf4ad09475939f160

fullname: "Black Jack"

occupation: "IT"

skills: ["web", "desktop", "ajax", "php", "javascript","HTML"]

}



Trong document trên, _id là UUID[5], _rev là phiên bản tài liệu, 3 trường chứa giá trị là fullname, occupation, skills thể hiện dạng JSON.

Việc truy vấn dữ liệu được thực hiện thông qua các phương thức RESTful JSON API. Trên thực tế, nếu mình biết về Javascript, Ajax, JSON thì mình không cần phải biết về SQL để làm website(!)

Cài đặt CouchDB

Trên Ubuntu thì
sudo apt-get install couchDB
sudo /etc/init.d/couchdb start

Vậy là xong thôi. Service couchDB được chạy mặc định ở cổng 5984. Từ trình duyệt, gõ http://127.0.0.1:5984 mình sẽ thấy đại loại như
{"couchdb":"Welcome","version":"1.0.2"}

Tiếp theo, chạy trình quản lý Futon được tích hợp vào CouchDB, nó giống như PhpMyAdmin

http://localhost:5984/_utils/


Bước tiếp theo sẽ là thực sự xài CouchDB

Sử dụng CouchDB API

Tại thời điểm này, mình sử dụng cURL[6] để gửi các phương thức GET, PUT, POST, DELETE thông qua HTTP tới CouchDB

Câu lệnh đầu tiên

curl http://127.0.0.1:5984/

Kết quả:
{"couchdb":"Welcome","version":"1.0.2"}

Tạo CSDL mới
curl -X PUT http://127.0.0.1:5984/contacts

Khi bạn nhận được thông tin {"ok":true}, CSDL contacts đã được tạo

Lấy về tất cả cơ sở dữ liệu

curl -X GET http://127.0.0.1:5984/_all_dbs

Tạo 1 record mới trong contacts
curl -X PUT http://127.0.0.1:5984/contacts/*id* -d '{ *json_data* }'

ví dụ:
curl -X PUT http://127.0.0.1:5984/contacts/contact1 -d '{ "fullname":"Doraemon",
"type":"cat" }'

Lấy thông tin về record vừa tạo
curl -X GET http://127.0.0.1:5984/contacts/contact1

Cái đáng phải quan tâm là, với việc gửi đi các phương thức khác nhau, CouchDB sẽ thực thi các hành động khác nhau. Trong ví dụ trên, GET là lấy về, PUT là tạo mới. Bên cạnh đó, CouchDB không phải là object oriented database[7] nên tránh dùng persistent data layer[8].

---

Đón xem phần 2: hoàn thiện phần 1 và giới thiệu cách kết hợp PHP & CouchDB

Không có nhận xét nào:

Đăng nhận xét