【问题标题】:Caching a graph with guava用番石榴缓存图表
【发布时间】:2014-07-04 08:35:51
【问题描述】:

我正在研究一种路由算法,我必须首先计算一个图。在我的程序的当前版本中,获得一条路线基本上需要 8 秒以上,因为我为每个路线请求创建了图表。 这就是为什么我正在寻找一种可以加快寻找路线过程的方法。在做了一些研究之后,我了解到我可以计算一次图形,然后将其加载到内存中并从那里访问它。听起来很酷很简单,但是当我尝试将其付诸实践时,我就卡住了。

我选择了 google 的 guava 作为缓存方法,我确实听说它很简单,但是对于我的生活,我不明白如何才能使整个图形工作,我在这方面的知识非常有限。我可以为一个字符串执行此操作,但不知道如何为 Graph 对象执行此操作。

我在文档中找到了类似这样定义的内容,但实际上我没有办法进行设置。

    LoadingCache<String, Graph> graphs = CacheBuilder.newBuilder()
           .maximumSize(1000000)
           .build(
               new CacheLoader<String, Graph>() {
                 public Graph load(String key) {
                   return createExpensiveGraph(key);
                 }
               });


   private static Graph createExpensiveGraph(String key){
          LineStringGraphGenerator graphGen = new  LineStringGraphGenerator();
          for (ListIterator l = lines.listIterator(); l.hasNext(); ){
            LineString line_graph = (LineString) l.next();
            graphGen.add(line_graph);
          } 
          networkGraph = graphGen.getGraph();

          return networkGraph;
   }

【问题讨论】:

  • 那么缺少什么?创建图表的代码?
  • 不,我有密码,但就这些了吗?
  • 哪部分不起作用?
  • 嗯,我不明白如何从缓存中获取图形以进一步处理它?我还在主帖中添加了图形创建功能。
  • 在你的情况下:graphs.get(key).

标签: caching guava


【解决方案1】:

您的问题可以通过谷歌解决,发布如下: thisthis other 是 Guava Cache 的介绍。

基本例子是:

public class YourCacheClass {

    private final LoadingCache<String, Graph> graphs;
    private static final int MAX_SIZE = 1000000;

    YourCacheClass() {
        super();
        this.graphs = CacheBuilder.newBuilder()
            .maximumSize(MAX_SIZE)
            .build(
                    new CacheLoader<String, Graph>() {
                        public Graph load(String key) {
                            return createExpensiveGraph(key);
                        }
                    });
    }

    /** Method to get graph */
    public Graph getGraph(String key) throws ExecutionException {
        return this.graphs.get(key);
    }

    private Graph createExpensiveGraph(String key) {
        //your code to load Graph
        return graph;
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多