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
(默認值)。 這加快了所有的讀取。