經過一些重構之後,我們在應用程序中使用的objectify查詢出現問題。奇怪的是,即使我們恢復到原來的代碼,問題仍然存在。Objectify查詢速度很慢(Google Datastore)
當應用程序啓動時,使用Objectify從數據存儲庫中提取大量250本書籍。緩存已啓用,似乎正在工作。 問題是需要大約50-60秒才能得到結果,因此有時會導致http請求被終止。我們以前從未遇到過這個問題,我們無法找到答案。 如果我在Google數據存儲控制檯中運行了一個查詢,例如「創建日期限制250」中的「從BookEntity訂單中選擇*」,並且它花費的時間不超過5到7秒。
重構之前,這本書實體看起來是這樣的:
@Index
@Entity
@Cache
public class BookEntity {
@Index
public String title_name;
@Index
public String author_name;
public String isbn;
public int number_of_pages;
public Ref<PdfEntity> book_pdf;
}
現在是這樣的:
@Index
@Entity
@Cache
public class BookEntity {
@Index
@AlsoLoad("title_name")
private String titleName;
@Index
@AlsoLoad("author_name")
private String authorName;
private String isbn;
@AlsoLoad("number_of_pages")
private int numberOfPages;
@AlsoLoad("book_pdf")
private Ref<PdfEntity> bookPdf;
// getters and setters for the fields because now they are private
}
這裏僅僅是一個例子,但在現實中,它有大約20個領域。 爲了將模式遷移到字段名稱,我在GAE中運行了一個加載的任務,然後再次保存所有的BookEntity實體。
本示例可以擴展到應用程序中使用的所有實體,但該書是性能最差的一本書。即使查詢中沒有任何內容發生變化,我們正在討論一個基本查詢,它將通過creationDate獲取最新的250本書籍,但需要一生才能獲得實際結果。任何想法如何我可以進一步調查這個問題?