I concluded my thoughts briefly, and I agree that the details are lacking.
Let me write a little more detail.


 - The Vertex attribute allows individual filtering but is inconvenient
I enter the code to encourage this props is not natural, I think.
Serialize / Deserialize will cost more.
The following example is an individual filtering of the ServiceName and
ColumnName I think.
Ex) g.V (). Has ( "serviceName", "gogo")

=> I think that Vertex Property uses java.util.Map, and the string
"serviceName" and "columName" should always be serialized together. Of
course, you can also use "_s" or "_c". And I worry that it will be used as
a reserved Property Key with only s2graph.


- If you put a serviceColumn in the id, it will be cumbersome to compare
The id value itself or to the operation like "summary".


=> My English skills were not very good, so I guess it was not accurate.
What I was concerned about was that when I set up several vertex ids, I was
worried that gremlin would list them with the following expression:
Ex) g.V(new S2VertexId (1,"gogo", "userid"), new S2VertexId (2,"gogo",
"userid") )

Also, I was wondering if the following operation would work in the summary
part. The idea is that the S2VertexId object needs to return the actual id.
Ex) g.V().id().sum()             #tp3
      g.V().id().id().sum()      # s2graph (with S2VertexId)



Thanks for reading





2016-11-24 22:57 GMT+09:00 DO YUNG YOON <sho...@gmail.com>:

> Hi 김홍기 and Welcome to the S2Graph.
>
> It seems that you already know internal model that S2Graph is using but let
> me explain it for others who are not familiar with it to discuss issue 3 in
> more detail.
>
> Instead of convert user provided Id into internal unique numeric Id,
> S2Graph simply composite service and column metadata with user provided Id
> to guarantee global unique Id.
> Here are some important notation.
>
> 1. Service - the top level abstraction
>   - A convenient logical grouping of related entities
>   - Similar to the database abstraction that most relational databases
> support.
>
> 2. Column - belongs to a service.
>   - A set of homogeneous vertices such as users, news articles or tags.
>   - Every vertex has a user-provided unique ID that allows the efficient
> lookup.
>   - A service typically contains multiple columns.
>
> 3. Label - schema for edge
>   - A set of homogeneous edges such as friendships, views, or clicks.
>   - Relation between two columns as well as a recursive association within
> one column.
>   - The two columns connected with a label may not necessarily be in the
> same service, allowing us to store and query data that spans over multiple
> services.
>
>
> From your suggestion, here is what I thought.
>
> 1. Put the ServiceName and columnName in the vertex property
> ex) graph.addVertex(T.Id, 1, "serviceName". "gogo", columnName , "user")
>
> 2. Replace tp3 id with S2graph VertexId (ServiceName, columnName, id)
> ex) graph.addVertex(T.Id, new S2VertexId(1, "gogo", "user"))
>
> 3. Use Vertex Label
> ex) graph.addVertex(T.label, "gogo::user", T.id, 1 )
>
> First of all, I think if we ignore Service and Column on vertex, then there
> is no way to guarantee the global uniqueness of id 1. If my service has
> user id 1 and your service has user id 1, then there is no way to
> distinguish
> same 1 without Service and Column, so I think ignoring them is not an
> option for us.
>
> I am +1 on Use Vertex Label to map S2Graph's Service, Column notation into
> tp3 in general and forcing user to provide vertex label on vertex.
>
> Concatenate serviceName and columnName with "::" does not looks like best
> for me, but it should be fine, since client users will never need to
> separate serviceName and columnName from given string. existing users of
> Tinkerpop should be familiar with vertex label notation so I think it is
> best option.
>
> Also I think being more explicit also make sense, so option 2 seems ok for
> me too. users can be notified by thrown exception if they not provide
> S2VertexId type for T.id value, but this is not as familiar as vertexLabel.
>
> By the way, I don't quite understand the reasons you mentioned below, so
> can you please elaborate them one more time?
>
> - Using the vertex property allows individual filtering but is inconvenient
> to input, and the code that forces this props is unnatural and I think it
> will cost more in Serialize / Deserialize
> - If you put a serviceColumn in the id, it will be cumbersome to compare
> the id value itself or to perform the operation like "summary".
>
> Thanks for your suggestion and participation in this community.
>
> Folks, Any more thought?
>
> On Thu, Nov 24, 2016 at 8:05 PM 김홍기 <reinhardh...@gmail.com> wrote:
>
> > hi,
> >
> > I think about issue 3, as below.
> >
> > ServiceColumn does not exist in tp3 but exists only in s2graph.
> > There are several ways to apply to tp3.
> >
> > - Put the ServiceName and columnName in the vertex property
> > ex) graph.addVertex(T.Id, 1, "serviceName". "gogo", columnName , "user")
> >
> > - Replace tp3 id with S2graph VertexId (ServiceName, columnName, id)
> > ex) graph.addVertex(T.Id, new S2VertexId(1, "gogo", "user"))
> >
> > - Use Vertex Label
> > ex) graph.addVertex(T.label, "gogo::user", T.id, 1 )
> >
> > - Ignore ServiceColumn on Vertex because edge label contains a
> > ServiceColumn relationship
> > ex) greaph.addVertex(T.id, 1)
> >
> >
> > I think VertexLabel is a good choice for some reason.
> >
> > - Using the vertex property allows individual filtering but is
> inconvenient
> > to input, and the code that forces this props is unnatural and I think it
> > will cost more in Serialize / Deserialize
> > - If you put a serviceColumn in the id, it will be cumbersome to compare
> > the id value itself or to perform the operation like "summary".
> > - Ignoring the service column makes it easier to access different types
> of
> > edges, but there is a problem of data integrity
> >
> >
> >
> >
> > ----------------------------------------------------------------------
> >
> >
> >
> > From: DO YUNG YOON <sho...@gmail.com>
> > To: s2graph-dev <dev@s2graph.incubator.apache.org>
> > Cc:
> > Date: Thu, 24 Nov 2016 03:44:36 +0000
> > Subject: [DISCUSS] Support Apache TinkerPop and Gremlin
> > Hi folks.
> >
> > After discussion at ApacheCon BigData Europe(sevile), I was wondering if
> it
> > is possible to change S2Graph's core library to implement tp3's interface
> > directly rather than providing layer atop of existing codebase.
> >
> > I have updated corresponding issue
> > <https://issues.apache.org/jira/browse/S2GRAPH-72> and create 2 sub
> tasks(
> > S2GRAPH-129 <https://issues.apache.org/jira/browse/S2GRAPH-129> ,
> > S2GRAPH-130 <https://issues.apache.org/jira/browse/S2GRAPH-130> ) to try
> > out this idea.
> >
> > @committers, Please review PR99
> > <https://github.com/apache/incubator-s2graph/pull/99>, PR100
> > <https://github.com/apache/incubator-s2graph/pull/100> so we can proceed
> > to
> > implement all interfaces of tp3 actually. I intentionally left actual
> > implementation omitted because it can be changed after this discussion.
> >
> > Apart from that, Here are few things I want to discuss regarding support
> > Apache TinkerPop and Gremlin.
> >
> > 1. Data type of property value. Currently S2Graph only support types
> > available on JSON. is this ok? are we going to support any other type? If
> > then, What need to be done to support other data type on property's
> value.
> >
> > 2. No notion of VertexProperty. Property is same on Vertex and Edge in
> > S2Graph so we have to decide what's our S2VertexProperty would be. Are we
> > going to support this or just say we can't provide it(for now or what).
> >
> > 3. Vertex Id: S2Graph use ServiceColumn + UserProvidedId as internal
> vertex
> > Id. We need to decide how we are going to map ServiceColumn into tp3's
> > Verte. Are we going to serialize/deserialize ServiceColumn into tp3's
> > Vertex label or not? Not just about ServiceColumn but want to discuss
> > further about what S2Graph are going to provide through tp3's interface
> and
> > how.
> >
> > Please feel free to comment on not only above but also anything regarding
> > to tp3 support in general.
> >
> > Thanks.
> >
>

Reply via email to