使用OrientDB进行扩展时的性能问题
我们正试图在分布式模式下扩展OrientDB,但却面临性能瓶颈 我们的用例 数据模型和处理方法: 我们从卡夫卡读取子图消息,并将其持久化/附加到数据库中的图中。子图消息可以包含要在图中保存/更新的多个顶点/边。这些顶点/边可能存在于数据库中,也可能不存在于数据库中,因此我们必须首先查询数据库中是否存在这些顶点/边。如果它们存在,我们必须检查是否有任何属性被更改,并且必须相应地执行更新操作<代码>顶点分为两种类型并具有大约10到15个属性,而使用OrientDB进行扩展时的性能问题,orientdb,orientdb2.2,Orientdb,Orientdb2.2,我们正试图在分布式模式下扩展OrientDB,但却面临性能瓶颈 我们的用例 数据模型和处理方法: 我们从卡夫卡读取子图消息,并将其持久化/附加到数据库中的图中。子图消息可以包含要在图中保存/更新的多个顶点/边。这些顶点/边可能存在于数据库中,也可能不存在于数据库中,因此我们必须首先查询数据库中是否存在这些顶点/边。如果它们存在,我们必须检查是否有任何属性被更改,并且必须相应地执行更新操作顶点分为两种类型并具有大约10到15个属性,而边分为两种类型,仅具有3个属性。服务并行使用来自16个kafka
边
分为两种类型,仅具有3个属性
。服务并行使用来自16个kafka线程的子图消息
,并同时执行读取/更新/创建操作
我们正在使用图形API
(orient Graph的蓝图实现)。目前,为了处理一个子图,我们使用池中的一个图事务图实例。池
大约有250个实例
与数据库远程连接。在处理更新/创建所需的所有操作后,事务只提交一次
性能瓶颈
目前,我们在分布式模式下运行16个线程和OrientDB v2.2.35
时,每分钟只能处理大约15K
子图消息
并发导致的性能损失:
在单线程上处理子图消息时,大约需要10毫秒(大约35次读取、15次更新和20次创建操作),但同时处理到20-45毫秒时,子图消息的速度会呈指数级增长
水平向上扩展orient数据库:
A.由于此错误,无法在分布式模式下运行OrientDB v3.0.3:
B.尝试使用OrientDB 2.2.35
。但对于独立的
OrientDB和并发调用,处理子图大约需要20-45毫秒。然而,在分布式模式下
平均需要100-110 ms
,两个服务器节点都作为主节点运行。虽然由于writekrom
设置为多数
,这可能需要更多的时间,但是有什么办法可以在一定程度上减少它
慢速边缘创建:
我们注意到,使用Graph API创建边是一项繁重的操作,因为它需要引用两个顶点,因此需要读取这些顶点,以便在活动事务中获取引用
我们迄今为止尝试过的事情:
调整图形API
查找顶点和边的索引
声明massive insertion intent
在写操作上有所改进,但在读操作上性能有所提高,因为它禁用了本地缓存李>
使用定义良好的模式
李>
关闭数据验证
:无明显改善
客户端级缓存
虽然可以减少JVM消耗,但对性能很重要事务日志
:没有明显的改进主副本
型号没有明显的改进负载平衡
:由于对数据库的并发调用和负载平衡策略设置为循环
,导致大量并发修改异常,从而导致重试次数增加李>
sharding
box进行探索,但由于其无法维护唯一索引的局限性,在我们的用例中无法使用它您正在运行的实际查询是什么?