Tôi đang tạo một ứng dụng iOS dành cho thiết bị di động. Người dùng có thể tạo tài khoản và tải lên các chuỗi. Nó sẽ giống như twitter, bạn có thể theo dõi mọi người, có hình ảnh hồ sơ, vv Tôi không thể ước tính cơ sở người dùng, nhưng nếu ứng dụng cất cánh, tổng số liệu có thể khá lớn.SimpleDB Chọn VS DynamoDB Quét
Tôi đang lưu trữ các đối tượng thực tế trên Amazon S3 và các khóa trên DataBase, liệt kê các khóa Amazon S3 là chậm. Vì vậy, sẽ tốt hơn cho việc lưu trữ khóa?
Đây là kiến thức của tôi về SimpleDB và DynamoDB:
SimpleDB:
- giá rẻ
- Thực hiện tốt
- Được thiết kế cho bộ dữ liệu trung bình/nhỏ
- có thể truy vấn sử dụng chọn biểu
DynamoDB:
- đắt
- Vô cùng khả năng mở rộng
- Thực hiện vĩ đại; millisecond phản ứng
- Không thể truy vấn
Những điểm này là chính xác để hiểu biết của tôi, DynamoDB là thêm về kẻ giết người. tốc độ và khả năng mở rộng, SimpleDB là nhiều hơn về truy vấn và giá cả (vẫn cung cấp hiệu suất tốt). Nhưng nếu bạn nhìn vào nó theo cách này, sẽ nhanh hơn, tải xuống tất cả các phím từ DynamoDB, hoặc thực hiện một truy vấn chọn với SimpleDB ... phải không? Một người đang sử dụng cơ sở dữ liệu cực nhanh để tải xuống lô (và sau đó chúng tôi phải đối sánh chúng) và người kia đang sử dụng cơ sở dữ liệu hiệu suất hợp lý để truy vấn và tải xuống một số đối tượng chính xác. Vì vậy, đó là nhanh hơn:
DynamoDB tải tất cả mọi thứ và khớp HOẶC SimpleDB truy vấn và tải rằng
(Chú ý: Kết hợp chỉ có nghĩa là sử dụng -rangeOfString
và so sánh chuỗi, tiêu thụ không có gì sức mạnh hoặc không thời gian hiệu quả hoặc bất cứ điều gì phía máy chủ)
My S3 sẽ sử dụng định dạng này cho tất cả các loại đối tượng
accountUsername: typeOfObject: randomGeneratedKey
Ví dụ:Nếu bạn đang tham chiếu đến một đối tượng tài khoản
Rohan: Tài khoản: shd83SHD93028rF
Hoặc một hình ảnh hồ sơ cá nhân:
Rohan: ProfilePic: Nck83S348DD93028rF37849SNDh
Tôi có khóa được tạo ngẫu nhiên cho tính duy nhất, nó không đề cập đến bất cứ điều gì, nó chỉ đơn giản là ở đó để các khóa không lặp lại trong đó chồng chéo hai đối tượng.
Trong ứng dụng của tôi, tôi có thể chọn SimpleDB hoặc DynamoDB, vì vậy đây là hai lựa chọn:
Sử dụng SimpleDB, cửa hàng phím với các định dạng nhưng không sử dụng định dạng cho bất kỳ tài liệu tham khảo, thay vì sử dụng các thuộc tính được lưu trữ với SimpleDB. Vì vậy, tôi lưu trữ khóa với các thuộc tính như tên người dùng, loại và có thể những người khác tôi cũng sẽ phải bao gồm trong định dạng khóa. Vì vậy, nếu tôi muốn lấy đối tượng tài khoản từ người dùng 'Rohan'. Tôi chỉ sử dụng SimpleDB Chọn để truy vấn thuộc tính 'username' và thuộc tính 'type'. (nơi tôi đối sánh cho 'tài khoản')
DynamoDB, các khóa lưu trữ và mỗi khóa sẽ có định dạng được minh họa. Tôi quét toàn bộ cơ sở dữ liệu trả về mọi khóa duy nhất. Sau đó lấy khóa và tận dụng lợi thế của định dạng khóa, tôi có thể sử dụng
-rangeOfString
để khớp với cái tôi muốn và sau đó tải xuống từ S3.
Ngoài ra, SimpleDB rõ ràng là phân phối theo địa lý, làm cách nào tôi có thể bật tính năng này?
Vì vậy, nhanh hơn và đáng tin cậy hơn là gì? Sử dụng SimpleDB để truy vấn các khóa bằng các thuộc tính. Hoặc sử dụng DynamoDB để lưu trữ tất cả các khóa, quét (tải xuống tất cả các khóa) và so khớp bằng cách sử dụng ví dụ: -rangeOfString
? Tâm trí thực tế rằng đây chỉ là các phím ngắn được trỏ đến các đối tượng S3.
Đây là câu hỏi của tôi trước, và số lượng các đối tượng trong cơ sở dữ liệu sẽ khác nhau về câu trả lời quyết định, nên I:
- Tạo một chìa khóa riêng biệt/đối tượng cho mọi đối tượng duy nhất một người dùng có
- Tạo khóa/đối tượng tài khoản và lưu trữ tất cả thông tin bên trong đó
Sẽ có những ưu điểm và nhược điểm khác nhau giữa hai tùy chọn này. Ví dụ, nó sẽ nhanh hơn để lấy ra nếu nó là tất cả riêng biệt, nhưng nó cũng được tổ chức hơn và ít lớn hơn của một tập dữ liệu để lưu trữ nó trong một tài khoản người dùng.
Vì vậy, bạn nghĩ sao?
Cảm ơn sự giúp đỡ! Tôi đã đặt một tiền thưởng về điều này, thực sự cần một câu trả lời càng sớm càng tốt.
Chỉ cần một vài ghi chú cho rõ ràng vì lợi ích: 1. DynamoDB không có một hoạt động truy vấn, nó chỉ đòi hỏi sử dụng một RangeKey. 2. Thao tác quét cho phép bạn tìm dữ liệu trên toàn bộ bảng, nhưng không yêu cầu bạn tải xuống toàn bộ bảng. 3. SimpleDB có bản sao dư thừa trong cùng một vùng miền của bạn được tạo ra, nó không hoạt động như một CDN cho cơ sở dữ liệu của bạn. –
@BobKinney ý của bạn là gì, bạn có thể tìm thấy dữ liệu trong toàn bộ bảng nhưng không cần tải xuống? – MCKapur
Tôi có nghĩa là chính xác những gì tôi đã nói. Thao tác quét sẽ quét tất cả dữ liệu trên bảng DynamoDB và chỉ trả lại các mục trong bảng khớp với thông số quét của bạn và chỉ những mục này sẽ cần được tải xuống ứng dụng của bạn. Các hoạt động quét có thể bị ràng buộc để bạn chỉ tìm kiếm kết quả phù hợp N đầu tiên, nhưng nó sẽ sử dụng nhiều thông lượng đọc khi cần thiết để tìm ra các kết quả N đó. –