OrientDB性能调整
在本章中,可以了解一些关于如何优化使用OrientDB的应用程序的一般技巧。 有三种方法可以提高不同类型数据库的性能。
- 文档数据库性能调整 - 它使用一种技术来帮助避免为每个新文档创建文档。
- 对象数据库性能调整 - 它使用通用技术来提高性能。
- 分布式配置调整 - 它使用不同的方法来提高分布式配置的性能。
可以通过更改内存,JVM和远程连接设置来实现通用性能调整。
内存设置
内存设置有不同的策略来提高性能。
服务器和嵌入式设置
通过直接使用plocal
,这些设置对于Java应用程序在嵌入模式下使用OrientDB运行的服务器组件和JVM都有效。
调整最重要的是确保内存设置是正确的。 真正区别的是在内存映射所使用的堆和虚拟内存之间进行正确的平衡,特别是在内存缓存结构计数少于原始IO的大型数据集(GB
,TB
等)时。
例如,如果您最多可以为Java进程分配8GB,那么分配小堆和大型磁盘缓存缓冲区(堆内存储器)通常会更好。
尝试以下命令以增加堆内存。
java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ...
storage.diskCache.bufferSize
设置(使用旧的local
存储为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");
分布式配置调整
有许多方法可以提高分布式配置的性能。
使用事务
即使更新图表,也应该始终处理事务。常见情况是只读查询,如果发生故障,可以恢复大量和非并发操作。 在分布式配置上运行时,使用事务有助于减少延迟。 这是因为分布式操作只发生在提交时。 由于延迟,分配一个大的操作比传送小的多个操作要有效得多。
复制vs分片
OrientDB分布式配置设置为完全复制。 具有多个具有相同数据库副本的节点对于读取尺度很重要。 事实上,每个服务器都独立于执行读取和查询。 如果有10个服务器节点,则读取吞吐量为10倍。
写入后,情况正好相反:如果复制是同步的,则具有完全复制的多个节点会减慢操作速度。 在这种情况下,跨多个节点分割数据库允许您扩展写入,因为写入时只涉及一部分节点。 此外,您可以拥有一个比一个服务器节点HD更大的数据库。
在写入时放大
如果网络速度较慢,并且您有一个同步(默认)复制,则可以支付延迟成本。 事实上,当OrientDB同步运行时,它至少等待writeQuorum
。 这意味着如果writeQuorum
为3
,并且您有5个节点,则协调器服务器节点(启动分布式操作的位置)必须等待来自至少3
个节点的答案才能向客户端提供答案。
为了保持一致性,writeQuorum
应该被设置为majority
。 如果您有5
个节点,则majority
为3
,使用4
个节点时,它仍然为3
。将writeQuorum
设置为3
而不是4
或5
可以降低延迟成本并保持一致性。
异步复制
为了加快速度,可以设置异步复制来消除延迟瓶颈。 在这种情况下,协调器服务器节点在本地执行操作并将答案提供给客户端。 整个复制将在后台进行。 如果未达到法定人数,则更改将透明回滚。
在读取上放大
如果您已经将writeQuorum
设置为majority
节点,则可以将readQuorum
保留为1
(默认值)。 这加快了所有的读取。