In dgraph v1.1.0 predicate keyword is removed. I am just curious to know the exact reason behind this. The reason mentioned in the blog: due to long-standing performance and transactional concerns around _predicate_
is not much clear. Can you please elaborate more?
Sure, I can expand on this.
Basically, you can consider _predicate_
to be a predicate of type [string]
that was internally maintained by Dgraph. Every time a node was updated, so was this predicate. Usually, when an update is made, it has to go through our consensus protocol (RAFT) to make sure our consistency guarantees are met. However, since this predicate is updated for every node that is touched by a mutation, guaranteeing the consistency of _predicate_
is very costly. So the decision was made to make an exception for this predicate.
The other performance concern is that we need to store this predicate for every node in the graph so a lot of storage is spent for this purpose. Ultimately, the lack of consistency and the storage costs caused us to drop support for this when we introduced an alternative way to do expand queries (the type system introduced in version 1.1).
Hope this helps.