【问题标题】:Doctrine ODM Document ReuseDoctrine ODM 文档重用
【发布时间】:2014-03-20 06:35:44
【问题描述】:

场景:在我的 PHP slim 应用程序中,我有一个用于验证的类,如果通过了,我就使用“控制器”来执行 RESTful 样式更新。

我的问题是:如果我执行一个查询,然后在代码的不相关部分执行一个返回部分/所有相同文档的查询。原则文档管理器是否重复使用以前检索到的文档?

提前致谢! 本

【问题讨论】:

  • 您的应用程序是否在整个应用程序中使用相同的 DocumentManager 实例?我的印象是,一旦对象被检索到,DM 就会将它们保存在内存中。但是,如果应用程序的两个部分之间没有共享任何内容,则没有多大用处。
  • 是的,它是同一个文档管理器,这让我认为这些文档可能会在当前执行中持续存在..?
  • 您必须检查,但如果 DM 在应用程序的两个部分之间共享,并且不相关的代码在与第一个查询相同的请求中运行,那么 DM 应该已经在内存中拥有这些文档.但是,我不知道如果第二个查询包含尚未在内存中的文档会发生什么,即,Doctrine 是只是获取它丢失的文档还是只是再次获取所有内容?

标签: php performance doctrine-orm odm


【解决方案1】:

Doctrine 可以扩展为使用 Redis 等对象缓存来减少对数据库的命中。

我们还在数据访问层添加了代码以减少查询 - 这是 Doctrine 的上游。

【讨论】:

  • 更多关于学说缓存的细节在这里:docs.doctrine-project.org/en/2.0.x/reference/caching.html
  • 我实际上已经在 Doctrine 级别使用 APC...虽然我不确定是存储 key=>value 对还是编译 PHP。
  • APC 提供了一个 PHP 字节码缓存,它也提供了一个基于内存的键/值缓存。这是一种平衡行为 - 如果您使用多个服务器/拥有大量数据,我们更喜欢使用专门的对象缓存,如 redis 或 memcache。
猜你喜欢
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多