Hi Chris,
With Titan, you get the benefit of vertex-centric indices (as Matthias says). You can learn more about those benefits here:
For instance, Gremlin will automagically compile down to use vertex-centric queries. See:
gremlin> g.v(1).outE('knows').has('weight',1.0).toString()
==>[StartPipe, OutEdgesPipe(knows), PropertyFilterPipe(weight,EQUAL,1.0)]
gremlin> g.v(1).outE('knows').has('weight',1.0).inV.toString()
==>[StartPipe, QueryPipe(out,[knows],has:true,interval:false,limit:-1,edge), IdentityPipe, InVertexPipe]
If you provide no discriminating information (edge label, property values, etc.), then the best you will get is a linear scan through the incident edges -- O(n).
However, what you could do and this gets to your question, is you could use Faunus to run a Hadoop job to get the vertex degrees and then update the vertices in Titan as such. Thus, using Faunus/Gremlin:
g.V.sideEffect{it.degree = it.bothE.count()}
This way, you have the vertex degree as a property on the edges and can use that in your traversal (in Titan/Gremlin) to handle/avoid vertices you consider super nodes. Operationally, you can run this job every so often as your graph mutates to get the latest degree counts.
However, unfortunately, it will not be until Faunus 0.1 is released that writing back to the Titan graph will be possible. Right now Faunus is read-only.
HTH,
Marko.