2011-01-21 188 views
0

我想从dbpedia RDF三元组创建数据库。我有一张表Categories其中包含维基百科中的所有类别。要存储分类,我已创建了一个表,其中childparent字段,外键为Categories表。要加载从NTriples类别IAM使用下面的SQL查询Wikipedia Graph数据库插入

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

但插入是很慢..将250万间的关系将需要很长的时间..有更好的方法来优化查询,模式?

+0

你的问题对我来说并不合适。你说你正在使用SQL来查询NTriples,这没有多大意义。我假设你已经有了在SQL数据库中导入的数据。部分原因是为什么?将表放入RDF /三重存储并使用推理来推断关系可能会更好。 – RobV 2011-01-21 13:54:55

回答

1

我解决了这个问题。是一些索引问题。在类别中制作标识符唯一和二进制。我想这加快了两个选择。

1
  1. 考虑加载SELECT id, indentifier from Categories到在客户端上的散列表(或线索),并使用该填补CatToCat。在一个维基百科大小的数据库上,我期望看到恒定时间哈希查找和查找树(在不同数据项的数量上是不变的)之间的巨大性能差异,以及B树搜索。 (当然,你需要有可用的内存。)

  2. 考虑使用一个带有参数绑定的PreparedStatement,以便MySQL不必重新解析并重新优化每个插入的查询。

你必须对这些进行基准测试,找出它们实际上有多大的改进。