2011-01-21 6 views
0

dbpedia RDFトリプルからデータベースを作成しようとしています。ウィキペディアのすべてのカテゴリを含むテーブルCategoriesがあります。私はchildparentフィールド、両方の外部キーCategoriesテーブルのテーブルを作成したカテゴリを格納するために。 、スキーマのクエリを最適化するためのより良い方法は... NTriplesからカテゴリをロードするには、次のSQLクエリWikipediaグラフデータベースの挿入

INSERT INTO CatToCat (`child`, `parent`) 
values((SELECT id FROM Categories WHERE BINARY identifier='Bar'), 
     (SELECT id FROM Categories WHERE BINARY identifier='Bar')); 

を使用してIAMしかし、挿入が2.5Million関係を挿入することは非常に長い時間がかかるだろう...非常に遅いがあります?

+0

あなたの質問は本当に私には意味がありません。あまり意味のないNTriplesをクエリするのにSQLを使用しているとします。私はあなたがすでにSQLデータベースにインポートされたデータを持っていると仮定します。それはなぜ部分的に質問をするのですか?テーブルをRDF /トリプルストアに入れて、推論を使用して関係を推測するほうがずっと良いでしょう。 – RobV

+0

NTriplesからSQLデータベースにデータをロードしようとしています。私のアプリケーションは、すべてのRDFデータを必要としません。たとえば述語です。私はウィキペディアからこれを直接抽出することができましたが、dbpedia ntダンプからロードする方が速いと思いました。カテゴリ階層が必要です。私はSPARQLなどを使う必要がないので、トリプルストアが過度なものになるかもしれないと思いました。 – z33m

+0

CatToCatテーブルで作成したインデックスのタイプは何ですか? –

答えて

1

私はこの問題を解決しました。索引付けの問題がありました。ユニークおよびバイナリのカテゴリの識別子を作成しました。私は2つの選択肢をスピードアップしたと思います。

2

あなたが上にRDF層と、のNeo4jのようなグラフデータベースを試みることができる、Tinkerpop SAILの実装では、インスタンスのためにそこにある、少なくとものNeo4jのために、RDBMSよりも少し良く動作するはずそれhttps://github.com/tinkerpop/blueprints/wiki/Sail-Implementation

を参照してください。

/ピーター

1
  1. は、クライアント側でハッシュテーブル(またはトライ)にSELECT id, indentifier from Categoriesをロードし、CatToCatを埋めるためにそれを使用することを検討してください。 wikipediaのサイズのデータ​​ベースでは、一定の時間ハッシュ検索とトライ検索(異なるデータ項目の数に関して一定です)と、B-Tree検索の間に大きなパフォーマンス差があることが予想されます。 (もちろん、メモリを用意する必要があります)

  2. パラメータバインディングを使用して単一のPreparedStatementを使用することを検討してください。これにより、MySQLはすべての挿入に対してクエリを再解析して最適化する必要がなくなります。

これらのベンチマークは、実際にどれだけ改善されているか把握する必要があります。