小编Joh*_*ied的帖子

为什么 rdflib 这么慢?

我有一个很大的 rdf 文件:

  • 大小:470MB
  • 行数:近600万行
  • 独特的三重科目:约650,000
  • 三倍金额:约4,200,000

我通过以下方式将 rdf 定义加载到 rdflib 的 berkeley db 后端:

graph = rdflib.Graph("Sleepycat")
graph.open("store", create=True)
graph.parse("authorities-geografikum_lds.rdf")
Run Code Online (Sandbox Code Playgroud)

在我的笔记本上花了很多小时才完成。计算机的功能并不强大(Intel B980 CPU、4GB RAM、无 SSD),而且定义也很大,但完成这项任务的时间似乎相当长。也许部分是由于索引/优化数据结构?

真正令人恼火的是完成以下查询所需的时间:

SELECT (COUNT(DISTINCT ?s) as ?c)
WHERE {
    ?s ?p ?o
}
Run Code Online (Sandbox Code Playgroud)

(结果:667,445)

花了20多分钟

SELECT (COUNT(?s) as ?c)
WHERE {
    ?s ?p ?o
}
Run Code Online (Sandbox Code Playgroud)

(结果:4,197,399)

花了超过25分钟。

根据我的经验,如果有适当的索引,充满可比数据的关系型 DBMS 将在一小部分时间内完成相应的查询。

所以我的问题是:

为什么 rdflib 这么慢(尤其是对于查询)?

我可以像使用 RDBMS 中的索引一样调整/优化数据库吗?

从性能角度来看,另一个(免费且“紧凑”)三重存储是否更适合这种大小的数据?

rdf sparql rdflib

8
推荐指数
1
解决办法
1899
查看次数

是否有支持多字节的 Postgresql Levenshtein?

当我使用fuzzystrmatch levenshtein函数与变音符号一起使用时,它返回错误/多字节无知的结果:

\n\n
select levenshtein(\'a\xcc\xa8\', \'x\');\nlevenshtein \n-------------\n       2\n
Run Code Online (Sandbox Code Playgroud)\n\n

(注意:第一个字符是一个“a”,下面有一个变音符号,我复制到这里后它没有正确呈现)

\n\n

fuzzystrmatch文档(https://www.postgresql.org/docs/9.1/fuzzystrmatch.html)警告:

\n\n
\n

目前,soundex、metaphone、dmetaphone 和 dmetaphone_alt 函数不能很好地处理多字节编码(例如 UTF-8)。

\n
\n\n

但由于它没有命名levenshtein函数,我想知道是否有 levenshtein的多字节感知版本的多字节感知版本。

\n\n

我知道我可以使用非重音函数作为解决方法,但我需要保留变音符号。

\n

postgresql utf-8 levenshtein-distance

5
推荐指数
1
解决办法
402
查看次数

标签 统计

levenshtein-distance ×1

postgresql ×1

rdf ×1

rdflib ×1

sparql ×1

utf-8 ×1