2012-04-19 26 views
8

tôi đã xây dựng một ứng dụng và nó hiện đang có một bảng khá chuẩn do người dùng, như vậy:DynamoDB và User Login bảng

int id, email varchar, mật khẩu varchar

Nếu tôi là để chuyển đổi này để DynamoDB sau đó làm thế nào tôi sẽ tạo ra bảng này?

Nếu tôi sử dụng khóa băm có địa chỉ email, thì tôi không thể cung cấp khả năng cập nhật email của bạn và nếu tôi sử dụng băm để lưu trữ ID, thì tôi cần sử dụng tính năng quét đó là tốn kém và bị hạn chế bởi một giới hạn 1Mb.

Bạn có lời khuyên nào? Cảm ơn, Đánh dấu

+0

Điều này có vẻ trùng lặp với http://stackoverflow.com/q/12920884/268898 –

Trả lời

5

Bạn có nói rằng sẽ tốn kém khi sử dụng ID làm băm vì bạn cần lọc theo trường email?

Nếu bạn cần lọc truy vấn của mình theo cột không phải khóa, bạn thường kết thúc tạo một chỉ số chỉ số cho nó.

DynamoDB không tích hợp sẵn chỉ số secundary, nhưng khá đơn giản để triển khai giải pháp của riêng bạn.

Bảng chính có thể sử dụng ID như băm, như bạn chỉ, và một bảng differente sẽ đóng vai trò là chỉ số, nó có thể là:

varchar email, int id 

email phím băm cho bảng secundary. Nếu được phép có nhiều người dùng với cùng một email, bạn có thể sử dụng ID làm phạm vi, để làm cho mọi việc trở nên dễ dàng hơn, nếu không, một cột đơn giản sẽ phù hợp.

+1

Đúng là bạn có thể tạo chỉ mục phụ của riêng mình theo cách này, nhưng hãy nhớ rằng ** mã của bạn chịu trách nhiệm giữ nó đồng bộ với bảng chính **. Ngoài ra, các hoạt động để cập nhật bảng và bảng chỉ mục sẽ không phải là nguyên tử. Điều đó có thể hoặc có thể không phải là một vấn đề tùy thuộc vào cách thức đồng thời các mẫu truy cập của bạn. – bkirkbri

+4

DynamoDB hiện có Chỉ mục phụ toàn cầu có thể được sử dụng cho điều này (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html) –

+0

@JeffWalkerCodeRanger Tôi không thấy cách các GSI có thể giúp giải quyết vấn đề này . Bạn có thể giải thích? – rob

1

Có bảng khác để lập chỉ mục sẽ dẫn đến việc bảo trì cao. Tôi bắt gặp một mô hình dự phòng từ CTO cũ của tôi.

Đối với bảng của bạn: USER

RDBMS:

id, mật khẩu email

1, senthil3569 @ stack.com, hỏi

DynamoDB:

K EY, id, email, mật khẩu

1, 1, [email protected], hỏi

senthil3569 @ stack.com, 1, [email protected], hỏi

Thay vào đó lưu trữ một bản ghi, bạn đang lưu trữ dư thừa để tìm nạp bằng cách sử dụng các cột không được lập chỉ mục.

Hy vọng giải pháp là rõ ràng.

+2

Làm thế nào để giải pháp này đòi hỏi bảo dưỡng ít hơn so với một với bảng phụ? Bạn lại có 2 bản ghi và chúng không thể được cập nhật trong một giao dịch, ngay cả khi chúng ở trong cùng một bảng. – ivant