最近关注一下分布式语义网数据库,然后读了一些paper, 感觉网上对应的消息和讨论还挺少,于是决定每天抽空把个人的理解和疑惑或者相关看法记录一下,其中主要关注系统的设计思想,数据的分区和并行处理。
今天主要看的是SHARD [1], SHARD应用了MapReduce框架,然后用Hadoop来执行使用。其中Hadoop通过HDFS (Hadoop Distributed File System),各节点上程序执行安排,节点错误处理和机器之间通信来完成对存储数据进行管理。在执行架构中,有一个关键点叫做NameNode,它是一个特殊的中心计算点,通过HDFS来指定数据给节点,并且也指定计算任务给节点。
SHARD的设计目标很简单:能够用RDF格式对数据进行分布式存储,然后能对SPARQL query进行处理。在设定输入数据和输出结果都非常大并且不能直接输出给用户的情况下,数据存储设计方案是直接利用HDFS将数据放在各个节点上本地存储上。其中数据以flat files的形式放置,并且每一行以hash三元组数据中主语的形式放置。比如文中的例子就是:(Pub1 :author Prof0 :name "Pub1" a 😛ublication) 其代表的三元组原型是,(Pub1 :author Prof0) (Pub1 :name "Pub1") (Pub1 a 😛ublication) 文中指出在应用领域这样处理数据的优点主要:有在HDFS处理的过程中,通过数据复制和MapReduce的操作能够提高多节点的自动鲁棒性;数据易于阅读,便于诊断query结果;对于大型数据的scan非常有效。对于Query的过程的处理,SHARD主要应用了一个迭代的算法(论文中的Fig.4), 个人感觉还是应用一个嵌套循环的方式,对于BGP中各个triple pattern进行单步处理,其中每步都进行一个map和reduce的过程,找到相应的结果,然后带入到下一个triple pattern。2个过程的思想还是挺简单的,最后的实验结果表明塔确实比Jena和Sesame的单机query速度要快。但个人感觉这个思想或者Framework只能算的上是用MapReduce的方式基本实现了分布式语义网数据库的功能,但至于其分布式性能 估计还不能和其他存在的相比。毕竟至少在数据存储方面有2个缺陷:a) 直接存储文本;b) 只Hash了主语。a 将非常的浪费存储空间, 特别是超大型数据或者有很多重复元素的情况下。b 在query过程中,对于某型星型BGP估计性能还可以,但是对于复杂一点的图形query,性能估计好不到哪里去。
最后评价是:仅仅只是用一种新框架 基本实现功能,还有很多需要优化的地方。
[1] Rohloff, K., & Schantz, R. E. (2010). High-Performance , Massively Scalable Distributed Systems using the MapReduce Software Framework: The SHARD Triple-Store. Programming Support Innovations for Emerging Distributed Applications (p. 4). ACM. doi:10.1145/1940747.1940751