2009-04-03 35 views
7

Tôi hiện đang viết một ứng dụng với một vài nhu cầu kiên trì dữ liệu khác nhau ở các lớp rất khác nhau và tôi cứ tự hỏi ... khi nào nó phù hợp và khi nào không thích hợp để sử dụng couchDB để đáp ứng nhu cầu kiên trì của tôi?Khi nào thích hợp để sử dụng couchDB?

Trả lời

2

Bạn có yêu cầu quan hệ không? CouchDb (như bạn đã biết) không có cấu trúc quan hệ của một cơ sở dữ liệu bình thường.

Bản chất RESTful của CouchDb có quan trọng đối với những gì bạn đang làm không?

Có lẽ quan trọng nhất, ai sẽ hỗ trợ điều này trong tương lai và họ có khả năng xử lý CouchDb không? Đó là một công cụ khá thích hợp và việc tìm kiếm những người có kinh nghiệm với nó sẽ không dễ dàng.

1

Nó thực sự là một điều từng trường hợp cụ thể, tôi muốn nói. CouchDB chỉ đơn giản là một loại cơ sở dữ liệu, tùy thuộc vào dự án của bạn, nó có thể là một sự phù hợp hoàn hảo hoặc có thể hạn chế đau đớn - giống như một RDBMS có thể là một sự phù hợp hoàn hảo hoặc một cơn ác mộng.

Chi tiết khác?

3

Sau khi triển khai hai hệ thống sản xuất trên nền tảng db không liên quan, tôi đã kết luận rằng các dbs không liên quan cần bước gần hơn một chút để sql thực sự "thay thế" nó. Tôi hiểu thay thế là "bạn nhận được cùng một chức năng mà không có sự khác biệt lớn về chất lượng, công sức hoặc chi phí."

Câu trả lời ngắn: Không phải thường là

Câu trả lời dài. Lợi ích chính cho cơ sở dữ liệu không quan hệ là khả năng sẵn sàng cao, schemaless và khả năng mở rộng. Tất cả điều này đi kèm với giá đáng kể. Nếu ứng dụng của bạn cần sự linh hoạt của truy vấn (và/hoặc, thứ tự sắp xếp, ..) và doest có dữ liệu lớn hoặc yêu cầu hiệu suất, bạn tốt hơn với DB truyền thống như mysql hoặc postgres tốt hơn. Thách thức chính với cơ sở dữ liệu không quan hệ là nếu bạn cần cách kết hợp dữ liệu mới (như tất cả các bài viết mà người dùng thích theo thứ tự thời gian), bạn sẽ cần tài liệu mới để chèn và xem để thực hiện truy vấn. Couchdb là tài liệu dựa trên đó là tốt cho sự linh hoạt, vì bạn không cần phải duy trì giản đồ trong cơ sở dữ liệu và chỉ có thể "quên" dữ liệu cũ mà thiếu các trường mới. Cơ sở dữ liệu tài liệu không sống hết tiềm năng với các ngôn ngữ được gõ tĩnh mặc dù bạn vẫn phải sửa đổi cấu trúc dữ liệu trong mã của mình nhiều hơn hoặc ít hơn.

db không quan hệ yêu cầu kiến ​​trúc đẩy. Tất cả dữ liệu cho tất cả các truy vấn có thể (ngay cả những truy vấn hiếm có) cần phải được đẩy khi bạn chèn hoặc cập nhật dữ liệu. Chi phí này như cpu và đĩa nhưng bạn nhận được các truy vấn nhanh. Trong db dựa trên SQL bạn chỉ có thể chèn hàng và trả giá như truy vấn chậm. CouchDB xây dựng các chỉ mục trên truy vấn đầu tiên, một số cơ sở dữ liệu khác trên chèn (MongoDB, Google App Engine)

Truy vấn Couchdb được định nghĩa là chế độ xem javascript mạnh mẽ nhưng khá khó để viết, duy trì và gỡ lỗi. Xem thay đổi có nghĩa là couchdb cần phải reindex tất cả các tài liệu đó là thực sự chậm nếu bạn có triệu hoặc nhiều tài liệu. Các thông báo lỗi từ couchdb không thể được giải mã bởi quản trị viên thông thường.

Couchdb maintanance cần một số nỗ lực thủ công cho các tệp dữ liệu và chỉ mục nhỏ gọn, các phiên bản mới có độ nén tự động mặc dù việc sử dụng nó đòi hỏi phải có sự quan tâm.Các tính toán cần phải được lên kế hoạch off-peaks vv .. Điều này có thể kịch bản khá dễ dàng mặc dù. Db dump, sao lưu và các công cụ như vậy vẫn còn khá trẻ sơ sinh.

Tóm lại, không cần nỗ lực nếu bạn không cần hiệu suất hoặc khả năng mở rộng của couchdb. Cá nhân tôi nghĩ rằng nó có thể "cạnh tranh" hầu hết các lợi ích hiệu suất db không quan hệ với sql db, redis và memcache stack. Ít nhất là miễn là không có quá nhiều dữ liệu.

Các vấn đề liên quan