阿里云图谱相关问题

1 原生引擎 neo4j-python 引擎
官方反馈是自动事务提交。踩坑少

阿里问题:
py2neo 偶尔异常问题(int 和none 不可比)—> 换原生引擎
原生引擎,偶尔异常问题(自动事务会好一些)—> 换自动事务
自动事务,慢的问题【原因:图谱默认生命周期和连接最大数】—> 加上生命周期和最大数限制【生命周期选最大cql执行时间,最大连接数可以结合QPS设置】

import time
###  官方示例
import neo4j
from neo4j import GraphDatabase
class HelloWorldExample(object):
    def __init__(self, uri, user, password):
        self._driver = GraphDatabase.driver(uri,
                                            auth=(user, password),max_connection_lifetime=200
                                            encrypted=False)
    def close(self):
        self._driver.close()
    ## 自动事务,推荐
    def read_auto_transaction(self):
        try:
            data = self._driver.session().run("MATCH (a: test {creationDate:'1279582901279'}) RETURN a").data()
            print("data: {}".format(data))
        except Exception as e:
            # 访问异常的错误编号和详细信息
            print("cypher exception in KG {} === {}, data {}".format(e.args, str(e), data))
    # 事务,有问题
    def read_with_session(self, message):
        with self._driver.session() as session:
            greeting = session.write_transaction(
                self._create_and_return_greeting, message)
            print(greeting)

    @staticmethod
    def _create_and_return_greeting(tx, message):
        result = tx.run(
            "CREATE (a:Greeting) "
            "SET a.message = $message "
            "RETURN a.message + ', from node ' + id(a)",
            message=message)
        return result.single()[0]

if __name__ == '__main__':
    #print(neo4j.GraphDatabase.__version__)
    e = HelloWorldExample('bolt://127.0.0.1:3002', 'admin', 'admin')
    for i in range(1):
        r = e.read()
        #time.sleep(1)


# 事务性,不建议
def ParseCypher(cypher, keys):  
    with graph.session() as session:
        with session.begin_transaction() as tx:
            data = []
            result = tx.run(cypher)
            for record in result:
                item = {}
                for key in keys:
                    item = {key: record[key]}
                    data.append(item)
                data.append(item)
            return data
GDB ali 图谱会有一些需要注意的点:
如下:

图谱注意事项:graph 建立连接的时候需要设置每个连接生命周期和最大连接数。

方案1:
达到最大生命周期后自动释放链接:
self.graph.session().run(cql)
注意:最大连接数需要设置,最大生命周期需要设置

方案2with 自动释放连接:
with session = graph.session() as session:
         data = session.run(cql)
注意:最大连接数需要设置,最大生命周期可取默认
如果是需要遍历data对象,需要在with 内,否则结果为空,因为连接已经释放了

方案3:
手动释放链接。
如果是需要遍历data对象,需要在close之前,否则结果为空,因为连接已经释放了
session = graph.session()
try:
    data = session.run(cql)
except Exception as e:
      logger.warning("cypher exception in KG {} === {}".format(e.args, str(e)))
finally:
       session.close()

2 py2neo的坑

问题描述py2neo连接阿里云图数据库GDB,非常小概率出现’>’ not supported between
问题定位:主要还是bolt协议再演进,py2neo 4.1.0是19年的版本,处理bolt协议时没考虑buffer后为noop的条件;
建议解决方案:
可以使用py2neo 2021.1新版本 或者直接用neo4j-python-driver都可以

版本建议:
在这里插入图片描述

分析过程:
在这里插入图片描述
在这里插入图片描述
仔细分析所有涉及比较的代码,只有一个地方抛出用户侧类似的错误。就是neoboltyp.tcerid/tloboen/0.4/bolb/tloboen/srevird-j4oen/moc.buhtig//:sptth再 码代段这,tloboen是就。误错似类的侧户用出抛方地个一再能可有只,误错的>及涉的有所面上析分细仔
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值