Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以只加载一次大量数据并在每次请求时使用它吗?_Java_Php - Fatal编程技术网

Java 我可以只加载一次大量数据并在每次请求时使用它吗?

Java 我可以只加载一次大量数据并在每次请求时使用它吗?,java,php,Java,Php,有没有办法将大数据对象加载到内存中,而内存通常只能在每次请求时加载一次 在Java中,当加载servlet时,您可以在servlet中实例化对象,但一旦它存在,您就可以在任何请求中使用它。下面是一个例子。这可以用PHP实现吗 public class SampleServlet extends HttpServlet { private static HugeGraphObject hgo; public void init() { hgo = HugeGraphObjec

有没有办法将大数据对象加载到内存中,而内存通常只能在每次请求时加载一次

在Java中,当加载servlet时,您可以在servlet中实例化对象,但一旦它存在,您就可以在任何请求中使用它。下面是一个例子。这可以用PHP实现吗

public class SampleServlet extends HttpServlet {  
  private static HugeGraphObject hgo;

  public void init() {
    hgo = HugeGraphObjectFactory.get();
  }

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String param = request.getParameter("q");
    response.getWriter().write(hgo.getSomeThing(param));
  }
}

我相信PHP不是服务器端,所以浏览器每次都会读取和处理。。。(如果我没弄错的话);)

您可以将其缓存在APC中。像这样的,

$hgo = apc_fetch("hgo_v1");

if (!$hgo) {
   $hgo = HugeGraphObjectFactory();
   apc_store("hgo_v1", $hgo);
}

这样,每个服务器实例只需加载一次对象。

使用。

在PHP中,每次访问服务器都是唯一的。

您本质上是在谈论缓存。为了做到这一点,您需要使用PHP缓存解决方案之一——APC、XCache、memcached。有很多很棒的文章从基准测试的角度比较了这些解决方案。Memcached可以跨服务器使用,这就是它如此流行的原因


我个人使用了memcached和XCache。如果使用得当,存储对象和变量可以将开销减少一半以上。看看Zend_Cache(),它是一个跨平台(APC、XCache等)处理缓存的类。当使用Zend_Cache时,从APC切换到XCache,或基于文件切换到memcached,只需更改一个字符串即可。

正如其他人所说,分配给PHP的内存会被吹走,并针对每个请求重新初始化-因此,您希望在单个请求之外保留的任何数据都需要存储在此处。这也意味着将其加载回PHP变量以服务请求时会有很大的开销

如果您试图使用PHP编写Java程序,那么您不会走得很远。这并不是PHP的失败——如果您试图用Java编写C程序或用Forth编写Lisp程序,那么您也会遇到同样的问题。我认为,通过重构/将数据推送到相关存储介质并有效地查询,很有可能解决这个问题

有些非常不寻常的情况并非如此(不要认为这是对您的方法的认可)。在这里,解决问题的方法是开发一个守护进程,为客户端程序提供服务——但是如果使用OO编写,那么要小心内存管理(您可以考虑使用循环引用检查垃圾收集器)。
C.

请删除“java”标记,因为这是一个php问题。也很好!这里可以找到一个很好的例子: