F.A.Q
What is different to Titan?
[Disclaim] we only played titan v0.4.2, and all of comparison is based on what we have experienced, so maybe titan expert think different opinion on what we have described here.
This questions is asked most of the time, so we make seperate page for this in details.
What consistency S2Graph provide?
Since version >= 0.8, S2Graph provide eventual consistency between all indices per label.
Eventual means that at some point(while there is partial failure, and retry logic is running), it is possible to have multiple indices have different view on same edge. once retry logic succeed or failed, then S2Graph will fix inconsistency between indices.
before 0.8, partial failure on mutations for all indices yield inconsistent view on edge. this means it was possible that some delete/update request are not property stored on certain index.
after 0.8, S2Graph use own retry logic that make sure all indices are consistent.
if there is any partial failure on mutations for indices, S2Graph retry these mutations. instead of using application level lock, S2Graph use SnapshotEdge as master version(lock), then release this lock only after all necessary mutations success. note that get/release lock also can be failed, and retry on this cases too.
if all retry have failed, then S2Graph publish this request on "failed queue" in kafka and provide worker that polling this "failed queue" then retry again.
Note that these retry logic all based on S2Graph idempotency, so retrying same requets over and over don`t break state.
test cases for contention: (https://github.com/kakao/s2graph/blob/master/test/controllers/StrongLabelDeleteSpec.scala#L153)
check out Consistency for more details.
Will S2Graph implement TinkerPop?
Definitely.
now I am working on changing S2Graph to implement TinkerPop.
But not quite there yet.
I think refactor code base and decouple components has higher priority because I want to collaborate with others who is export on TinkerPop.
Even though I have experiences on TinkerPop2, current code is not easy to play with, so I am spending most of my time on refactoring.
Happy to see others to contribute.
I believe not only S2Graph can be integrated with TinkerPop, but also it will provide Async Graph Interface too(S2Graph interface is all asynchronous).