在本章中,可以瞭解一些關於如何優化使用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
(默認值)。 這加快了所有的讀取。