小编Mat*_*ton的帖子

如何在TinkerPop图中增加顶点属性值

如何遍历图形并增加顶点属性的值?通过某个固定数量或通过其边缘属性的数量.

例如.如下图:

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> a = g.addV('name','a','amount', 100).next()
==>v[0]
gremlin> b = g.addV('name','b','amount', 200).next()
==>v[3]
gremlin> c = g.addV('name','c','amount', 300).next()
==>v[6]
gremlin> a.addEdge('fill', b, 'bonus', 20)
==>e[9][0-drain->3]
gremlin> b.addEdge('fill', c, 'bonus', 40)
==>e[10][3-drain->6]
gremlin> 
Run Code Online (Sandbox Code Playgroud)

所以

1)我如何增加每个顶点10

最后我想要:

gremlin> g.V().valueMap()
==>[amount:[110],name:[a]]
==>[amount:[210.0],name:[b]]
==>[amount:[310.00],name:[c]]
Run Code Online (Sandbox Code Playgroud)

鉴于声明:

g.V(a).property('amount', X)
Run Code Online (Sandbox Code Playgroud)

我想我正在尝试做类似的事情:

g.V(a).property('amount', g.V(a).values('amount').next()+10)
Run Code Online (Sandbox Code Playgroud)

...但是对于我图中的所有顶点.它看起来像Tinkerpop2 loop()并且it.object可能有所帮助,但似乎不在Tinkerpop3中

编辑:好的,我离我更近了,但不是那里:

gremlin> g.V().as('x').property('amount', select('x').by('amount')+10)
No signature of method: org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.plus() is applicable for argument …
Run Code Online (Sandbox Code Playgroud)

graph gremlin titan tinkerpop

6
推荐指数
1
解决办法
1358
查看次数

如何在 Python Gremlin 变体中添加边缘

我正在尝试使用 gremlin-python 创建一个图表,但我似乎无法弄清楚如何添加边缘。

使用标准 Gremlin 控制台我可以执行以下操作:

gremlin> a = g.addV().next()
==>v[0]
gremlin> b = g.addV().next()
==>v[1]
gremlin> g.V()
==>v[0]
==>v[1]
gremlin> a.addEdge('conn', b)
==>e[2][0-conn->1]
gremlin> g.E()
==>e[2][0-conn->1]
gremlin> 
Run Code Online (Sandbox Code Playgroud)

但是当尝试通过连接到 gremlin 服务器的 python 执行相同操作时,我似乎无法执行相同操作:

>>> a = g.addV().next()
>>> b = g.addV().next()
>>> g.V().toList()
[v[1519], v[1520]]
>>> a.addEdge('conn', b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Vertex' object has no attribute 'addEdge'
Run Code Online (Sandbox Code Playgroud)

我尝试过各种咒语,但似乎无法解决,并且在任何地方都找不到任何示例。另外,我在 Gremlin 文档中看到了两者的参考addEaddEdge但无法弄清楚其中的区别(上面似乎都不起作用)。

编辑:更进一步,但仍然没有运气。它似乎GraphTraversal.addE()存在,所以如果我不打电话,next()那么我可以打电话addE......但我似乎仍然无法获得它喜欢的参数。 …

python gremlin titan tinkerpop

6
推荐指数
2
解决办法
4699
查看次数

SQLAlchemy 批量更新策略

我目前正在使用 SQLAlchemy(在 GAE 上,连接到 Google 的云 MySQL)编写一个 Web 应用程序(Flask)并且需要对表进行批量更新。简而言之,完成了许多计算,导致需要在 1000 个对象上更新单个值。目前我正在一个事务中完成这一切,但最终,刷新/提交需要很长时间。

该表有一个索引id,这一切都在单个事务中执行。所以我相信我已经避免了通常的错误,但仍然很慢。

INFO     2017-01-26 00:45:46,412 log.py:109] UPDATE wallet SET balance=%(balance)s WHERE wallet.id = %(wallet_id)s
2017-01-26 00:45:46,418 INFO sqlalchemy.engine.base.Engine ({'wallet_id': u'3c291a05-e2ed-11e6-9b55-19626d8c7624', 'balance': 1.8711760000000002}, {'wallet_id': u'3c352035-e2ed-11e6-a64c-19626d8c7624', 'balance': 1.5875759999999999}, {'wallet_id': u'3c52c047-e2ed-11e6-a903-19626d8c7624', 'balance': 1.441656}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,实际上无法在 SQL 中进行批量更新,并且上面的语句最终将多个 UPDATE 语句发送到服务器。

我试过使用,Session.bulk_update_mappings()但这似乎并没有真正做任何事情:( 不知道为什么,但更新从未真正发生过。我看不到任何实际使用这种方法的例子(包括在性能套件中)所以没有确定它是否打算使用。

我见过讨论过的一种技术是在另一个表中进行批量插入,然后进行 UPDATE JOIN。我已经给它做了一个测试,如下所示,它似乎要快得多。

wallets = db_session.query(Wallet).all()
ledgers = [ Ledger(id=w.id, amount=w._balance) for w in wallets ]
db_session.bulk_save_objects(ledgers)
db_session.execute('UPDATE wallet w JOIN ledger l on w.id = l.id SET …
Run Code Online (Sandbox Code Playgroud)

mysql performance orm sqlalchemy flask-sqlalchemy

3
推荐指数
1
解决办法
8112
查看次数