2010-03-13 51 views
19

Ứng dụng mục tiêu là một trang web có kích thước trung bình được xây dựng để hỗ trợ vài trăm đến vài nghìn người dùng một giờ, với tùy chọn mở rộng quy mô trên đó. Mô hình dữ liệu khá đơn giản và khả năng lưu bộ nhớ đệm khá cao (~ 10: 1 tỷ lệ đọc để chỉnh sửa hành động).Điều gì cần cân nhắc khi chọn SQL/NoSQL?

Điều gì sẽ là những cân nhắc khi lựa chọn giữa một kho dữ liệu quan hệ dựa trên SQL với tùy chọn NoSQL (chẳng hạn như HBase và Cassandra)?

+0

Bạn có nghĩa là 100 đến 1k hoặc 100 nghìn người dùng mỗi giờ không? – Bobby

+0

Xóa bỏ sự mơ hồ :) –

+0

Hãy làm ít nhất một nghiên cứu _little_ trước tiên (có thể là hai phút giá trị). Chỉ cần xem qua http://stackoverflow.com/questions/tagged/nosql. –

Trả lời

18

Với tôi, bạn không có bất kỳ vấn đề cụ thể nào để giải quyết. Nếu bạn cần ACIDity, hãy sử dụng một cơ sở dữ liệu; nếu bạn không, thì không thành vấn đề. Cuối cùng chỉ cần xây dựng ứng dụng của bạn. Và hãy để tôi báo giá NoSQL: If Only It Was That Easy:

Điều thực sự cần lưu ý là nếu bạn không thể thực hiện điều gì đó siêu tuyệt vời vì bạn không thể chọn cơ sở dữ liệu, bạn đang làm sai. Nếu bạn biết mysql, chỉ cần sử dụng nó. Tối ưu hóa khi bạn thực sự cần. Sử dụng nó như một cửa hàng k/v, sử dụng nó như một rdbms, nhưng vì chúa, xây dựng ứng dụng sát thủ của bạn! Không ai trong số này sẽ quan trọng đối với hầu hết các ứng dụng. Facebook vẫn sử dụng MySQL, rất nhiều. Wikipedia sử dụng MySQL, rất nhiều. FriendFeed sử dụng MySQL, rất nhiều. NoSQL là một công cụ tuyệt vời, nhưng nó chắc chắn sẽ không phải là lợi thế cạnh tranh của bạn, nó sẽ không làm cho ứng dụng của bạn trở nên nóng, và trên hết, người dùng của bạn sẽ không đưa ra bất kỳ điều gì về điều này.

+0

'người dùng của bạn sẽ không đưa ra bất cứ điều gì về điều này '<- tôi thích phần này, đúng vậy. LOL – GusDeCooL

1

Digg có một số interestingarticles về câu hỏi này. Về cơ bản, bạn đang thay đổi gánh nặng của việc xử lý để viết chứ không phải là đọc, mà có thể là mong muốn trong các ứng dụng có khả năng mở rộng cao. Cassandra đặc biệt cũng rất có sẵn.

Simplistically, Cassandra là một cơ sở dữ liệu phân tán với một mô hình dữ liệu BigTable chạy trên một Dynamo như cơ sở hạ tầng. Đó là định hướng cột và cho phép lưu trữ dữ liệu tương đối có cấu trúc. Nó có một mô hình phân cấp hoàn toàn ; mỗi nút giống hệt nhau và không có điểm lỗi nào. Nó cũng cực kỳ khả năng chịu lỗi; dữ liệu được nhân rộng thành nhiều nút và trên các trung tâm dữ liệu . Cassandra cũng rất đàn hồi; đọc và ghi thông lượng tăng tuyến tính khi máy mới được thêm .

0

Khi bạn nói, dữ liệu modell khá đơn giản, điều này có thể nói cho tùy chọn NoSQL.

Khi bạn có nhiều thuộc tính để thực hiện lựa chọn, tải giao dịch lớn hoặc cấu trúc bảng phức tạp, sẽ nói cho các bảng SQL truyền thống.

Tôi khuyên bạn nên tìm hiểu xem sẽ khó khăn như thế nào để triển khai mô hình dữ liệu với một hoặc hai cơ sở dữ liệu NoSQL. Khi điều này là khá khó khăn, bạn cũng có thể làm cho một lược đồ bảng cổ điển để so sánh với.

Khi bạn gặp khó khăn với NoSQL, điều này có thể nói cho tùy chọn SQL. Nhưng cũng có thể, rằng tải trọng nặng được xử lý tốt hơn với NoSQL - nhưng cũng có thể là một cơ sở dữ liệu SQL tốt đủ ...

Việc đệm cũng có thể được thực hiện với một Proxy-Server đơn giản ...

Khi gặp khó khăn, cũng có thể xem xét kết hợp NoSQL và SQL.

1

tôi thích quy luật của Ian Eure của: “nếu bạn đang triển khai memcache trên cơ sở dữ liệu của bạn, bạn đang phát minh ad-hoc của riêng bạn, khó khăn để duy trì NoSQL hệ thống.”

http://www.rackspacecloud.com/blog/2010/02/25/should-you-switch-to-nosql-too/

+1

Tôi tôn trọng bạn 2 (Jonathan Ellis và Ian Eure) quá nhiều để xem đây là một phản ứng nghiêm trọng. Chắc chắn đây chỉ là một trò đùa hóc búa? – schmichael

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