📜  OrientDB-性能调整

📅  最后修改于: 2020-11-26 05:41:30             🧑  作者: Mango


在本章中,您可以获得有关如何优化使用OrientDB的应用程序的一些常规技巧。有三种方法可以提高不同类型数据库的性能。

  • 文档数据库性能调整-它使用一种有助于避免为每个新文档创建文档的技术。

  • 对象数据库性能调优-它使用通用技术来提高性能。

  • 分布式配置调整-它使用不同的方法来提高分布式配置的性能。

您可以通过更改内存,JVM和远程连接设置来实现常规性能调整。

记忆体设定

内存设置中有不同的策略可以提高性能。

服务器和嵌入式设置

这些设置对于服务器组件和直接使用plocal在OrientDB上以嵌入式模式运行Java应用程序的JVM均有效。

调优中最重要的是确保内存设置正确。真正的不同在于内存映射使用的堆和虚拟内存之间的正确平衡,尤其是在内存缓存结构的计数少于原始IO的大型数据集(GB,TB和更多)上。

例如,如果您可以为Java进程分配最大8GB的内存,通常最好分配较小的堆和较大的磁盘高速缓存缓冲区(堆外内存)。

尝试使用以下命令来增加堆内存。

java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ... 

storage.diskCache.bufferSize设置(使用旧的“本地”存储为file.mmap.maxMemory )以MB为单位,它告诉磁盘缓存组件使用多少内存。默认情况下为4GB。

–如果最大堆和磁盘缓存缓冲区的总和太高,则可能导致操作系统交换速度变慢。

JVM设置

JVM设置编码在server.sh(和server.bat)批处理文件中。您可以更改它们,以根据使用情况和硬件/软件设置调整JVM。在server.bat文件中添加以下行。

-server -XX:+PerfDisableSharedMem 

此设置将禁用编写有关JVM的调试信息。如果您需要分析JVM,只需删除此设置。

远程连接

使用远程连接访问数据库时,有许多方法可以提高性能。

提取策略

当使用远程数据库时,必须注意所使用的获取策略。默认情况下,OrientDB客户端仅加载结果集中包含的记录。例如,如果一个查询返回了100个元素,但是如果您从客户端交叉了这些元素,则OrientDB客户端会为每条丢失的记录向服务器延迟向服务器再加载一次网络调用这些元素。

网络连接池

默认情况下,每个客户端仅使用一个网络连接来与服务器通信。同一客户端上的多个线程共享同一网络连接池。

当您有多个线程时,可能会遇到瓶颈,因为花费大量时间等待免费的网络连接。这就是为什么配置网络连接池很重要的原因。

配置非常简单,只需2个参数-

  • minPool-它是连接池的初始大小。默认值配置为全局参数“ client.channel.minPool”。

  • maxPool-这是连接池可以达到的最大大小。默认值配置为全局参数“ client.channel.maxPool”。

如果所有池连接都忙,则客户端线程将等待第一个空闲连接。

使用数据库属性进行配置的示例命令。

database = new ODatabaseDocumentTx("remote:localhost/demo"); 
database.setProperty("minPool", 2); 
database.setProperty("maxPool", 5);  

database.open("admin", "admin");

分布式配置调整

有许多方法可以提高分布式配置的性能。

使用交易

即使更新图形,也应该始终在事务中工作。 OrientDB允许您在它们之外工作。常见的情况是只读查询,或者在失败的情况下可以恢复大量的非并行操作。当您在分布式配置上运行时,使用事务有助于减少延迟。这是因为分布式操作仅在提交时发生。由于存在延迟,因此分配一个大型操作比传输多个小型操作要高效得多。

复制与分片

OrientDB分布式配置设置为完全复制。具有多个节点和相同的数据库副本对于规模读取很重要。实际上,每个服务器都独立于执行读取和查询。如果您有10个服务器节点,则读取吞吐量为10倍。

与写操作相反,如果复制是同步的,则具有多个具有完全复制的节点会减慢操作速度。在这种情况下,通过在多个节点之间共享数据库可以扩大写入量,因为写入只涉及节点的一部分。此外,您的数据库可能大于一个服务器节点HD。

扩大写入

如果网络速度较慢,并且您具有同步(默认)复制,则可能要付出延迟的代价。实际上,当OrientDB同步运行时,它至少要等待writeQuorum 。这意味着,如果writeQuorum为3,并且您有5个节点,则协调器服务器节点(开始分布式操作的节点)必须等待至少3个节点的答案,才能将答案提供给客户端。

为了保持一致性,应该将writeQuorum设置为多数。如果您有5个节点,则大多数是3。在4个节点的情况下,它仍然是3。将writeQuorum设置为3而不是4或5可以减少延迟成本,并仍然保持一致性。

异步复制

为了加快速度,您可以设置异步复制来消除延迟瓶颈。在这种情况下,协调器服务器节点在本地执行操作,并将答案提供给客户端。整个复制将在后台进行。如果未达到法定人数,则更改将透明地回滚。

扩大阅读

如果已经将writeQuorum设置为大多数节点,则可以将readQuorum保留为1(默认值)。这样可以加快所有读取速度。