Если я возьму простой запрос, такой как 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
results
- итератор, поэтому я не могу сделать это:
limited_results = list(results)[:5]
потому что, если я это сделаю, все собаки будут включены в список, а затем я возьму первые 5, что действительно неэффективно, если у меня есть 1 000 000 собак в графе знаний.
Но я могу сказать:
limited_results = list(itertools.islice(results, 5))
и я должен получить только первые 5 собак, не касаясь остальных 999,995 собак.
Но мой вопрос: есть ли причина, по которой этот подход будет медленнее, чем предоставление limit 5
в запросе, например match $x isa dog; limit 5; get;
?