Whether Predicate Group Splitting has been implemented in Graph or not?


(jtlz) #1

In https://docs.dgraph.io/design-concepts/, there is a section called “Group”. In this section, a group is defined to the many posting lists that share the same predicate. It also shows the split of one group into two groups, when a predicate having too many post lists:

Original Group: (Predicate, Sa…z)

After split:
Group 1: (Predicate, Sa…i)
Group 2: (Predicate, Sj…z)

My understanding is that a group is stored in one tablet and one Raft Group can host many tablets. But when I looked at the Tablet protobuf definition in https://github.com/dgraph-io/dgraph/blob/master/protos/pb.proto#L171, I cannot find the “split” or “range” related attribute being defined in order to support the above design concept.

message Tablet {
uint32 group_id = 1; // Served by which group.
string predicate = 2;
bool force = 3; // Used while moving predicate.
int64 space = 7;
bool remove = 8;
}

The “space” defined in Tablet is about disk space occupied by the tablet.

In our graph application, we will have very limited number of the predicates, when we express the data model in GraphQL. So I wonder whether the above “group split” has been implemented in Dgraph or not. And if so, could you point me to the source code?


(Manish R Jain) #2

A single predicate is not being split among groups. Each predicate is wholly owned by one group.