我有一个程序可以创建rdf三元组的多个文本文件。我需要比较三元组并快速完成,最好的方法是什么?我想把三元组放到一个数组中并进行比较,但每个文件可能会有数十万个三元组,这需要永远。我需要它尽可能接近实时,因为三元组将在文件中不断变换。任何帮助都会很棒。这些文件也在AllegroGraph存储库中,如果以某种方式比较它们更容易。
一个想法:如果我将三元组存储在excel中(每行一个三元组)和每个存储库一页,
答:我怎么能在床单上找到重复的内容。 B:会不会很快。 和C:我怎么能从Java自动化呢?
答案 0 :(得分:2)
您需要构建一个主索引,该索引将存储每个三元组及其显示的文件数以及每个文件中三元组的确切文件名和位置。您可以搜索主索引以实时回答查询。
在更新,删除或创建新的rdf文件时,需要更新主索引。
您需要存储主索引,以便可以更新,有效搜索。
简单的选择可能是使用关系数据库(如MySql)来存储主索引。它可以回答您的问题,例如使用简单的选择语句select * from rdfindex where triplecount > 2.
编辑:您无法使用HashMap或类似的数据结构在内存中存储数十万个三元组。这就是为什么我建议使用数据库,它可以存储数据并有效地响应您的查询。您可以查看SQLite等嵌入式数据库来存储数据。
阅读这些主题
How to create SQLite database and create tables, access tables etc.,创建一个简单的表来存储三元组,三元组,文件名。
将所有Excel文件转换为CSV文件。您可以使用opencsv来解析Java中的文件(查看opencsv附带的示例)。
解析CSV文件并将数据加载到SQLite中。如果三元组已经在数据库中,那么只需更新计数,如果没有插入三元组。
答案 1 :(得分:0)
据我所知,有一个删除AllegroGraph中重复条目的功能,如果所有三元组都来自那里,这可能是一个选项。