我有一个很大的 rdf 文件:
我通过以下方式将 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 中的索引一样调整/优化数据库吗?
从性能角度来看,另一个(免费且“紧凑”)三重存储是否更适合这种大小的数据?
当我使用fuzzystrmatch levenshtein函数与变音符号一起使用时,它返回错误/多字节无知的结果:
\n\nselect levenshtein(\'a\xcc\xa8\', \'x\');\nlevenshtein \n-------------\n 2\n
Run Code Online (Sandbox Code Playgroud)\n\n(注意:第一个字符是一个“a”,下面有一个变音符号,我复制到这里后它没有正确呈现)
\n\nfuzzystrmatch文档(https://www.postgresql.org/docs/9.1/fuzzystrmatch.html)警告:
\n\n\n\n\n目前,soundex、metaphone、dmetaphone 和 dmetaphone_alt 函数不能很好地处理多字节编码(例如 UTF-8)。
\n
但由于它没有命名levenshtein函数,我想知道是否有 levenshtein的多字节感知版本的多字节感知版本。
\n\n我知道我可以使用非重音函数作为解决方法,但我需要保留变音符号。
\n