AWS MySQL RDS so với AWS DynamoDB [đã đóng]


109

Tôi đã sử dụng MySQL được một thời gian và tôi cảm thấy thoải mái với cấu trúc của nó và Truy vấn SQL, v.v.

Hiện đang xây dựng một hệ thống mới trong AWS và tôi đang xem xét DynamoDB. Hiện tại tôi chỉ biết một chút về nó.

Cái này có tốt hơn cái kia không?

Ưu điểm của DynamoDB là gì?

Sự chuyển đổi như thế nào từ truy vấn MySQL, v.v. sang DB kiểu phẳng này?

Câu trả lời:


66

Bạn có thể đọc giải thích AWS về nó tại đây .

Tóm lại, nếu bạn chủ yếu có các truy vấn Tra cứu (chứ không phải truy vấn Tham gia) thì DynamoDB (và các NoSQL DB khác) sẽ tốt hơn. Nếu bạn cần xử lý nhiều dữ liệu , bạn sẽ bị hạn chế khi sử dụng MySQL (và các RDBMS khác).

Bạn không thể sử dụng lại các truy vấn MySQL cũng như lược đồ dữ liệu của mình, nhưng nếu bạn dành nỗ lực để học NoSQL, bạn sẽ thêm một công cụ quan trọng vào hộp công cụ của mình. Có nhiều trường hợp DynamoDB đưa ra giải pháp đơn giản nhất.


262

Thực sự DynamoDB và MySQL là táo và cam. DynamoDB là một lớp lưu trữ NoSQL trong khi MySQL được sử dụng để lưu trữ quan hệ. Bạn nên chọn những gì để sử dụng dựa trên nhu cầu thực tế của ứng dụng của bạn. Trên thực tế, một số ứng dụng có thể được phục vụ tốt bằng cách sử dụng cả hai.

Ví dụ: nếu bạn đang lưu trữ dữ liệu không phù hợp tốt với lược đồ quan hệ (cấu trúc cây, biểu diễn JSON không có lược đồ, v.v.) có thể được tra cứu dựa trên một khóa đơn hoặc tổ hợp khóa / phạm vi thì DynamoDB ( hoặc một số cửa hàng NoSQL khác) có thể sẽ là lựa chọn tốt nhất của bạn.

Nếu bạn có một lược đồ được xác định rõ ràng cho dữ liệu của mình có thể phù hợp tốt với cấu trúc quan hệ và bạn cần sự linh hoạt để truy vấn dữ liệu theo một số cách khác nhau (tất nhiên là thêm chỉ mục nếu cần), thì RDS có thể là giải pháp tốt hơn .

Lợi ích chính khi sử dụng DynamoDB làm kho lưu trữ NoSQL là bạn nhận được thông lượng đọc / ghi được đảm bảo ở bất kỳ mức nào bạn yêu cầu mà không phải lo lắng về việc quản lý một kho dữ liệu được phân nhóm. Vì vậy, nếu ứng dụng của bạn yêu cầu 1000 lần đọc / ghi mỗi giây, bạn chỉ có thể cung cấp bảng DynamoDB của mình cho mức thông lượng đó và không thực sự phải lo lắng về cơ sở hạ tầng bên dưới.

RDS có nhiều lợi ích tương tự là không phải lo lắng về bản thân cơ sở hạ tầng, tuy nhiên nếu cuối cùng bạn cần thực hiện một số lượng ghi đáng kể đến mức kích thước phiên bản lớn nhất sẽ không còn theo kịp, bạn sẽ không còn tùy chọn (bạn có thể chia tỷ lệ theo chiều ngang để đọc bằng cách sử dụng các bản sao đã đọc).

Lưu ý cập nhật: DynamoDb hiện hỗ trợ lập chỉ mục thứ cấp toàn cầu, vì vậy bạn hiện có khả năng thực hiện tra cứu được tối ưu hóa trên các trường dữ liệu ngoài hàm băm hoặc kết hợp các khóa băm và phạm vi.


10
Nếu tôi có thể ủng hộ câu trả lời của bạn trước 100, tôi sẽ.
Salil

Một số loại vấn đề trong mô hình thông tin có xu hướng tốt với kiểu triển khai NoSQL. Khi bạn tình cờ gặp những vấn đề như vậy, hãy tự hỏi mình rằng liệu có hợp lý khi có NoSQL Db hay không. Một số thực thể này là: Nhật ký, Dữ liệu chuỗi thời gian, Mạng xã hội, Quản lý nội dung, Danh mục sản phẩm, v.v.
user398039

150

Chúng tôi vừa di chuyển tất cả các bảng DynamoDB của mình sang RDS MySQL.

Mặc dù sử dụng DynamoDB cho các tác vụ cụ thể có thể có ý nghĩa, nhưng việc xây dựng một hệ thống mới trên DynamoDB thực sự là một ý tưởng tồi. Các kế hoạch được bố trí tốt nhất, v.v., bạn luôn cần sự linh hoạt bổ sung từ DB của mình.

Đây là lý do chúng tôi chuyển từ DynamoDB:

  1. Lập chỉ mục - Không thể thay đổi hoặc thêm các phím một cách nhanh chóng nếu không tạo một bảng mới.
  2. Truy vấn - Dữ liệu truy vấn rất hạn chế. Đặc biệt nếu bạn muốn truy vấn dữ liệu không được lập chỉ mục. Tất nhiên là không thể tham gia nên bạn phải quản lý các quan hệ dữ liệu phức tạp trên lớp mã / bộ nhớ cache của mình.
  3. Sao lưu - Quy trình sao lưu tẻ nhạt như vậy là một bất ngờ đáng thất vọng so với sao lưu RDS trơn tru
  4. GUI - UX tồi, tìm kiếm hạn chế, không thú vị.
  5. Tốc độ - Thời gian đáp ứng có vấn đề so với RDS. Bạn thấy mình đang xây dựng cơ chế lưu vào bộ nhớ đệm phức tạp để bù đắp cho nó ở những nơi bạn đã giải quyết cho bộ nhớ đệm bên trong của RDS.
  6. Tính toàn vẹn của dữ liệu - Mặc dù khái niệm về cấu trúc dữ liệu linh hoạt nghe có vẻ dễ chịu khi bắt đầu, nhưng một số dữ liệu của bạn tốt hơn nên được "đặt trong đá". Gõ mạnh là một điều may mắn khi một lỗi nhỏ cố gắng phá hủy cơ sở dữ liệu của bạn. Với DynamoDB, mọi thứ đều có thể xảy ra và thực sự là bất cứ điều gì có thể xảy ra sai sót.

Hiện chúng tôi sử dụng DynamoDB làm bản sao lưu cho một số hệ thống và tôi chắc chắn rằng chúng tôi sẽ sử dụng nó trong tương lai cho các tác vụ cụ thể, được xác định rõ. Nó không phải là một DB tồi, nó không phải là một DB để phục vụ 100% hệ thống cốt lõi của bạn.

Về những ưu điểm, tôi muốn nói Khả năng mở rộng và Độ bền. Nó có quy mô cực kỳ rõ ràng và minh bạch và nó (đại loại là) luôn tăng. Đây thực sự là những tính năng tuyệt vời, nhưng chúng không bù đắp được những mặt hạn chế.


11
Ưu / nhược điểm rất cụ thể. Câu trả lời tuyệt vời
stevendesu

10
Một số trong số này đã lỗi thời. Ví dụ, 1 không còn đúng nữa.
mbroshi

2
Câu trả lời được ghi lại rất tốt. Tuy nhiên, một số lo ngại này có thể dành riêng cho các trường hợp sử dụng hiếm. Số 2 - "Tất nhiên là không thể tham gia" - Cấu trúc dữ liệu DynamoDB không được có bất kỳ quan hệ - dấu chấm nào. Bảng phải được khử chuẩn hóa hoàn toàn. Điều đó có nghĩa là một số thuộc tính bị trùng lặp. Đối với những trường hợp như vậy, hãy sử dụng trình kích hoạt động hoặc ghi có điều kiện. Nếu người dùng không thể đối phó với độ trễ khi ghi có điều kiện, hãy đặt một hàng đợi SQS giữa ứng dụng và động. Hơn nữa, điểm số 6 bị đặt tên sai đến mức nó phôi một nghi ngờ về "nguyên vẹn" DynamoDB - đó có thể không phải là ý định ...
chủ tiệm

1
Dynamo vẫn thiếu tính linh hoạt trong khi truy vấn. Mặc dù GSI là một trợ giúp rất lớn nhưng chúng ta vẫn có thể lập mô hình dữ liệu của mình tốt hơn với lược đồ RDBMS.
Pavan

1
Tôi muốn nói thêm rằng các khả năng truy vấn trong DynamoDB có một vài "lỗi". Ví dụ: nếu khóa chính của bạn chỉ bao gồm một hàm băm, một truy vấn Dynamo chỉ có thể trả về 1 mục nhập, bạn không thể cung cấp phạm vi cho khóa chỉ băm tại thời điểm truy vấn, cũng như không thể truy vấn mà không biết hàm băm cụ thể của mục bạn đang tìm kiếm. BatchGet chỉ chấp nhận 100 được yêu cầu, tổng kích thước phản hồi 1MB hoặc tổng kích thước truy vấn 1MB, tùy điều kiện nào đến trước. Quét cho phép bạn tìm kiếm linh hoạt, nhưng kém hiệu quả và tốn kém, trả về toàn bộ bảng trước khi lọc.
Brooks

12

Khi sử dụng DynamoDB, bạn cũng nên biết rằng các mục / bản ghi trong DynamoDB được giới hạn ở 400KB (Xem Giới hạn DynamoDB ). Đối với nhiều trường hợp sử dụng, điều này sẽ không hoạt động. Vì vậy, DynamoDB sẽ tốt cho một số thứ nhưng không phải tất cả. Tương tự với nhiều cơ sở dữ liệu NoSQL khác.

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.