天天看点

粗粒度(Coarse-grained)vs细粒度(fine-grained)

在读的一篇文献中关于RDF的描述:

As we know, RDF data is a set of triples with the form (subject, property, object). This fine-grained model leads to SPARQL queries on RDF data with a large number of joins.

这是一种新颖的提法,看了很多文章,这是第一次有人将RDF看作fine-grained(细粒度)模型,而且这种细粒度特性使得针对RDF数据的SPARQL查询包含大量的join操作。

我对粗细粒度的理解非常有限,在书本上貌似碰到过的。网上搜集了关于这一概念的理解,现在列出,以后还有待自己加深理解之后的补充。

“粒度似乎是根据项目模块划分的细致程度区分的,一个项目模块(或子模块)分得越多,每个模块(或子模块)越小,负责的工作越细,就说粒度越细,否则为粗粒度”--- 我觉得这中理解是最到位的,也是最浅显易懂的。

“粗粒度和细粒度的区别主要是出于重用的目的,像类的设计,为尽可能重用,所以采用细粒度的设计模式,将一个复杂的类(粗粒度)拆分成高度重用的职责清晰的类(细粒度).对于数据库的设计,原责:尽量减少表的数量与表与表之间的连接,能够设计成一个表的情况就不需要细分,所以可考虑使用粗粒度的设计方式。”---首先,关于重用,越复杂粒度越粗重用性应该是越差的,因而我觉得这种说法是正确的;其次,提到了数据库设计,粗细粒度的取舍也是一个关键,可见开篇关于RDF细粒度导致join操作过多是从这方面考虑的。

再列出其他人的观点:

“两个接口

细粒度的查询任务的接口

interface TaskService{

  public List getTaskById(int id);

  public List getTaskByName(String name);

  public List getTaskByAge(int age);

}

那么粗粒度的接口该是什么样的呢?

interface TaskService{

  public List getTask(Person person);

}

person有name,id,age,根据什么查都是这个接口。

关于这个概念,每个人有每个人的理解方式,重要的是精髓要把握住!