11

OrientDB の公式サイトには次のように書かれています。

一般的なハードウェアでは、1 秒あたり最大 150.000 ドキュメント、1 日あたり 100 億のドキュメントが保存されます。Big Graph は、リレーショナル DBMS のようなコストのかかる JOIN を実行することなく、数ミリ秒でロードされます。

ただし、次のコードを実行すると、150000 個の単純なドキュメントを挿入するのに約 17000 ミリ秒かかっていることがわかります。

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();
        }
    }

}

私のハードウェア:

  • デル オプティプレックス 780
  • Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93Ghz
  • 8GBのRAM
  • Windows 7 64 ビット

私は何を間違っていますか?

Java のオーバーヘッドを最小限に抑えるために保存を 10 の同時スレッドに分割すると、実行時間は最大 13000 ミリ秒になりました。OrientDB のフロント ページに記載されている内容よりもはるかに遅いです。

4

3 に答える 3

4

「フラット データベース」と orientdb を Java の組み込みライブラリとして使用することで、これを実現できます。ここで詳細を説明します http://code.google.com/p/orient/wiki/JavaAPI

あなたが使用しているのはサーバーモードであり、orientdbサーバーに多くのリクエストを送信します.ベンチマークから判断すると、毎秒〜10 000の挿入が得られましたが、これは悪くありません.サーバーは実際にはWebサーバーであり、httpを介してクエリを実行できますが、Javaはバイナリモードを使用していると思います)

于 2012-09-04T00:45:33.683 に答える
3

OrientDB サイトの数値はローカル データベース (ネットワーク オーバーヘッドなし) でベンチマークされているため、リモート プロトコルを使用する場合は多少の遅延が予想されます。

Krisztian が指摘したように、可能であればオブジェクトを再利用してください。

于 2012-09-04T09:25:27.373 に答える
3

最高のパフォーマンスを達成する方法については、まずドキュメントをお読みください。

いくつかのヒント:

-> ODocument を常にインスタンス化しない:

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

->依存しないでくださいSystem.currentTimeMillis()- または同様のツールを使用perf4jして時間を測定します。最初のツールはグローバル システム時間を測定するため、システムで実行されている他のすべてのプログラムの実行時間が含まれます。

于 2012-09-04T08:05:06.603 に答える