Có bất kỳ cửa hàng dữ liệu NoQuery nào tuân thủ ACID không?


155

Có bất kỳ cửa hàng dữ liệu NoQuery nào tuân thủ ACID không?


2
Thực sự đã có FoundationDB tuân thủ axit. Bây giờ Apple đã chộp lấy nó
Người dùng không có mũ

Câu trả lời:


110

Tôi sẽ đăng bài này dưới dạng câu trả lời hoàn toàn để hỗ trợ cuộc trò chuyện - Tim Mahy , nawrothCraigTP đã đề xuất cơ sở dữ liệu khả thi. CouchDB sẽ là ưu tiên của tôi do sử dụng Erlang , nhưng có những thứ khác ở ngoài đó.

Tôi muốn nói rằng ACID không mâu thuẫn hoặc phủ nhận khái niệm về NoQuery ... Mặc dù dường như có một xu hướng theo ý kiến ​​của chim bồ câu , tôi sẽ cho rằng các khái niệm này là khác biệt.

Về cơ bản, NoQuery là về giá trị khóa đơn giản (ví dụ Redis) hoặc lược đồ kiểu tài liệu (các cặp giá trị khóa được thu thập trong mô hình "tài liệu", ví dụ MongoDB) như là một thay thế trực tiếp cho lược đồ rõ ràng trong các RDBMS cổ điển. Nó cho phép nhà phát triển xử lý mọi thứ một cách bất đối xứng, trong khi các công cụ truyền thống đã thực thi tính đồng nhất cứng nhắc trên mô hình dữ liệu. Lý do điều này rất thú vị là vì nó cung cấp một cách khác để đối phó với sự thay đổi và đối với các tập dữ liệu lớn hơn, nó cung cấp các cơ hội thú vị để xử lý khối lượng và hiệu suất.

ACID cung cấp các nguyên tắc chi phối cách thay đổi được áp dụng cho cơ sở dữ liệu. Theo một cách rất đơn giản, nó tuyên bố (phiên bản của riêng tôi):

  • (A) khi bạn làm một cái gì đó để thay đổi cơ sở dữ liệu, thay đổi sẽ hoạt động hoặc thất bại toàn bộ
  • (C) cơ sở dữ liệu phải nhất quán (đây là một chủ đề khá rộng)
  • (I) nếu những thứ khác đang diễn ra cùng một lúc thì họ không thể thấy những thứ cập nhật giữa
  • (D) nếu hệ thống nổ tung (phần cứng hoặc phần mềm) cơ sở dữ liệu cần có khả năng tự sao lưu; và nếu nó nói rằng nó đã hoàn thành việc áp dụng một bản cập nhật, thì nó cần phải chắc chắn

Cuộc trò chuyện trở nên phấn khích hơn một chút khi nói đến ý tưởng tuyên truyền và ràng buộc . Một số công cụ RDBMS cung cấp khả năng thực thi các ràng buộc (ví dụ: khóa ngoại) có thể có các phần tử lan truyền (a la cascade ). Nói một cách đơn giản hơn, một "thứ" có thể có mối quan hệ với một "thứ" khác trong cơ sở dữ liệu và nếu bạn thay đổi một thuộc tính của một thứ thì nó có thể yêu cầu thay đổi khác (cập nhật, xóa, ... rất nhiều tùy chọn). Các cơ sở dữ liệu NoQuery , chủ yếu (hiện tại) tập trung vào khối lượng dữ liệu cao và lưu lượng truy cập cao, dường như đang giải quyết ý tưởng về các cập nhật phân tán diễn ra trong (theo quan điểm của người tiêu dùng) các khung thời gian tùy ý. Đây về cơ bản là một hình thức nhân rộng chuyên biệt được quản lý thông quagiao dịch - vì vậy tôi sẽ nói rằng nếu một cơ sở dữ liệu phân tán truyền thống có thể hỗ trợ ACID, thì cơ sở dữ liệu NoQuery cũng vậy.

Một số tài nguyên để đọc thêm:


15
Câu trả lời tốt. Bạn có thể có cả NoQuery + ACID và không ACID-RDBMS (nghĩ rằng MySQL + MyISAM). Tôi thường coi NoQuery là "cuối cùng nhất quán". Tôi cũng sẽ đưa vào định lý CAP ... :-)
gbn

+1 @gbn khi đề cập đến định lý CAP. Bây giờ tôi đã quen thuộc với db "nosql" hơn tôi khi đó chỉ củng cố việc tách các khái niệm. Ngoài ra, cơ sở dữ liệu key-value vs doc, vì có sự khác biệt về kiến ​​trúc.
AJ.

-1 để đề cập đến định lý CAP, chúng ta nên ghi nó. Vui lòng đọc https://martin.kleppmann.com/2015/05/11/please-stop-calling-database-cp-or-ap.html
Dinei 30/03/2017

36

CẬP NHẬT (27 tháng 7 năm 2012): Liên kết đến bài viết Wikipedia đã được cập nhật để phản ánh phiên bản của bài viết hiện tại khi câu trả lời này được đăng. Xin lưu ý rằng bài viết Wikipedia hiện tại đã được sửa đổi rộng rãi!

Chà, theo một phiên bản cũ hơn của một bài viết trên Wikipedia về NoQuery :

NoQuery là một phong trào thúc đẩy một lớp lưu trữ dữ liệu phi quan hệ được xác định một cách lỏng lẻo, phá vỡ một lịch sử lâu dài của cơ sở dữ liệu quan hệ và đảm bảo ACID.

và cũng:

Tên này là một nỗ lực để mô tả sự xuất hiện của một số lượng lớn các kho lưu trữ dữ liệu phân tán, không liên quan, thường không cố gắng cung cấp bảo đảm ACID.

Các hệ thống NoQuery thường cung cấp các đảm bảo tính nhất quán yếu như tính nhất quán cuối cùng và các giao dịch bị hạn chế đối với các mục dữ liệu đơn lẻ, mặc dù người ta có thể áp đặt các đảm bảo ACID đầy đủ bằng cách thêm một lớp phần mềm trung gian bổ sung.

Vì vậy, tóm lại, tôi muốn nói rằng một trong những lợi ích chính của kho lưu trữ dữ liệu "NoQuery" là thiếu các thuộc tính ACID khác biệt . Hơn nữa, IMHO, càng cố gắng thực hiện và thực thi các thuộc tính ACID , càng xa khỏi "tinh thần" của kho lưu trữ dữ liệu "NoQuery" mà bạn nhận được, và gần với RDBMS "thật" hơn (nói một cách tương đối, tất nhiên ).

Tuy nhiên, tất cả những gì đã nói, "NoQuery" là một thuật ngữ rất mơ hồ và mở ra cho các diễn giải riêng lẻ, và phụ thuộc rất nhiều vào quan điểm thuần túy của bạn. Ví dụ, hiện đại nhất ngày RDBMS hệ thống không thực sự tuân theo tất cả của Edgar F. Codd 's 12 quy tắc của mình mô hình mối quan hệ !

Theo một cách tiếp cận thực tế, có vẻ như CouchDB của Apache tiến gần nhất đến việc thể hiện cả hai tuân thủ ACID trong khi vẫn duy trì tâm lý "NoQuery" không liên quan, lỏng lẻo.


1
+1 Tôi không chắc chắn tôi đồng ý với việc thiếu ACID là một đặc điểm chính của "NoQuery", nhưng tôi thực sự đánh giá cao bài viết của bạn. Cuối cùng, nó nên là một giải pháp phù hợp.
AJ.

2
Tôi đã chỉnh sửa (chờ xem xét) để cố gắng làm rõ hơn nữa. Không có gì về các kiểu dữ liệu NoQuery có nghĩa là các giao dịch ACID không thể thực hiện được. Một số hệ thống phân tán NoQuery không có chúng. Một số thực sự làm mà không có bất kỳ "lớp trung gian".
Eric Bloch

2
Điều này không bao giờ đúng và thậm chí đã mất nguồn. Nó thực sự nên được xóa.
Lennart Regebro

2
Chà, rõ ràng nhất, điều này: "một cách ngắn gọn, tôi muốn nói rằng một trong những lợi ích chính của kho dữ liệu" NoQuery "là thiếu các thuộc tính ACID khác biệt." Bạn cũng ngụ ý rằng NoQuery và ACID bằng cách nào đó loại trừ lẫn nhau, điều này chắc chắn không chính xác. Đây là một ví dụ điển hình khi một số lượng lớn người thiếu hiểu biết đưa ra một câu trả lời không chính xác vì nó nghe có vẻ hợp lý. Hầu hết các cơ sở dữ liệu NoQuery không tuân thủ ACID chủ yếu là do những người triển khai nó không biết nó là gì / tại sao nó quan trọng / không quan tâm.
Lennart Regebro

@LennartRegebro - Tôi không ngụ ý bất kỳ điều gì như vậy. Sự tuân thủ ACID thực sự đã được tránh khỏi bởi hầu hết các cơ sở dữ liệu NoQuery hiện tại, có lợi cho tốc độ / hiệu suất và tính nhất quán cuối cùng. Mặc dù vậy, tôi chưa bao giờ nói rằng bạn không thể có NoQuery với tuân thủ ACID.
CraigTP

20

Vui lòng đảm bảo bạn đã đọc phần giới thiệu của Martin Fowler về cơ sở dữ liệu NoQuery . Và video tương ứng.

Trước hết, chúng ta có thể phân biệt hai loại cơ sở dữ liệu NoQuery:

  1. Cơ sở dữ liệu định hướng tổng hợp;
  2. Cơ sở dữ liệu định hướng đồ thị (ví dụ Neo4J).

Theo thiết kế, hầu hết các cơ sở dữ liệu hướng đồ thị là ACID !

Sau đó, những gì về các loại khác?

Trong cơ sở dữ liệu định hướng tổng hợp, chúng ta có thể đặt ba loại phụ:

  • Cơ sở dữ liệu NoQuery dựa trên tài liệu (ví dụ MongoDB, CouchDB);
  • Cơ sở dữ liệu khóa / giá trị NoQuery (ví dụ Redis);
  • Cột cơ sở dữ liệu NoQuery (ví dụ: Hibase, Cassandra).

Cái mà chúng ta gọi là Tổng hợp ở đây, là những gì Eric Evans đã định nghĩa trong Thiết kế hướng tên miền của nó như là một thực thể và các đối tượng giá trị tự cung cấp trong một bối cảnh bị ràng buộc nhất định.

Kết quả là, tổng hợp là một tập hợp dữ liệu mà chúng ta tương tác với tư cách là một đơn vị. Các uẩn tạo thành các ranh giới cho các hoạt động ACID với cơ sở dữ liệu. (Martin Fowler)

Vì vậy, ở cấp độ Tổng hợp, chúng tôi có thể nói rằng hầu hết các cơ sở dữ liệu NoQuery có thể an toàn như ACID RDBMS , với các cài đặt phù hợp. Về nguồn, nếu bạn điều chỉnh máy chủ của mình để có tốc độ tốt nhất, bạn có thể gặp phải điều gì đó không phải là ACID. Nhưng nhân rộng sẽ giúp.

Quan điểm chính của tôi là bạn phải sử dụng cơ sở dữ liệu NoQuery, chứ không phải là một thay thế (giá rẻ) cho RDBMS. Tôi đã thấy quá nhiều dự án lạm dụng quan hệ giữa các tài liệu. Điều này không thể là ACID. Nếu bạn ở cấp độ tài liệu, tức là ở ranh giới Tổng hợp, bạn không cần bất kỳ giao dịch nào. Và dữ liệu của bạn sẽ an toàn như với cơ sở dữ liệu ACID, ngay cả khi nó không thực sự là ACID, vì bạn không cần các giao dịch đó! Nếu bạn cần giao dịch và cập nhật nhiều "tài liệu" cùng một lúc, bạn không còn ở trong thế giới NoQuery nữa - vì vậy hãy sử dụng công cụ RDBMS thay thế!

Một số cập nhật 2019: Bắt đầu từ phiên bản 4.0, đối với các tình huống yêu cầu nguyên tử để cập nhật nhiều tài liệu hoặc tính nhất quán giữa các lần đọc cho nhiều tài liệu, MongoDB cung cấp các giao dịch đa tài liệu cho các bộ bản sao .



Có những trường hợp khi có một quá trình / saga lớn xử lý nhiều tập hợp. Có những trường hợp khi một lệnh được gửi đến tổng hợp có thể kích hoạt một số sự kiện thay đổi các tổng hợp khác. Trong những trường hợp này, bạn cần lưu trữ dữ liệu tuân thủ ACID.
Tudor

1
@TudorTudor nhưng trong trường hợp này bạn đang phá vỡ một trong những nguyên tắc nosql, vì bạn đang sử dụng nó như một rdbms. Bạn chỉ cần tổng hợp lớn hơn hoặc phiên bản của các tài liệu (như trong couchdb). Db định hướng tài liệu Nosql là axit tại ranh giới tài liệu / tổng hợp.
Arnaud Bouchez

Không ai trong số những người bạn liệt kê là tuân thủ axit. Mongo chỉ sở hữu không tuân thủ ACID. CouchDB giả vờ rằng nó tuân thủ axit miễn là bạn không cập nhật hai tài liệu. Redis chỉ có "hỗ trợ một phần cho các giao dịch". HBase là thẳng không tuân thủ axit (từ các nhà phát triển) , Cassandra cũng không. Câu trả lời này trong thực tế chỉ là sai. Không có cơ sở dữ liệu nào trong số này hỗ trợ ACID và hầu hết trong số họ công khai sở hữu nó với một tìm kiếm google đơn giản.
Evan Carroll

@EvanCarroll Tôi chưa bao giờ viết rằng MongoDB tuân thủ ACID, có nghĩa tương tự như với giao dịch ACID RDBMS. Không có giao dịch có sẵn. Những gì tôi đã viết là hầu hết các cơ sở dữ liệu NoQuery có thể an toàn như ACID RDBMS, với các cài đặt thích hợp . Chẳng hạn, kiểm tra toán tử MongoDB bị cô lập $ cho DB mà không có bất kỳ cụm chia sẻ nào. Tôi sẽ không bao giờ sử dụng MongoDB cho quy trình tài chính, nhưng tôi có thể tin tưởng vào quy trình viết của nó cho một số phần mở rộng, cho các hoạt động giống như ACID, nếu A cho Nguyên tử là đủ. Xin lỗi nếu câu trả lời của tôi là khó hiểu.
Arnaud Bouchez

18

FoundationDB tuân thủ ACID:

http://www.foundationdb.com/

Nó có các giao dịch phù hợp, vì vậy bạn có thể cập nhật nhiều mục dữ liệu khác nhau theo kiểu ACID. Điều này được sử dụng làm nền tảng để duy trì các chỉ mục ở một lớp cao hơn.


6
thật không may, nó không phải là nguồn mở. Nhưng nó trông giống như một cơ sở dữ liệu rất tốt.
Kevin Cox

Để thêm vào câu trả lời @ Ken-Tindell, djondb cũng là NoQuery và thực hiện các giao dịch và nó tuân thủ ACID. djondb.com Tôi đồng ý rằng NoQuery chỉ là một thuật ngữ để đồng xu tất cả các cơ sở dữ liệu không tuân theo các quy tắc truyền thống của RDBMS, điều đó không có nghĩa là "thoát khỏi các hệ thống TX" hoặc quên đi các mối quan hệ.
Chéo

3
Câu trả lời của tôi đã được đưa ra khi mua lại Foundation DB.
Ken Tindell 28/03/2015

1
Foundationdb hiện là nguồn mở của Apple
RBanerjee

17

Trong câu hỏi này ai đó phải đề cập đến OrientDB : OrientDB là một cơ sở dữ liệu NoQuery, một trong số ít, hỗ trợ các giao dịch ACID đầy đủ. ACID không chỉ dành cho RDBMS vì nó không phải là một phần của đại số quan hệ. Vì vậy, có thể có cơ sở dữ liệu NoQuery hỗ trợ ACID.

Tính năng này là tính năng tôi nhớ nhất trong MongoDB


Nguồn mở chủ yếu là github.com/orientechnology/orientdb nhưng có các tính năng doanh nghiệp nguồn đóng
basarat

14

ACID và NoQuery hoàn toàn trực giao. Người này không ngụ ý người kia.

Tôi có một cuốn sổ trên bàn, tôi dùng nó để ghi chú những việc mà tôi vẫn phải làm. Sổ ghi chép này là một cơ sở dữ liệu NoQuery. Tôi truy vấn nó bằng cách sử dụng tìm kiếm tuyến tính với "bộ đệm trang" vì vậy tôi không phải luôn tìm kiếm mọi trang. Nó cũng tuân thủ ACID vì tôi đảm bảo rằng tôi chỉ viết một điều tại một thời điểm và không bao giờ trong khi tôi đang đọc nó.

NoQuery đơn giản có nghĩa là nó không phải là SQL. Nhiều người bị lẫn lộn và nghĩ rằng nó có nghĩa là lưu trữ rất nhanh-hoang-tây-siêu-nhanh. Nó không. Nó không có nghĩa là lưu trữ khóa-giá trị, hoặc tính nhất quán cuối cùng. Tất cả điều đó có nghĩa là "không phải SQL", có rất nhiều cơ sở dữ liệu trên hành tinh này và hầu hết chúng không phải là SQL [cần dẫn nguồn] .

Bạn có thể tìm thấy nhiều ví dụ trong các câu trả lời khác vì vậy tôi không cần liệt kê chúng ở đây, nhưng có các cơ sở dữ liệu không phải SQL có tuân thủ ACID cho các hoạt động khác nhau, một số chỉ là ACID cho ghi đối tượng duy nhất trong khi một số đảm bảo hơn nhiều. Mỗi cơ sở dữ liệu là khác nhau.


3
Chỉ mang tính mô phạm nhưng nó thường có nghĩa là 'Không chỉ SQL' :-)
shmish111

4
@ shmish111 không thật. Nó có nghĩa là "Không có SQL" khi thuật ngữ này được đặt ra lần đầu tiên. Chữ "o" là nhỏ, không phải là vốn. Sau đó, đã có những nỗ lực để gọi lại thuật ngữ là "Không chỉ SQL" khi một số trong số này (các sản phẩm NoQuery) bắt đầu thêm giao diện ngôn ngữ truy vấn giống như SQL.
ypercubeᵀᴹ

11

"NoQuery" không phải là một thuật ngữ được xác định rõ. Đó là một khái niệm rất mơ hồ. Như vậy, thậm chí không thể nói đâu là sản phẩm "NoQuery". Không phải gần như tất cả các sản phẩm có nhãn hiệu chính tả với nhãn là các cửa hàng khóa-giá trị.


3
Câu trả lời tốt nhất. Khi cuộc chiến nảy lửa này xảy ra, tôi muốn hỏi bên kia về việc xác định các tính năng mà họ yêu cầu rõ ràng từ cơ sở dữ liệu NoQuery và thường trùng lặp với các tính năng họ có thể tìm thấy trong RDBMS - không phải vì một hoặc RDBMS phù hợp với chủ đề NoQuery mà đơn giản là vì chúng tính năng 'yêu cầu' mơ hồ đến mức chúng không phủ nhận hoàn toàn, các tính năng được tìm thấy trong (không nhất thiết là tất cả) RDMBS. +1 cho người bạn bình luận của bạn!
StartupGuy

8

Có, MarkLogic Server là một giải pháp NoQuery (cơ sở dữ liệu tài liệu tôi muốn gọi nó) hoạt động với các giao dịch ACID


1
MarkLogic có các giao dịch ACID, giao dịch đa tài liệu, giao dịch đa câu lệnh và hỗ trợ cho XA - tất cả các cụm / phân phối.
Eric Bloch

8

Ông nội của NoQuery: ZODB tuân thủ ACID. http://www.zodb.org/

Tuy nhiên, đó chỉ là Python.


1
Đối với những người tìm cách chuyển từ thư viện "tạm trú" của python, tôi thấy ZODB gần như không có gì. Tôi không cần phải viết lại tất cả các chức năng của mình - chỉ cần truy cập ZODB như một từ điển giống như kệ, nhưng nó là một thứ tự nhanh hơn.
Michael Galaxy

8

Là một trong những người khởi tạo NoQuery (Tôi là người đóng góp sớm cho Apache CouchDB và là diễn giả tại sự kiện NoQuery đầu tiên được tổ chức tại CBS Interactive / CNET năm 2009) Tôi rất vui khi thấy các thuật toán mới tạo ra các khả năng không tồn tại trước đó . Giao thức Calvin cung cấp một cách mới để nghĩ về các ràng buộc vật lý như CAP và PACELC .

Thay vì sao chép không đồng bộ chủ động / thụ động hoặc sao chép đồng bộ chủ động / chủ động, Calvin duy trì tính chính xác và tính sẵn có trong các lần sao chép bằng cách sử dụng giao thức giống RAFT để duy trì nhật ký giao dịch. Ngoài ra, các giao dịch được xử lý một cách xác định tại mỗi bản sao, loại bỏ khả năng bế tắc, do đó, thỏa thuận đạt được chỉ với một vòng đồng thuận duy nhất. Điều này làm cho nó nhanh chóng ngay cả trên các triển khai trên nhiều đám mây trên toàn thế giới.

FaunaDB là triển khai cơ sở dữ liệu duy nhất sử dụng giao thức Calvin, làm cho nó phù hợp nhất cho các khối lượng công việc đòi hỏi tính toàn vẹn dữ liệu giống như máy tính lớn với quy mô và tính linh hoạt của NoQuery.



4

NewQuery

Khái niệm này những người đóng góp Wikipedia định nghĩa là:

[Vỉ] một lớp các hệ thống quản lý cơ sở dữ liệu quan hệ hiện đại tìm cách cung cấp hiệu năng có thể mở rộng tương tự của các hệ thống NoQuery để xử lý khối lượng công việc đọc-ghi giao dịch trực tuyến (OLTP) trong khi vẫn duy trì bảo đảm ACID của hệ thống cơ sở dữ liệu truyền thống.[1][2][3]

Người giới thiệu

[1]Nancy Lynch và Seth Gilbert, phỏng đoán của Bia Brewer và tính khả thi của các dịch vụ web phù hợp, sẵn có, phân vùng, phù hợp, Tin tức ACM SIGACT, Tập 33 Số 2 (2002), pg. 51-59.

[2] "Định lý CAP của nhà sản xuất bia" , julianbrowne.com, Truy cập ngày 02 tháng 3 năm 2010

[3] "Định lý CAP nhà sản xuất trên các hệ thống phân tán" , royans.net


4

MongoDB thông báo rằng phiên bản 4.0 của nó sẽ tuân thủ ACID cho các giao dịch đa tài liệu.

Phiên bản 4.2. được cho là để hỗ trợ nó theo các thiết lập sharded.

https://www.mongodb.com/blog/post/multi-document-transilities-in-mongodb


Có, giao dịch ACID đa tài liệu hiện được hỗ trợ trong MongoDB. Xem mongodb.com/transilities để biết thêm thông tin và các video lặn sâu về cách chúng được thực hiện.
Grigori Melnik


3

hãy xem định lý CAP

EDIT: RavenDB dường như tuân thủ ACID


3

Để thêm vào danh sách các lựa chọn thay thế, một cơ sở dữ liệu NoSQL phù hợp hoàn toàn ACID là GT.M .





2

MarkLogic cũng tuân thủ ACID. Tôi nghĩ là một trong những người chơi lớn nhất bây giờ.


1

Chờ đã xong.

NoQuery DB tuân thủ ACID đã hết ----------- hãy xem citrusleaf


Aerospike có hỗ trợ giao dịch ACID đa khóa không? AKAIK nó giới hạn trong giao dịch đơn khóa.
eonil

1

BergDB là một cơ sở dữ liệu NoQuery nhẹ, mã nguồn mở, được thiết kế từ đầu để chạy các giao dịch ACID. Trên thực tế, BergDB là "nhiều" ACID hơn hầu hết các cơ sở dữ liệu SQL theo nghĩa là cách duy nhất để thay đổi trạng thái của cơ sở dữ liệu là chạy các giao dịch ACID với mức cô lập cao nhất (thuật ngữ SQL: "tuần tự hóa"). Sẽ không bao giờ có bất kỳ vấn đề nào với việc đọc bẩn, đọc không lặp lại hoặc đọc ảo.

Theo tôi, cơ sở dữ liệu vẫn có hiệu suất cao; nhưng đừng tin tôi, tôi đã tạo ra phần mềm. Thay vào đó hãy thử nó.


1

Rất nhiều giải pháp NoQuery hiện đại không hỗ trợ các giao dịch ACID (cập nhật đa khóa cách ly nguyên tử), nhưng hầu hết chúng đều hỗ trợ các nguyên hàm cho phép bạn thực hiện các giao dịch ở cấp ứng dụng.

Nếu một cửa hàng dữ liệu hỗ trợ tính tuyến tính theo khóa và so sánh và thiết lập (tính nguyên tử ở cấp độ tài liệu) thì đủ để thực hiện các giao dịch phía khách hàng, hơn nữa bạn có nhiều tùy chọn để chọn:

  1. Nếu bạn cần mức cô lập Nối tiếp thì bạn có thể theo cùng thuật toán mà Google sử dụng cho hệ thống Percolator hoặc Cockroach Labs cho CockroachDB . Tôi đã viết blog về nó và tạo ra một hình ảnh trực quan từng bước , tôi hy vọng nó sẽ giúp bạn hiểu được ý tưởng chính đằng sau thuật toán.

  2. Nếu bạn mong đợi sự ganh đua cao nhưng sẽ tốt cho bạn khi bạn đã đọc mức độ cô lập Đã cam kết, vui lòng xem qua các giao dịch RAMP của Peter Bailis.

  3. Cách tiếp cận thứ ba là sử dụng các giao dịch bù còn được gọi là mẫu saga. Nó được mô tả vào cuối những năm 80 trong bài báo Sagas nhưng trở nên thực tế hơn với sự phát triển của các hệ thống phân tán. Xin vui lòng xem bài nói chuyện Áp dụng mô hình Saga để lấy cảm hứng.

Danh sách các cửa hàng dữ liệu phù hợp cho các giao dịch phía khách hàng bao gồm Cassandra với các giao dịch nhẹ, Rịa với các nhóm nhất quán, RethinkDB, ZooKeeper, Etdc, HBase, DynamoDB, MongoDB và các giao dịch khác.



0

VoltDB là người đăng ký yêu cầu tuân thủ ACID và mặc dù vẫn sử dụng SQL, các mục tiêu của nó là giống nhau về khả năng mở rộng


2
Người tạo ra VoltDB đã đề cập rằng họ không tự gắn nhãn là NoSql mà giống NewSql hơn (vẫn sử dụng Sql nhưng có triển khai tốt hơn các RDBM được xây dựng vào những năm tám mươi)
Matt W

0

Mặc dù chỉ là một công cụ nhúng chứ không phải máy chủ, leveldb có WriteBatch và khả năng bật ghi đồng bộ để cung cấp hành vi ACID.





-1

Không chỉ NoQuery không tuân thủ ACID theo thiết kế. Phong trào NoQuery nắm lấy BASE (Có sẵn về cơ bản, trạng thái Mềm, Tính nhất quán cuối cùng) được cho là trái ngược với ACID. Cơ sở dữ liệu NoQuery thường được gọi là cơ sở dữ liệu bao gồm cuối cùng. Để hiểu được sự khác biệt, bạn nên đi sâu vào định lý CAP (hay còn gọi là định lý của nhà sản xuất bia)

Truy cập http://www.julianbrowne.com/article/viewer/brewers-cap-theorem


Tôi nghĩ rằng con trỏ đến định lý CAP rất phù hợp cho câu hỏi này!
mxro

2
Một số cơ sở dữ liệu NoQuery có giao dịch ACID.
Eric Bloch

1
Một số noQuery tuyên bố là tuân thủ ACID nhưng khi bạn đi sâu vào bên trong, bạn phát hiện ra rằng chỉ trong một số trường hợp cụ thể họ là ACID nên IMHO vì không có 'cuối cùng là ACID', họ chắc chắn không phải là ACID
Ste

1
Về cơ bản, bạn đang sử dụng sai. CAP và ACID liên quan một cách lỏng lẻo nhất, nhưng CAP không ngăn hệ thống phân tán tuân thủ ACID. CAP mô tả sự đánh đổi cần thiết của một hệ thống phân tán - một hệ thống NoQuery có tính nhất quán cao có thể không khả dụng trong một phân vùng, nhưng điều đó không loại trừ nó không tuân thủ ACID.
Jeff Jirsa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.