我很抱歉,如果我问的是一个非常基本和天真的问题,但我已经找到了答案,但一直未能找到它。
我是Neo4j和图形数据库的新手,在处理关系数据库之后。例如,在关系数据库中,我将获得一个语句句柄,在数据库上执行一个查询,然后能够对语句句柄逐行进行操作,也就是说,具有一个“get perform”函数,以便每次从查询结果中检索一行。我可以在结果上工作,而不用一次把整件事吞进记忆中。
现在,我正在使用.NET/C#中的Neo4j (代码不是我创建的),而且我还没有找到一种方法来做到这一点。例如,该守则包括:
using (var session = connection.GetDriver().Session())
{
result = session.ReadTransaction(tx => tx.Run(query).ToList());
}并将整个查询结果检索到result中,即使这需要很长时间或溢出可用内存。
有没有办法用-like进行“获取”Neo4j操作?在我的搜索中,我发现大多数人推荐使用SKIP和LIMIT执行查询,这并不是我想要的。
发布于 2022-10-25 23:35:14
不幸的是,这不是一件真正的事情。如果您将Cypher与SQL进行比较,您可能会知道它为什么不能真正工作。在SQL中,您可以让它返回您选择的所有内容,或者添加一个限制子句。这里很相似。
如果您使用的是python熊猫或pyspark之类的东西,您可以将查询结果放入dataframes,但是仍然需要很长的时间或溢出现有的内存。
您可以使用apoc.export函数对输出进行批处理,这可能有助于解决内存问题。有关选项,请参见https://neo4j.com/labs/apoc/4.3/export/。
发布于 2022-10-27 19:49:13
我找到了一种类似的行为方式。这个例子在Python (API文档)中,但它与.NET (cf )的工作方式类似。IResult接口)和其他驱动程序。
from neo4j import GraphDatabase
def do_tx(tx, cypher):
print("do_tx:", [tx, cypher])
result = tx.run(cypher)
print("result:", result)
values = []
for record in result: # This is equivalent to "fetchrow"
print("record in result:", record)
# Do whatever I want here with the incremental result
for (value in record.values()):
values.append(value) # Store the retrieved value
summary = result.consume()
return values
db = GraphDatabase(uri, auth=(user, password))
with db.session(database="neo4j") as session:
query = "MATCH (r:Risk) RETURN DISTINCT r.score"
result = session.write_transaction(do_tx, query)
print(result)write_transaction()用一个neo4j.work.transaction.Transaction对象和Cypher查询调用do_tx()。tx.run(cypher)运行Cypher查询并获取一个neo4j.work.result.Result对象。结果对象是可迭代的,并给出记录对象。
在我上面的C#代码中也可以这样做:
using (var session = driver.Session())
{
string query = "MATCH (r:Risk) RETURN DISTINCT r.score";
var scores = session.ReadTransaction(tx => {
List<string> results;
var result => tx.Run(query);
foreach (var record in result)
{
foreach (KeyValuePair<string, object> kvp in record.Values)
{
Console.WriteLine(kvp.Key + ": " + kvp.Value);
results.Add(kvp.Value.ToString());
}
}
return results;
});
}https://stackoverflow.com/questions/73978067
复制相似问题