Kể từ khi Google App Engine Datastore được dựa trên Bigtable và chúng ta biết rằng không phải là một cơ sở dữ liệu quan hệ, làm thế nào để bạn thiết kế một cơ sở dữ liệu schema/mô hình dữ liệu cho các ứng dụng sử dụng loại hệ thống cơ sở dữ liệu?Làm thế nào để bạn thiết kế mô hình dữ liệu cho Bigtable/Datastore (GAE)?
Trả lời
Thiết kế một sơ đồ bigtable là một quá trình mở, và về cơ bản đòi hỏi bạn phải suy nghĩ về:
- Các mô hình truy cập bạn sẽ được sử dụng và mức độ thường xuyên mỗi sẽ được sử dụng
- Các mối quan hệ giữa các loại bạn (tải để lây lan một cách hiệu quả)
- gì chỉ số bạn sẽ cần
- Các mẫu ghi bạn sẽ sử dụng
Kho dữ liệu của GAE tự động hủy chuẩn hóa dữ liệu của bạn. Tức là, mỗi chỉ mục chứa một bản sao dữ liệu (chủ yếu) hoàn chỉnh, và do đó mọi chỉ mục đều tăng đáng kể thời gian thực hiện để ghi và không gian lưu trữ được sử dụng. Nếu không, trường hợp thiết kế một lược đồ Datastore sẽ có nhiều công việc hơn: Bạn sẽ phải suy nghĩ cẩn thận về khóa chính cho mỗi loại, và xem xét tác động của quyết định của bạn đối với địa phương của dữ liệu. Ví dụ: khi hiển thị bài đăng trên blog, bạn có thể cần phải hiển thị các nhận xét để đi cùng với bài đăng đó, vì vậy, mỗi khóa của nhận xét có thể sẽ bắt đầu bằng khóa của bài đăng được liên kết.
Với kho dữ liệu, đây không phải là vấn đề lớn: Truy vấn bạn sử dụng sẽ trông giống như "Chọn * TỪ nhận xét WHERE post_id = N." (Nếu bạn muốn trang các bình luận, bạn cũng sẽ có một mệnh đề giới hạn, và hậu tố có thể có của "AND comment_id> last_comment_id".) Một khi bạn thêm một truy vấn như vậy, Datastore sẽ xây dựng chỉ mục cho bạn, và các lần đọc của bạn sẽ kỳ diệu nhanh. Điều cần lưu ý là mỗi chỉ mục bổ sung tạo thêm một số chi phí: tốt nhất là bạn có thể sử dụng ít mẫu truy cập nhất có thể, vì nó sẽ giảm số lượng chỉ mục mà GAE sẽ xây dựng và do đó tổng dung lượng lưu trữ theo yêu cầu của dữ liệu của bạn.
Đọc qua câu trả lời này, tôi thấy nó hơi mơ hồ. Có lẽ một câu hỏi thiết kế thực hành sẽ giúp điều chỉnh phạm vi này? :-)
Kho dữ liệu GAE không "tự động chuẩn hóa dữ liệu của bạn". Nó tự động _indexes_ hầu hết các cột, nhưng đó là hoàn toàn khác nhau. –
Kho dữ liệu cũng không tự động tạo các chỉ mục cho bạn - máy chủ ứng dụng của dev thực hiện. Nếu bạn không thực hiện một truy vấn cụ thể trong dev appserver, thì nó sẽ không thêm mục thích hợp vào indexes.yaml và truy vấn sẽ thất bại khi được triển khai. –
Tôi đã đọc ở đâu đó rằng mỗi chỉ mục chứa một bản sao của các trường _all_ sẽ được trả lại; tuy nhiên, các tài liệu hiện chỉ ra rằng chỉ những cột có ảnh hưởng đến chỉ mục được lưu trữ bên trong nó. AFAICT không có nơi nào nêu rõ nếu chỉ mục đọc là quét đơn giản hoặc quét tìm kiếm. Bạn đã thấy gì về điều đó chưa? – 0124816
Khi GAE xây dựng cách dữ liệu được quản lý ở Django, có rất nhiều thông tin về cách giải quyết các câu hỏi tương tự trong tài liệu Django (ví dụ: xem here, cuộn xuống 'Mô hình đầu tiên của bạn').
Tóm lại, bạn thiết kế mô hình db của bạn làm mô hình đối tượng thông thường và để GAE phân loại tất cả ánh xạ đối tượng-quan hệ.
lời khuyên rất xấu ... Django chỉ hoạt động trên cơ sở dữ liệu quan hệ. Nếu bạn muốn xem một số thực hành có một djano-nonrel mà có thể cung cấp nguồn cảm hứng ... –
Bạn có thể sử dụng www.web2py.com. Bạn xây dựng mô hình và ứng dụng một lần và nó hoạt động trên GAE mà còn hoạt động với SQLite, MySQL, Posgres, Oracle, MSSQL, FireBird
Điều đó chỉ đúng về mặt kỹ thuật. Một cơ sở dữ liệu quan hệ dựa trên lược đồ thường xuyên có thể hoạt động trên GAE khi bạn loại bỏ các OR và JOIN. Nhưng nó rất xa được thiết kế để phù hợp với GAE và do đó là khôn ngoan khác ... –
- 1. Mô hình hóa dữ liệu phân cấp - GAE
- 2. Thực hành tốt nhất WCF nào bạn làm theo trong thiết kế mô hình đối tượng?
- 3. GAE dữ liệu tải cho thấy datastore_errors.BadRequestError
- 4. Thiết kế đối tượng mô hình Java
- 5. Thiết kế mô hình '' cho QTableView trong PySide + SQLAlchemy.
- 6. Làm thế nào để trình bày một thiết kế cơ sở dữ liệu?
- 7. Thực tiễn tốt nhất trong việc thiết kế mô hình dữ liệu Cassandra là gì?
- 8. Django: Làm thế nào để mô hình hóa một loại dữ liệu không đồng nhất?
- 9. Làm thế nào để thiết lập dữ liệu ban đầu cho mô hình quản trị Django thêm mẫu thể hiện?
- 10. Mẫu thiết kế dữ liệu/cơ sở dữ liệu?
- 11. Sơ đồ cơ sở dữ liệu của Wufoo - Bạn sẽ thiết kế nó như thế nào?
- 12. Bạn sẽ thiết kế kho dữ liệu AppEngine cho một trang xã hội như Twitter như thế nào?
- 13. Làm thế nào để bạn làm việc với nhiều mô hình trong Ember JS (không có Dữ liệu Ember)?
- 14. Thừa kế trong thiết kế cơ sở dữ liệu
- 15. Bạn sẽ mô hình Vị trí trong Dữ liệu chính như thế nào?
- 16. Trong Magento, làm thế nào để Chặn dữ liệu từ mô hình?
- 17. Mẫu thiết kế để lưu trữ dữ liệu memcached
- 18. Có bất kỳ hướng dẫn thiết kế nào cho Cơ sở dữ liệu tài liệu không?
- 19. Mẫu thiết kế cho Lớp Truy cập Dữ liệu
- 20. Làm thế nào để bạn biết khi nào nên sử dụng các mẫu thiết kế?
- 21. Bạn sẽ thiết kế hệ thống tin nhắn như thế nào twitter, cách thiết kế hệ thống nhắn tin?
- 22. Làm cách nào để thiết kế cơ sở dữ liệu với Lịch sử sửa đổi?
- 23. Công cụ Mô hình Dữ liệu cho DB2
- 24. Làm thế nào để bạn sửa lỗi "khối" dữ liệu khi chụp ảnh màn hình trên thiết bị iOS?
- 25. Cách tốt nhất để thiết kế cơ sở dữ liệu cho Ruby on Rails là gì?
- 26. Bạn sẽ triển khai một hệ thống điều khiển sửa đổi cho các mô hình của bạn trong mô hình db ưa thích của bạn như thế nào?
- 27. Làm thế nào để phân lớp hoặc thừa kế một mô hình từ mô hình khác sử dụng ember dữ liệu
- 28. Cách thiết kế lược đồ cho mô hình tác giả/người dùng trong mongodb
- 29. Dữ liệu thời gian thiết kế cho ControlTemplate
- 30. làm thế nào để xác định hoặc recoginize một mô hình trong dữ liệu với SQL
Xem [câu hỏi này] (http://stackoverflow.com/questions/103727/how- cơ sở dữ liệu thay vì-trong-dữ liệu-lưu trữ-thay-cho-cơ sở dữ liệu), yêu cầu nhiều hơn hoặc ít hơn cùng một điều. –