2016-05-22 10 views
-2

私はNEO4Jを初めて使用しています。私はそれをテストするために始めたと私は、MySQLとのNeo4jの両方でテーブルを作成し、これらのプロパティ(フィールド)を持つ:私のテストでは、NE4JはMySQLと比べて非常に遅いようです。どうすれば速くすることができますか?

id random_number time_stamp 

そして私は、大量のデータを生成するプログラムを書いたとのNeo4jには約150万行(およびノー​​ドの挿入します)。私は書き込み速度がほぼ同じであったと言うことができます。

したがって、両方のデータベースで選択クエリをテストしました。 (私たちは30の以上の行がある。このランダムIDから知っている) "私は255454のrandom_idを持つ行(ノード)のいずれかを取得したい"

のNeo4j:

match (t:testLabel {random_id: 255454}) RETURN t LIMIT 50; 

のMySQL:

SELECT * 
FROM test 
WHERE random_id=255454 LIMIT 50 

のNeo4jは〜47秒を要したとMySQLは、結果を返すために約〜25秒を要しました。ディスク上の

のNeo4jサイズは

〜5.2ギガバイト

なり、両方のデータベースは、テーブルやプロパティにインデックスを持っていなかったディスク上〜35ギガバイトとMySQLの大きさになりました。

ハードウェア:CPU: Corei7-4770 | RAM: 12GB | SSDハードディスク


これは、簡単なテスト、私は両方のデータベースは非常にシンプルであり、基本的な構造を持っていたと私は思っテストの前に、のNeo4jは、MySQLよりも高速であることを意味します。 NEO4Jが本当に好きなので、解決策を見つけてもう一度使いたいと思っています。

私の単純なテストによると、NEO4Jは、大きくスケーラブルなプロジェクトでは合理的ではありません。私はそれを驚くほど速くするいくつかの方法があるかもしれないことを知りたいかもしれません! パフォーマンステストはとてもシンプルで、データモデリングに関係なく、すべてのデータベースで同様にテストする必要がありました。

ディスクのサイズはどうですか?

+あなたが見たいと思うかもしれないJörgBaachのもう一つの比較questionが見つかりました。

+0

何人かのエイリアンが、MySQL開発者が考えなかったすばらしいコードを書いていると思いましたか? Neo4Jが好きなら、それを使ってください。それがあなたにとって有用であることを証明するために、MySQLより速くする必要はありません。 –

+0

@ N.B。私はNEO4Jが本当に好きです。しかし、私はまた、私の問題のためのパフォーマンスが必要です! – M98

+0

本当にですか?あなたはそれを使用している人の中で有用なシステムだと思うほど多くの人の中で、神秘的なソフトウェアを持っている貴重な人のひとりです。古いものと優れたプログラムが、愚かな合成テスト? :) –

答えて

0
  1. あなたはtestLabelとプロパティrandom_idにインデックスを作成しましたか。
  2. トランザクションログはデフォルトで7日間保持されているので、かなり高いディスク使用量が見られます。これを調整する設定オプションがあります。一般的な通知に

:ちょうど単一ノードを検索すると、グラフデシベルのための合理的なパフォーマンステストではありません。違いを見るには、いくつかの接続の後でおそらくいくつかのクエリを実行する必要があります。

+1

彼はMySQLとNOE4Jの両方がテーブルとプロパティ(フィールド)にインデックスを持たず、両方が同じ速度を持つ必要がある、あるいはNEO4Jが高速でなければならないと言いました。 そして索引はこれより重いNOE4Jを作る! –

+1

私は@ NasserGhiasiに同意します。私がNEO4Jが好きな前に言ったように、それは使いやすいです。しかし、単一のノードでもそれを使用する必要があります。つまり、あるユーザーを選択して、彼の情報などを見たいということです。トランザクションログについては、一時的なもので、大きなサイズではなく、限られたサイズで保存していました。 NEO4Jデータベースのサイズは〜35 GBで、MySQLよりも6.7倍多くなりました。 +私はMySQLのファンではなく、なぜNEO4Jがとても重く、なぜ同じ状況で高速でないのか理解できません! – M98

+1

Neo4JはSQLよりもはるかに複雑な関係データモデリングを行います。インデックスを使用しないツールの不公平な比較です。本質的に、比較するツールの機能を利用していません。 – EoinS

1

リレーショナルデータベースとグラフデータベースの比較は大きな課題です。

私ははるかに有用なテストは、いくつかの結合とfkを持つ複数のテーブルにわたるクエリのパフォーマンスをチェックすることだと思います。これをneo4jと比較すれば、mysqlよりもはるかに優れたパフォーマンスが得られるはずです。

これを行うには、テストモデルを使用して4-5個のユースケースを設定します。 dbaがやろうとしていること、ユーザーがやっていることなど、いくつのことをするのかを決定します。

単純なタスクと複雑なタスクを選択します。 MySQLのパフォーマンスをNeo4Jと比較してください。 1つのDBが別の状況で他のDBより優れていることがわかります。

あなたの優先度を測るようにしてください。 50個のノードを特定のプロパティと照合することで優れたパフォーマンスが得られることはどれだけ重要ですか。ユーザー(数十万人のユーザー)は、複雑な関係のネットワークを広範囲に広げるための迅速かつ安全な方法を持つことがどれほど重要ですか?重要なことを判断したら、パフォーマンステストを参照して、ニーズに適したデータベースを判断します。

基本的なクエリを実行する場合は、おそらくSQLのようなリレーショナルデータベースモデルを使用する必要があります。 Neo4jは、パフォーマンスの観点だけでなく読みやすさの観点から、複雑なスキーマやクエリに最適です。

Neo4jは非常に異なる方法でデータを格納しているため、ディスクの記憶容量の違いがあります。

Cypherは、ユースケースの中核となるグラフパターンを中心に配置され、クエリ構文の一部として視覚的に表します。

This articleは本当に洞察力があり、リレーショナルデータベースからグラフデータベースへの移行を示しています。

+0

私はあなたが正しいと思いますが、単一のノードを選択する必要があり、時間がかかることがありますか?たとえば、私のソーシャルネットワークのデータベースにコメントがあり、そのIDに基づいて1つを選択したい、または投稿であり、1つを選択したいと考えているとします。今まで理解していたように、ありがたくNEO4Jはリレーショナルデータベースより高速ですが、単一のノードについて質問しています – M98

+0

条件、インデックス、リレーションシップなどで最適化する必要がある単一の条件に基づいてデータを選択する必要がある場合単一の任意のプロパティに基づいて大きなヒープがNeo4Jでしばらく時間がかかるようになると、SQLは高速になります。この特定のケースでは、SQLが優れています。 – EoinS

+0

日産GTRとフォーミュラ1車の比較を考えてみましょう。 GTRはすばらしいマシンですが、F1マシンはF1マシンが日産を吹き飛ばそうとしています。あなたのテストケースでは、パラレルパークする能力を比較しています。 GTRはここでボックスをチェックしますが、両方のマシンの機能、パワー、テクノロジーを十分に活用しているわけではありません。ペダルを金属に少し入れてみることをお勧めします。 – EoinS

関連する問題