OrientDB 教程

OrientDB 主页 OrientDB 概述 OrientDB 下载安装和环境配置 OrientDB 基本概念 OrientDB 数据类型 OrientDB 控制台模式

OrientDB 数据库命令

OrientDB 创建数据库 OrientDB 更改数据库 OrientDB 备份数据库 OrientDB 恢复数据库 OrientDB 连接数据库 OrientDB 断开数据库 OrientDB 信息数据库 OrientDB 列出数据库 OrientDB 冻结数据库 OrientDB 释放数据库 OrientDB 配置数据库 OrientDB 导出数据库 OrientDB 导入数据库 OrientDB 提交数据库 OrientDB 回滚数据库 OrientDB 优化数据库 OrientDB 删除数据库

OrientDB 记录命令

OrientDB 插入记录 OrientDB 显示记录 OrientDB 加载记录 OrientDB 重新加载记录 OrientDB 导出记录 OrientDB 更新记录 OrientDB 截断记录 OrientDB 删除记录

OrientDB 类命令

OrientDB 创建类 OrientDB 更改类 OrientDB 截断类 OrientDB 删除类

OrientDB 集群命令

OrientDB 创建集群 OrientDB 更改群集 OrientDB 截断群集 OrientDB 删除群集

OrientDB 属性命令

OrientDB 创建属性 OrientDB 更改属性 OrientDB 删除属性

OrientDB 顶点命令

OrientDB 创建顶点 OrientDB 移动顶点 OrientDB 删除顶点

OrientDB 边命令

OrientDB 创建边 OrientDB 更新边 OrientDB 删除边

OrientDB高级概念

OrientDB 函数 OrientDB 序列 OrientDB 索引 OrientDB 事务 OrientDB 钩子 OrientDB 缓存 OrientDB 日志 OrientDB 性能调优 OrientDB 升级 OrientDB 安全 OrientDB Studio

OrientDB 接口

OrientDB Java 接口 OrientDB Python 接口

OrientDB 有用资源

OrientDB 快速指南 OrientDB 有用资源 OrientDB 讨论


OrientDB - 性能调优

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

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

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

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

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

内存设置

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

服务器和嵌入式设置

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

调整时最重要的是确保内存设置正确。真正能产生影响的是内存映射所使用的堆和虚拟内存之间的正确平衡,尤其是在大型数据集(GB、TB 等)上,其中内存缓存结构的数量少于原始 IO。

例如,如果您可以为 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(默认值)。这样可以加快所有读取速度。