6

Tôi sắp bắt đầu thiết kế một ứng dụng web và trong khi tôi có nhiều kinh nghiệm làm việc đó trong thế giới SQL, tôi không biết mình cần cân nhắc điều gì với mục tiêu di chuyển sang GAE trong tương lai rất gần.Thiết kế để dễ dàng di chuyển sang Google App Engine

Ngoài ra, tôi có thể thiết kế ứng dụng cho GAE ngay từ đầu và trong trường hợp đó, các khác biệt mà tôi cần phải cân nhắc là gì? Nói cách khác, DO và DONTs viết ứng dụng của bạn cho GAE là gì, đến từ một cơ sở dữ liệu quan hệ trong quá khứ.

+0

Có nhu cầu thực sự về GAE không? Bạn đã cân nhắc sử dụng các khung công tác python khác (giá treo? Tg2?) Hiệu suất GAE khôn ngoan không phải là tuyệt vời như @Tomasz đã đề cập. – Dave

Trả lời

7

Chỉ cần ra khỏi đỉnh đầu của tôi:

  • Nó thực sự chỉ là một Key-> cửa hàng giá trị, đừng để bị lừa bởi những thứ như GQL (mà chỉ là một tập hợp con của SQL SELECT)
  • KHÔNG THAM GIA - thường bạn phải làm mất bình thường hoặc quên
  • Thời gian chờ nhiều hơn hoặc ít thường xuyên hơn
  • (Rất) truy cập chậm so với cơ sở SQL cục bộ.
  • COUNT địa chỉ rất tốn kém
  • OFFSET (trong SELECT) thực hiện về phía khách hàng - vì vậy trong thực tế, bạn lấy tất cả hồ sơ lên ​​để bù đắp - như chỉ bởi Nick Johnson tại một trong những ý kiến, nó không phải là khách hàng bên, vì vậy bây giờ , như LIMIT của 1000 đã biến mất, nó tương tự như cơ sở dữ liệu SQL.
  • (Gần đây loại bỏ) LIMIT 1000 hàng lấy
  • hiệu suất SELECT giảm mạnh với số lượng ngày càng tăng của hàng trả lại
  • Migrations là khó có thể làm vì bạn phải làm cho họ sử dụng các yêu cầu http bình thường và mỗi yêu cầu được chết sau 30 giây. Bạn phải sử dụng hàng đợi công việc xử lý các hàng theo lô
  • Có các khóa giả ngoài được gọi là ReferenceProperties trong Python API - nhưng chúng không được thực thi theo bất kỳ cách nào - nếu ai đó/xóa đối tượng đích thì bạn có những gì được biết đung đưa con trỏ trong C++
  • Fields mà bạn sử dụng cho các truy vấn đã được lập chỉ mục, nhưng vẫn còn sử dụng chính (loại khóa chính cho mỗi hàng/chẳng hạn) làm cho truy vấn của bạn chạy
  • chỉ số xây dựng nhanh hơn trên dụ sống có thể mất rất nhiều thời gian (và bạn không thể giảm nó) và không có chúng, ứng dụng của bạn thường không thể hoạt động. Bia và sự kiên nhẫn rất được khuyến khích ..
  • Rất nhiều giới hạn nhân tạo (như giới hạn tối đa đã loại bỏ là 1000). Ví dụ. Toán tử GQL 'IN' chỉ là cú pháp đường cho nhiều OR-s và có giới hạn trên là 30 giá trị được sử dụng.

Tất cả những gì có nghĩa là bạn có lẽ không thể tránh phơi bày tình trạng không phù hợp với người dùng, và gần như chắc chắn bạn không thể tránh được việc nhà nước không nhất quán của dữ liệu của bạn (ví dụ như hàng nửa di cư và một nửa không, trong tay THAM GIA thay đổi dữ liệu vv)

+0

Tóm tắt rất tốt về những cạm bẫy mà * sẽ * gặp phải. –

+1

Kho lưu trữ App Engine không phải là 'chỉ' một kho khóa - giá trị - nó thực hiện lập chỉ mục. Nó cũng không đúng là bù đắp được thực hiện phía máy khách - nó được xử lý bởi kho dữ liệu, nhưng kho dữ liệu phải đọc và bỏ qua số hàng chỉ mục thích hợp (cũng như mọi SQL DB khác). Việc thực hiện IN cũng không phải là 'giới hạn nhân tạo'. –

+0

Ok, do đó, nó là chìa khóa-> giá trị lưu trữ với lập chỉ mục (mà không có nó sẽ không sử dụng được).Re bù đắp - xấu của tôi, cho đến gần đây nó đã được vấn đề vì '1000 giới hạn', sửa chữa. Re IN - đối với tôi 30 trông giống như giới hạn nhân tạo (tất nhiên tôi nhận ra đó là vì một số sự cân bằng kỹ thuật). –

Các vấn đề liên quan