【问题标题】:OrientDB query way too slowOrientDB 查询方式太慢
【发布时间】:2016-01-23 00:55:47
【问题描述】:

我可以通过网络界面很好地执行下面的这个查询。完成几乎不需要任何时间。

SELECT from Person;

但是当我尝试从我的 Java 应用程序中执行此操作时,需要 17 秒以上才能完成。

我使用的代码基本上是这两行:

OrientGraph graph = new OrientGraph("remote:93.x.x.x/test");
OCommandRequest req = graph.command(new OCommandSQL(query));
req.execute();

可能是 REST 请求慢得多吗? Web 界面使用 plocal(我猜),而我的 Java 应用程序使用远程连接。

【问题讨论】:

  • 第一次运行这个查询之后,下一次执行的时间会更短,还是响应时间总是差不多?因为在热身过程中,db 使用的响应时间稍长是正常的。
  • 它确实有点快,在第二次运行后它保持在 15 秒左右。这仍然比从 Web 界面执行查询要慢得多,因为 Web 界面的响应几乎是即时的。
  • 我来不及发表评论,但我也看到了这种行为。第一次读取操作需要 8 秒,而再次从 java 中点击相同的查询在不到 50 毫秒内完成。当输入改变时,行为会复制。使用版本 3.x 。你们能找出原因吗?

标签: orientdb tinkerpop-blueprint


【解决方案1】:

也尝试从控制台运行相同的查询。 在控制台中花费的时间应该差不多(只是比在 java 中慢一点)。 我做了一个插入 100,000 个顶点类人的测试。做各种查询响应时间是: Studio = 7.72 秒,控制台 = 2,043 秒,Java = 1:23 到 1:41 秒

如果收入来自一个非常不同的时间,则可能是 java 出了点问题。 您已经显示“OCommandSQL”,请检查“OSQLSynchQuery”是否有很大差异。

    String query = "";
    Iterable<Vertex> result;

    query = "select from Persona";

    //query with OSQLSynchQuery
    result = g.command(new OSQLSynchQuery<Vertex>(query)).execute();
    List<OrientVertex> listVertex = new ArrayList<OrientVertex>();
    CollectionUtils.addAll(listVertex, result.iterator());

    //query with OCommandSQL        
    OCommandRequest req = g.command(new OCommandSQL(query));
    req.execute();

【讨论】:

  • 我现在尝试从控制台查询,时间在 1 秒以下。我也尝试了 OSQLSynchQuery,但时间保持不变。我想这与java有关。我会在另一个系统上试试这个,看看是否有什么不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 2018-03-14
相关资源
最近更新 更多