OrientDB慢写

时间:2012-08-30 21:02:50

标签: java orientdb

OrientDB官方网站称:

  

在常见的硬件存储上,每秒最多150,000个文档,10   每天数十亿份文件。大图加载很少   没有执行昂贵的JOIN(例如Relational)的毫秒数   的DBMS。

但是,执行以下代码表明,插入150000个简单文档需要大约17000ms。

import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.core.record.impl.ODocument;

public final class OrientDBTrial {

    public static void main(String[] args) {
        ODatabaseDocumentTx db = new ODatabaseDocumentTx("remote:localhost/foo");
        try {
            db.open("admin", "admin");

            long a = System.currentTimeMillis();
            for (int i = 1; i < 150000; ++i) {
                final ODocument foo = new ODocument("Foo");
                foo.field("code", i);
                foo.save();
            }
            long b = System.currentTimeMillis();
            System.out.println(b - a + "ms");

            for (ODocument doc : db.browseClass("Foo")) {
                doc.delete();
            }
        } finally {
            db.close();
        }
    }

}

我的硬件:

  • Dell Optiplex 780
  • Intel(R)Core(TM)2 Duo CPU E7500 @ 2.93Ghz
  • 8GB RAM
  • Windows 7 64位

我做错了什么?

在10个并发线程中拆分存储以最大限度地减少Java的开销,使其在~13000ms内运行。比OrientDB首页所说的要慢得多。

3 个答案:

答案 0 :(得分:4)

您可以通过使用'Flat Database'和orientdb作为java中的嵌入式库来实现 在这里看到更多解释 http://code.google.com/p/orient/wiki/JavaAPI

您使用的是服务器模式,它向orientdb服务器发送许多请求, 根据你的基准测试,你每秒可以获得~10 000次插入,这也不错, 例如,我认为10 000个请求/秒对于任何网络服务器都是非常好的性能 (而orientdb服务器实际上是一个web服务器,您可以通过http查询它,但我认为java正在使用二进制模式)

答案 1 :(得分:3)

首先阅读文档,了解如何获得最佳性能!

几点提示:

- &gt; 不要始终实例化ODocument:

  final ODocument doc;
  for (...) {
    doc.reset();
    doc.setClassName("Class");
    // Put data to fields
    doc.save();
  }

- &gt; 不要依赖System.currentTimeMillis() - 使用perf4j或类似工具来衡量时间,因为第一个测量全局系统时间因此包括所有的执行时间在你的系统上运行的其他程序!

答案 2 :(得分:3)

来自OrientDB站点的数字是针对本地数据库的基准测试(没有网络开销),因此如果您使用远程协议,则需要一些延迟。

正如Krisztian指出的那样,如果可能的话,重复使用对象。