2012-09-08 31 views
5

Có vẻ như bạn không thể thực hiện các giao dịch trong riak. Làm cách nào để đảm bảo dữ liệu chính xác?Đảm bảo tính đúng đắn trong riak?

Cho phép nói rằng chúng tôi muốn chèn nhận xét. Trong redis tôi muốn làm

commentId=incr commentCount 
multi 
SET comment_post:commentId postId //for later use when we flag comments. We'll need to know where in the db it is 
RPUSH post_comment:postId binaryValue //contains commentId in it + comment body 
exec 

Trong sql tôi sẽ chèn một hàng mới vào bảng nhận xét với văn bản và id bài. Cả hai đều sử dụng nhiều hơn một câu lệnh. Làm thế nào để tôi cả hai chèn cơ thể bình luận và liên kết các bài viết để bình luận trong riak vì nó không có giao dịch?

Một vấn đề khác là nếu tôi sửa đổi bài đăng. Làm cách nào để cập nhật bài đăng và cập nhật danh sách thẻ bài đăng bằng cách sử dụng thẻ đó

Trả lời

6

Riak là hệ thống nhất quán cuối cùng được thiết kế để viết có sẵn và không có khái niệm về nguyên tử; không có bộ đếm nguyên tử hoặc giao dịch.

Chỉnh sửa: Chúng tôi đã phát hành bộ đếm sử dụng CRDT ở Riak 1.4. Để biết chi tiết, xem Counters in Riak 1.4

Phương pháp được Riak sử dụng dựa trên giấy Amazon Dynamo và sử dụng đồng hồ vector để giải quyết xung đột; đó là một chu trình đọc/sửa đổi/ghi với bất kỳ giải pháp xung đột nào được thực hiện trong lần đọc tiếp theo. Tại bất kỳ thời điểm nào bạn có thể có nhiều giá trị cho một khóa nhất định sẽ được trả lại khi thực hiện tìm nạp.

âm thanh như bạn muốn nhìn vào secondary indexes của chúng tôi (nếu tôi hiểu kịch bản của bạn; thực tế là bạn cần một mới commentId cho một 'như' là hơi khó hiểu mà không biết thêm). Bạn sẽ tạo một chỉ mục phụ chỉ vào phần bình luận của bạn được gửi cùng với bản thân thân thể khi bạn làm một cửa hàng. Điều đó giải quyết ít nhất một nửa vấn đề.

Cách bạn nhận được commentId của bạn hơi phức tạp hơn một chút. Bạn không thể sử dụng bộ đếm nguyên tử toàn cục vì chúng tôi không có chúng. Thiết kế của bạn sẽ cần hoặc không dựa vào các ID tuần tự (có thể tạo UUID?) Và có lẽ sử dụng links của chúng tôi?

Nếu bạn quan tâm và muốn thảo luận về các phương pháp tiếp cận thiết kế có thể, hãy ping cho chúng tôi theo số riak-users mailing list - tất cả các kỹ sư của chúng tôi đã đọc và luôn sẵn lòng trả lời câu hỏi.

+0

Tôi không biết nhiều về riak vì tôi đã xem qua nó. Khi tôi biết những điều cơ bản hoặc nhiều hơn tôi sẽ đăng ở đó nhưng không phải bây giờ. Tôi muốn có được một ý tưởng chung những gì nó phù hợp cho như tôi phát hiện ra redis là xấu tại là một db vì nó có thể phù hợp với tất cả mọi thứ trong bộ nhớ. Tôi không biết một điều về 'đồng hồ vectơ' nhưng bạn chỉ nói rằng tôi có thể có nhiều giá trị cho một khóa âm thanh kỳ lạ nhưng tôi sẽ giả vờ riak là khá hiệu quả. Vì vậy, riak được thiết kế để có tất cả logic nhất quán được thực hiện bởi các ứng dụng? Thats thú vị –

+0

Tôi đã làm một chút đọc. Tôi là một chút bối rối bc ví dụ cho thấy thiết lập allow_mult được thiết lập là true. Vì vậy, những gì sẽ xảy ra nếu tôi có một cái gì đó có một cuộc xung đột viết và là sai ... Vì vậy, nó có vẻ như tất cả mọi thứ có một vclock trong nó? Có vẻ như bạn đang viết cao. Tôi có thể thấy việc sử dụng và cân bằng ở đó. Tôi có thể tưởng tượng làm thế nào để giải quyết và sửa chữa những thứ cho nhu cầu của tôi nhưng tôi không thể tưởng tượng/suy nghĩ về những gì sẽ xảy ra nếu tôi didnt thiết lập multis và nó là sai? Liệu một người có ghi đè lên người khác không? Nó sẽ thất bại? Tôi có thể xem cách xử lý mọi thứ nếu nó không thành công (nhưng tôi sẽ phải hoàn tác các bài viết khác) –

+0

nhưng tôi không thể thấy điều gì sẽ xảy ra nếu nó không thành công và một công việc đã hoàn thành trong khi công việc khác bắt đầu và kết thúc một chút sau nó và ghi đè dữ liệu . –