2010-11-15 54 views
22

Sau khi đọc một bài viết gây sốc được viết bởi Bret Taylor (đồng sáng lập của FriendFeed; CTO hiện tại của Facebook), How FriendFeed uses MySQL to store schema-less data, tôi bắt đầu tự hỏi liệu có cách nào tốt nhất để sử dụng RDBMS hay không chẳng hạn như Oracle, MySQL hoặc PostgreSQL để lưu trữ và truy vấn dữ liệu schemaless?Sử dụng cơ sở dữ liệu quan hệ cho dữ liệu Schemaless - Thực tiễn tốt nhất

Rất ít người muốn thừa nhận họ đang sử dụng cơ sở dữ liệu quan hệ khi NoSQL là điểm nóng mới, khiến việc tìm kiếm các bài viết hay về chủ đề này trở nên khó khăn. Làm thế nào để thực hiện một cơ sở dữ liệu schemaless (hoặc "hướng tài liệu") như một lớp trên cùng của một cơ sở dữ liệu quan hệ?

+2

Ví dụ FriendFeed của bạn trông đáng ngờ như một ví dụ về [Hiệu ứng nền tảng bên trong.] (Http://en.wikipedia.org/wiki/Inner-platform_effect). Ngoài ra, chỉ vì NoSQL là * màu đen mới, * không có nghĩa là cơ sở dữ liệu quan hệ đột ngột * nên ngày hôm qua. * –

+1

'@Robert Harvey:' Bài viết nói rằng "thiết kế như vậy hiếm khi đi vào hệ thống sản xuất thế giới thực, tuy nhiên, bởi vì hiệu suất có xu hướng tốt hơn một chút so với việc không hoạt động, do tất cả các kết nối thêm cần thiết. " Nhưng có vẻ như rất nhiều công ty lớn nhất đang thực hiện thành công! –

+0

Có rất nhiều CTO không biết về mặt kỹ thuật vì có các nhà phát triển không có kỹ thuật. – PerformanceDBA

Trả lời

3

Lưu trữ schemaless dữ liệu trong SQL cơ bản có nghĩa là thực hiện một cửa hàng quan trọng có giá trị điều đó xảy ra để sử dụng SQL như một đầu cuối. Vì bạn không sử dụng bất kỳ tính năng quan hệ nào và lược đồ là khá tầm thường, bạn sẽ không tìm thấy nhiều thông tin về thiết kế cơ sở dữ liệu SQL theo cách này. Tuy nhiên, bạn sẽ có thể tìm thấy nhiều thông tin tổng quát hơn về thiết kế ứng dụng để lưu trữ khóa-giá trị sẽ áp dụng.

1

Bạn sẽ không tìm thấy nhiều về chủ đề này bởi vì hầu hết mọi người xây dựng các giải pháp mục đích duy nhất. Các giải pháp của họ được thiết kế để đáp ứng một nhu cầu rất tốt. Cơ sở dữ liệu NoSQL mất rất nhiều nỗi đau trong việc xây dựng các kho dữ liệu mục đích duy nhất này nhưng bạn trả tiền vì không có sự linh hoạt và một số tính năng an toàn và điều khiển tích hợp của RDBMS.

2

Tôi đã nghiên cứu vấn đề này một cách rộng rãi. Nó là khá tầm thường để mô hình dữ liệu schemaless trong một RDBMS bằng cách sử dụng một bảng "thuộc tính" (về cơ bản sử dụng các cặp khóa/giá trị). Phần khó khăn là lập chỉ mục và truy vấn đối với mọi thứ của bạn. (Về cơ bản tất cả sự phức tạp mà Friendfeed xử lý tập trung xung quanh vấn đề này.)

Nếu bạn lập chỉ mục bảng thuộc tính, bạn kết thúc bằng chỉ mục với tất cả các thuộc tính. Điều này là không mong muốn vì nó thêm quá nhiều chi phí vì bạn chỉ muốn truy vấn dựa vào các thuộc tính nhất định. Ngoài ra, bạn chắc chắn sẽ muốn truy cập mọi thứ của bạn thông qua các chỉ mục ghép. Thật phức tạp khi mô hình hóa các chỉ mục phức hợp. Các giải pháp duy nhất tôi đã tìm thấy yêu cầu bạn xây dựng các chỉ mục của riêng bạn bằng cách sử dụng lược đồ chỉ cho mục đích đó - rất cồng kềnh. Tôi càng nhìn nó ít thực tế hơn.

Giải pháp tốt cho vấn đề này dựa vào việc sử dụng các chỉ mục từng phần (còn gọi là Chỉ mục được lọc).

1

Các kỹ sư tại Quora sử dụng MySQL as the data store instead of NoSQLs such as Cassandra, MongoDB, CouchDB etc. Họ partition data at the application level, có nghĩa là họ phân vùng dữ liệu chỉ khi cần thiết, giữ dữ liệu trên một máy nếu có thể và sử dụng một băm của khóa chính để phân vùng bộ dữ liệu lớn hơn trên nhiều cơ sở dữ liệu. Phân vùng dữ liệu cấp ứng dụng hoạt động theo cách thức dữ liệu đáp ứng một bộ tiêu chí được “giao” cho một cơ sở dữ liệu trong khi dữ liệu không đáp ứng được các tiêu chí đó (hoặc có thể là một bộ tiêu chí khác) có thể được gửi đến cơ sở dữ liệu khác nhau

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