This also interests me. Here are some ideas/topics that are related:
1) Security - who can read,write, and so on. User groups?
2) Users - is there a way to have nodes and edges owned by a user?
Algorithm 1 could be initiated by user 1, algo 2 by user 2 -- would
this solve your problem?
3) Enforce date stamps on every node/edge then just pick the most
recent... perhaps even cache the last n versions.
4) Defer all decisions to the underlying graph db.
5) Implement the idea of a 'multi-graph'. I will define a multigraph
as a set of graphs that can share nodes/edges. UserX,UserY, and UserZ
may have interest in different graphs than User1,User2, and User3.
Sorry I am not really answering your question directly, I just feel
that production use has many issues that you don't really see in a
proof of concept.
-Daniel
Graph DBs based on event logging are quite impressive. IIRC, Freebase
[1] uses such a DB and is able to recreate the momentary state of its
graph at any point in time using an exhaustive history of user
actions. These logs also happen to be very useful for social network
analysis. It certainly would be interesting to explore something like
this in Blueprints.
What we do have, at the present time, is the ability to export
individual graphs to version-controlled files, and to roll back to
previous versions of the graph by importing. Graph diffs and merges
are also possible (though some of the relevant code is currently in a
Blueprints branch [2]), so in James's example, you might be able to
remove the "inferred" elements while keeping any subsequent
manually-added elements... possibly even more straightforward than it
would be using event logs.
On Sun, Sep 4, 2011 at 7:07 PM, Daniel Quest <daniel...@gmail.com> wrote:
[...]
> This also interests me. Here are some ideas/topics that are related:
> 1) Security - who can read,write, and so on. User groups?
Yep. I would also like to see user authentication, at the Rexster
level. User identity could then be used for access control to
specific graphs, and in extension-specific ways.
> 2) Users - is there a way to have nodes and edges owned by a user?
That sounds like a whole lot of extra metadata. Graph-level metadata
makes more sense to me.
> Algorithm 1 could be initiated by user 1, algo 2 by user 2 -- would
> this solve your problem?
> 3) Enforce date stamps on every node/edge then just pick the most
> recent... perhaps even cache the last n versions.
That would be a nice (and quick) way to provide time-constrained views
of the graph structure. Of course, it wouldn't work for property
values.
> 4) Defer all decisions to the underlying graph db.
> 5) Implement the idea of a 'multi-graph'. I will define a multigraph
> as a set of graphs that can share nodes/edges. UserX,UserY, and UserZ
> may have interest in different graphs than User1,User2, and User3.
Yes. This goes back to the idea of graph views or derived/virtual
graphs. Again, I would tend to think in terms of graph-level metadata
and filters. For example, in a project of mine [4], I give each
vertex a "weight" and a "sharability" property value, which range from
0 to 1. If you're not interested in vertices below a given weight, or
you're not authorized to see vertices below a given sharability value,
then the excluded vertices are simply invisible to your application.
It would probably be worthwhile to start incorporating this sort of
logic into a Graph implementation (FilterGraph?). One other
possibility for a "multigraph" is a Graph impl which wraps multiple
subordinate graphs, providing unified iterators over their vertices
and edges and also joining elements using some sort of identity
criterion (e.g. having the same value for a specific property, like
"uri").
Josh
[1] http://www.freebase.com/
[2] https://github.com/tinkerpop/blueprints/tree/graphml-ids
[3] http://groups.google.com/group/gremlin-users/browse_thread/thread/1b8342d09f8502d4/68abefe30c07356d
[4] https://github.com/joshsh/myotherbrain
Sure, that's another solution.
> This would allow you to test different versions of your algorithms on a
> subset of users and switch over to new versions as your algorithms improve.
> For this to work, you would need two sequence sources -- one for the manual
> elements and one for the algorithmically-enhanced elements.
What this suggests to me is a write-to-all API which wraps multiple
graphs, while individual graphs can still be read from or written to
individually. Do you agree?
Josh
> - James
>
Making EventGraph available in rexster might help do the job of triggers. There's an issue out there for that.
What this suggests to me is a write-to-all API which wraps multiple
graphs, while individual graphs can still be read from or written to
individually. Do you agree?
Think of a database with tables and indexes and joins. In their
place, I see atomic graphs and aggregate graphs and walks (between
graphs).
Russell Jurney
twitter.com/rjurney
russell...@gmail.com
datasyndrome.com
Making EventGraph available in rexster might help do the job of triggers. There's an issue out there for that.