簡體   English   中英

一對多關系船上的學說表現

[英]Doctrine Performance On OneToMany RelationShip

我想知道OneToMany Realationship是否會妨礙應用程序的性能。 假設城市和用戶實體處於OneToMany關系中,這意味着一個城市可以包含很多用戶。 現在在實體類中設置關系之后,每當我檢索城市時,都可以通過以下方式獲取其用戶:

$users = $city->getUsers();

現在,我想知道內部架構。 每當我檢索城市時,它還會查詢所有用戶嗎? 如果是這樣,可以說一個城市可以有10000個用戶。 現在,僅檢索一個城市會不會是一個性能問題,但是它也能與所有10000個用戶相處? 或者,它使用其他機制,我完全可以實現它?

希望從您的專家那里得到解釋,並就有關這種情況的最佳實踐提出建議。 提前致謝。

好吧,我不是專家,但是我可以向您分享一些在應用程序開發時可以考慮的良好實踐:

fetch =“ EXTRA_LAZY”

默認情況下,教義2.0將加載整個集合並將其存儲在內存中。 在像您這樣的場景中,由於表維度不足,用戶集合可能會導致性能問題。 那么,為什么不將關系標記為EXTRA_LAZY? 具有這種獲取模式的實體僅在訪問時加載而不觸發集合的完整加載。

/**
 * @ManyToMany(targetEntity="User", mappedBy="cities", fetch="EXTRA_LAZY")
 */

允許這種訪存模式,您可以穩健地利用諸如slide()count()類的功能。 例如:

$users = $em->getRepository('models\User')->findAll();
echo  $users->count();

該代碼觸發了一條select count(*) from users..的sql語句,如select count(*) from users..而是循環遍歷$ user集合。

保濕物品

加載實體集合並非總是必要的。 如果您要創建博客系統,我們僅需要提供帖子標題列表。 可以通過水化對象(用於只讀)來改善此基礎結構。

有用的鏈接

一些鏈接將您帶到官方學說文檔指南。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM