1.一种RDF数据存储方法,其特征在于由以下步骤组成:(1)设计面向实体的RDF数据的存储结构
(1.1)采用面向实体的方式,将数据存到关系型数据库n行的k列中,其中k为RDF数据中所有主语的谓词数量的平均值,n为所有主语需要的行数line的和,当单个主语的谓词数量sum≤k时,则所需行数line=1;当sum>k时,则进行多行存储,则所需行数line=(sum/k)+
1;
(1.2)确定k值以后,根据谓词映射算法,将谓词转为列下标,得到一个n行k列的表结构;
(2)设计用于RDF数据的存储映射
采用hash算法将RDF数据的URI和字面量分别转化为64位二进制数据,URI取hash算法的高64位,字面量取hash算法的低64位,将转换的二进制数据存储到hash索引表中并对hash索引表中的行进行升序排列,以便查找时通过二分查找算法快速进行映射与转化;
(3)RDF数据存储
将RDF数据按照步骤(2)的方法进行映射与转换之后,第一次存储到步骤(1)的表结构中,对存储到表结构中数据进行分析,创建分析表S,记录每个Subject和Object包含的三元组个数以及出现频率最高的20个URI和频率最高的20个字面量对应的频率,再按照步骤(1)的表结构,将Object作为存储实体,对存储到表结构中的数据经过步骤(2)的映射与转换之后再进行第二次存储,即完成RDF的数据存储。
2.根据权利要求1所述的面向RDF的数据存储方法,其特征在于:所述步骤(1.2)谓词转化为列下标的方法为:(1.2.1)用谓词映射算法计算列下标,谓词映射算法的公式为:式中h1,h2…hj对应为j个hash函数,i为列下标;
(1.2.2)当j个hash函数计算完成仍然没有找到空闲的下标时,则开辟新的一行,将该数据存到h1计算的下标中去。
3.一种与权利要求1所述的RDF数据存储方法匹配的RDF数据查询方法,其特征在于由以下步骤组成:(a.1)变量的提取与转化
将SPARQL查询语句中的三元组基本图模式进行分解,并确定查询语句中的变量个数为count,对查询语句中的URI和字面量分别参照存储方法中的步骤(2)中的映射方式将其转化为64位二进制数据,对所包含的变量进行-1到-count的赋值;
(a.2)基本查询图模式的转化
根据步骤(a.1)中的三元组基本图模式分解结果,将每个基本图模式转化为三元组查询节点结构,其中三元组查询节点结构为:三元组查询节点结构
{
节点的Id;
subject的Id;
predicate的Id;
object的Id;
存储方式的标识;
}
存储方式的标识选择RDF数据存储方法中步骤(3)的第一次存储或第二次存储;
对URI和字面量,subject、predicate、object的Id分别为64位二进制数据;对变量,subject、predicate、object的Id对应为所赋的值;
(a.3)查询连接操作的表示
根据步骤(a.1)中基本图模式中所分解的三元组相互进行比较,对存在相同变量的三元组,以步骤(a.2)结构中的节点Id为唯一标识符建立连接关系,并将连接关系转化为连接操作边结构,其中连接操作边结构为:连接操作边结构
{
起始三元组的节点的Id,
终止三元组的节点的Id,
共同变量的Id
};
(a.4)计算每个查询的查询代价
根据步骤(a.2)中得到的三元组查询节点结构,对步骤(a.3)中得到的连接操作边结构按照代价算法分别进行代价分析,得到连接操作边结构的代价值为c,代价算法的公式为:TMC(t,m,S)→c
其中:t为需要查询的三元组;m为RDF数据存储方法的步骤(3)中第一次存储或第二次存储;S为分析表;
(a.5)查询计划的生成
将步骤(a.4)中获得的所有连接操作边结构的代价值c进行由小到大排序,得到按代价值排序的节点序列,选取序列中c值最小的节点为开始节点,依次选取序列中的下一个节点,若节点中的变量未查询,则进行连接查询,直至所有节点中的变量都完成查询,即实现语句的查询。
4.根据权利要求3的RDF数据查询方法,其特征在于所述步骤(a.5)之后还包括步骤(a.6)建立缓存机制,具体为:对用户输入的查询语句根据步骤(a.2)中得到的三元组查询节点结构的集合进行hash操作,得到hash函数的结果值,若缓存列表中存在该值,则直接取出缓存结果反馈给用户;
否则,则重复步骤(a.3)到(a.5),将所得结果存入硬盘中、对应地址标识和hash函数的结果值存入缓存列表中。