2010-06-16 22 views
7

Tôi đang tìm cách lưu trữ ảnh trong cơ sở dữ liệu NoSQL (< 5MB) và liên kết chúng với các bài viết trong một nhóm khác. Tính năng đi bộ liên kết của Riak cung cấp loại tốc độ nào? Nó giống như một RDBMS tham gia?Riak liên kết-đi bộ như một tham gia?

Trả lời

11

Các liên kết hoàn toàn không giống với JOIN (liên quan đến sản phẩm Descartes), nhưng chúng có thể được sử dụng cho các mục đích tương tự trong một số giác quan. Chúng rất giống với các liên kết trong một tài liệu HTML.

Với liên kết đi bộ, bạn bắt đầu bằng một phím hoặc bạn tạo công việc giảm bản đồ bắt đầu bằng nhiều khóa. Các giá trị này được tìm nạp, các liên kết của chúng được lọc theo đặc tả của bạn (xô, thẻ) và sau đó các liên kết trùng khớp được chuyển đến giai đoạn tiếp theo (hoặc quay lại khách hàng). Tất nhiên, tất cả điều này được thực hiện song song (không giống như JOIN) với dữ liệu địa phương cao.

Ngoài ra, việc giảm bản đồ không chậm, bạn chỉ không có kế hoạch truy vấn phức tạp để thực hiện công việc khó khăn cho mình; bạn phải suy nghĩ về cách bạn sẽ truy vấn và tổ chức dữ liệu của bạn xung quanh đó khi cần thiết.

7

Suy nghĩ các mối quan hệ một chiều và nhanh như truy vấn bình thường. Không chậm bằng MapReduce.

Từ: http://seancribbs.com/tech/2010/02/06/why-riak-should-power-your-next-rails-app/

Cách đầu tiên mà Riak giao dịch với này là với liên kết đi bộ. Mọi dữ liệu được lưu trữ ở Riak có thể có các mối quan hệ một chiều với dữ liệu khác thông qua tiêu đề HTTP liên kết . Trong ví dụ kinh điển, bạn biết khóa của một dải mà bạn đã lưu trữ trong nhóm "nghệ sĩ" (nhóm Riak giống như cơ sở dữ liệu bảng hoặc thùng S3). Nếu nghệ sĩ đó được liên kết với album của album, nằm trong số lượt được liên kết với các bản nhạc trên anbom , bạn có thể tìm thấy tất cả các bản nhạc được tạo trong một yêu cầu. Như tôi sẽ mô tả trong phần tiếp theo, đây là ít nhiều đau đớn hơn JOIN trong SQL vì mỗi mục được điều hành trên độc lập, thay vì bảng ở một lần. Đây là những gì truy vấn mà sẽ trông giống như:

GET /thô/nghệ sĩ/The Beatles/album, ,/bài hát, _, 1 “/ thô” là đỉnh của namespace URL , “nghệ sĩ” là thùng, “TheBeatles” là khóa đối tượng nguồn. Dưới đây là thông số kỹ thuật đối sánh để liên kết theo dõi, dưới dạng của nhóm, thẻ, giữ bộ ba, trong đó gạch dưới khớp với bất kỳ thứ gì. Tham số thứ ba, “giữ” nói để trả lại kết quả từ bước đó, có nghĩa là bạn có thể truy xuất kết quả từ bất kỳ bước nào bạn muốn, trong bất kỳ kết hợp nào. Tôi không biết về bạn, nhưng với tôi rằng cảm thấy tự nhiên hơn này:

CHỌN track * FROM track INNER THAM GIA album ON tracks.album_id = albums.id INNER JOIN nghệ sĩ ON album.. artist_id = artists.id WHERE artists.name = "The Beatles" báo trước liên kết là họ vốn dĩ một chiều, nhưng điều này có thể khắc phục được với một chút khó khăn trong đơn đăng ký của bạn. Nếu không có ràng buộc toàn vẹn tham chiếu trong cơ sở dữ liệu SQL của bạn (mà ActiveRecord đã gây ra đau đớn trong quá khứ), bạn không đảm bảo chắc chắn rằng DELETE hoặc CẬP NHẬT của bạn sẽ không khiến cho hàng này bị thiếu mồ côi. Chúng tôi là loại hư hỏng vì ActiveRecord xử lý liên kết của các liên kết tự động.

Nơi các tính năng liên kết đi thực sự tỏa sáng trong tự tham chiếu và sâu bắc cầu mối quan hệ (nghĩ has_many: thông qua lệnh lớn).Vì bạn không cần phải tạo một bảng ảo thông qua các phiên bản khác nhau của cùng một bảng , bạn có thể dễ dàng làm những việc như biểu đồ mạng xã hội (bạn bè của bạn bè) và cấu trúc dữ liệu như cây cối và danh sách.

+0

Được lưu trữ trong tiêu đề, điều đó có nghĩa là liên kết được lưu trữ trong tài liệu là liên kết http đến vị trí của tài liệu được liên kết không? – tesserakt

+0

Riak được truy cập qua HTTP vì vậy, về mặt kỹ thuật, có - tài liệu được lưu trữ dưới một liên kết http. Nhưng bạn không cần phải đi bộ chuỗi liên kết để truy cập tài liệu của mình, bạn có thể truy cập trực tiếp vào tài liệu đó. – databyte

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