Jam*_*her 4 python querying python-3.x vaticle-typeql vaticle-typedb
如果我采取一个简单的查询,比如match $x isa dog; limit 5; get;当时无论在Grakn中存储了多少只狗,我都会得到5个结果.这很好,但是如果我在查询时不知道有多少只狗,并希望限制我稍后在代码中检索的数字呢?
这是我使用Python客户端的想法:
import grakn
client = grakn.Grakn(uri="localhost:48555")
session = client.session(keyspace="dogs_keyspace")
tx = session.transaction(grakn.TxType.WRITE)
results = tx.query('match $x isa dog; get;') # I don't limit now, so I can do it later
Run Code Online (Sandbox Code Playgroud)
results 是一个迭代器,所以我不能这样做:
limited_results = list(results)[:5]
Run Code Online (Sandbox Code Playgroud)
因为如果我这样做,那么所有的狗都将被列入清单,然后我将采取前5个,如果我在知识图中有1,000,000只狗,这实在是效率低下.
但我可以说:
limited_results = list(itertools.islice(results, 5))
Run Code Online (Sandbox Code Playgroud)
我应该得到前5只狗而不接触其他999,995只狗.
但我的问题是:这种方法有什么理由比limit 5在查询中提供更慢match $x isa dog; limit 5; get;?
小智 5
如果你不希望Grakn检索图中的所有dogs并只访问前5个,那么你的方法都是有效的,因为它们都使用惰性迭代器,这意味着在你明确要求下一个结果之前不会进行检索.
如果直接发出查询match $x isa dog; limit 5; get;,Grakn将构建一个迭代器,它将迭代它5次并将结果返回给客户端.
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |