2010-01-06 25 views
9

Tôi có một Mô hình có tài sản blob lớn User.image Có thuộc tính này trong mô hình của tôi khiến truy vấn của tôi mất quá nhiều thời gian và đi qua thời hạn nên tôi quyết định chuyển thuộc tính đó sang một mô hình khác - UserData - cha mẹ của ai là Người dùng.Xóa một sản phẩm khỏi Mẫu hiện tại

Tuy nhiên, các phiên bản mô hình hiện có đã có trong kho dữ liệu vẫn chứa dữ liệu hình ảnh đó mặc dù định nghĩa Mô hình không còn chứa thuộc tính đó nữa.

Có cách nào để xóa dữ liệu đó khỏi phiên bản Người dùng không?

Trả lời

12

Câu trả lời cho câu hỏi của bạn được ghi lại ở đây: https://developers.google.com/appengine/articles/update_schema

Sao chép/dán từ "Loại bỏ Deleted Properties từ Datastore" phần:

Nếu bạn loại bỏ một tài sản từ mô hình , bạn sẽ thấy rằng các đối tượng hiện tại vẫn có thuộc tính. Nó vẫn sẽ được hiển thị trong admin console và sẽ vẫn có mặt trong kho dữ liệu. Để thực sự làm sạch dữ liệu cũ của , bạn cần phải chuyển qua đối tượng của mình và xóa dữ liệu khỏi mỗi dữ liệu.

  1. Đảm bảo bạn đã xóa thuộc tính khỏi định nghĩa mô hình.
  2. Nếu lớp mô hình của bạn kế thừa từ db.Model, tạm thời chuyển đổi nó để kế thừa từ db.Expando. (db.Model trường hợp không thể sửa đổi động, đó là những gì chúng tôi cần để làm trong bước tiếp theo.)
  3. Chu kỳ thông qua các thực thể hiện tại (như mô tả ở trên). Đối với mỗi đối tượng , hãy sử dụng delattr để xóa thuộc tính lỗi thời và sau đó lưu thực thể .
  4. Nếu mô hình của bạn ban đầu được kế thừa từ db.Model, đừng quên để thay đổi lại sau khi cập nhật tất cả dữ liệu.
+0

Tương đương Java của 'delattr' là gì? – Price

+0

OK - đó là 'Entity.removeProperty' – Price

0

Tôi không có phương tiện để kiểm tra điều này ngay bây giờ, nhưng tôi sẽ thử đặt thuộc tính hình ảnh thành không hoặc Không (không chắc bạn đang sử dụng Java hay Python) trong khi chuyển sang sử dụng lớp UserData . Bạn chỉ có thể làm điều này nội tuyến trong mã của bạn như là một cách để phản đối tài sản, hoặc bạn có thể thiết lập một công việc cron mà tất cả điều này cùng một lúc. Tôi không chắc chắn nếu có một cách tốt hơn để hoàn toàn loại bỏ các tài sản hình ảnh từ các thực thể, nhưng điều này ít nhất sẽ giải quyết vấn đề của bạn về thời gian tải.

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