OrientDB – 性能调优

OrientDB – 性能调优


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

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

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

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

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

内存设置

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

服务器和嵌入式设置

通过直接使用plocal,这些设置对服务器组件和 Java 应用程序在嵌入式模式下使用 OrientDB 运行的 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(默认值)。这会加快所有读取速度。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁