OrientDB - 性能调优


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

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

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

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

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

内存设置

内存设置有不同的策略来提高性能。

服务器和嵌入式设置

这些设置对于服务器组件和 JVM 均有效,其中 Java 应用程序通过直接使用plocal在嵌入式模式下使用 OrientDB 运行。

调整时最重要的是确保内存设置正确。真正能发挥作用的是内存映射使用的堆和虚拟内存之间的正确平衡,尤其是在内存缓存结构计数少于原始 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(默认值)。这加快了所有读取速度。