在本章中,您可以獲得一些有關(guān)如何優(yōu)化使用OrientDB的應用程序的一般提示。有三種方法可以提高不同類型數(shù)據(jù)庫的性能。
文檔數(shù)據(jù)庫性能調(diào)整 - 它使用一種技術(shù),可幫助避免為每個新文檔創(chuàng)建文檔。
對象數(shù)據(jù)庫性能調(diào)優(yōu) - 它使用通用技術(shù)來提高性能。
分布式配置調(diào)整 - 它使用不同的方法來提高分布式配置的性能。
您可以通過更改內(nèi)存,JVM和遠程連接設(shè)置來實現(xiàn)通用性能調(diào)整。
內(nèi)存設(shè)置
在內(nèi)存設(shè)置中有不同的策略來提高性能。
服務器和嵌入式設(shè)置這些設(shè)置對于使用OrientDB在嵌入模式下運行Java應用程序的服務器組件和JVM都有效,直接使用plocal。
調(diào)整最重要的是確保內(nèi)存設(shè)置正確。什么可以產(chǎn)生真正的區(qū)別是堆和內(nèi)存映射使用的虛擬內(nèi)存之間的正確平衡,特別是在內(nèi)存緩存結(jié)構(gòu)計數(shù)小于原始IO的大型數(shù)據(jù)集(GB,TB和更多)上。
例如,如果您可以為Java進程分配最大8GB,通常最好分配小堆緩存和大磁盤緩存(堆外內(nèi)存)。
嘗試以下命令增加堆內(nèi)存。
java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ...
storage.diskCache.bufferSize設(shè)置(使用舊的“本地”存儲是file.mmap.maxMemory)以MB為單位,并告訴要為磁盤高速緩存組件使用多少內(nèi)存。 默認情況下是4GB。
注意 - 如果最大堆和磁盤緩存緩沖區(qū)的總和太高,它可能導致操作系統(tǒng)與巨大的減速交換。
JVM設(shè)置
JVM設(shè)置在server.sh(和server.bat)批處理文件中編碼。 您可以根據(jù)使用情況和hw / sw設(shè)置更改它們以調(diào)整JVM。 在server.bat文件中添加以下行。
-server -XX:+PerfDisableSharedMem
此設(shè)置將禁用編寫關(guān)于JVM的調(diào)試信息。如果需要配置JVM,只需刪除此設(shè)置。
遠程連接
當使用遠程連接訪問數(shù)據(jù)庫時,有許多方法可以提高性能。
獲取策略
當你使用遠程數(shù)據(jù)庫時,你必須注意使用的抓取策略。默認情況下,OrientDB客戶端只加載結(jié)果集中包含的記錄。例如,如果查詢返回100個元素,但是如果從客戶端交叉這些元素,則OrientDB客戶端會為每個錯過的記錄延遲加載一個網(wǎng)絡(luò)調(diào)用給服務器。
網(wǎng)絡(luò)連接池
默認情況下,每個客戶端只使用一個網(wǎng)絡(luò)連接與服務器通信。同一客戶端上的多個線程共享同一個網(wǎng)絡(luò)連接池。
當您有多個線程時,可能會有瓶頸,因為花費大量時間等待一個空閑的網(wǎng)絡(luò)連接。這就是為什么重要的是配置網(wǎng)絡(luò)連接池的原因。
配置很簡單,只有2個參數(shù) -
minPool - 這是連接池的初始大小。默認值配置為全局參數(shù)“client.channel.minPool”。
maxPool - 這是連接池可以達到的最大大小。默認值配置為全局參數(shù)“client.channel.maxPool”。
如果所有池連接都忙,則客戶端線程將等待第一個空閑連接。
使用數(shù)據(jù)庫屬性的配置示例命令。
database = new ODatabaseDocumentTx("remote:localhost/demo");
database.setProperty("minPool", 2);
database.setProperty("maxPool", 5);
database.open("admin", "admin");
分布式配置調(diào)整
有許多方法可以提高分布式配置的性能。
使用事務即使更新圖表,也應該始終在事務中工作。 OrientDB允許你在他們之外工作。常見的情況是只讀查詢,如果失敗,可以恢復大規(guī)模和非并發(fā)操作。當您在分布式配置上運行時,使用事務有助于減少延遲。這是因為分布式操作僅在提交時發(fā)生。分發(fā)一個大操作比傳輸小的多個操作更有效,因為延遲。
復制與分片OrientDB分布式配置設(shè)置為完全復制。使用具有相同數(shù)據(jù)庫副本的多個節(jié)點對于縮放讀取是重要的。事實上,每個服務器在執(zhí)行讀取和查詢時是獨立的。如果有10個服務器節(jié)點,則讀取吞吐量為10x。
使用寫入,情況恰恰相反:如果復制是同步的,則具有完全復制的多個節(jié)點會減慢操作速度。在這種情況下,跨多個節(jié)點分割數(shù)據(jù)庫允許您擴展寫入,因為在寫入時僅涉及節(jié)點的一個子集。此外,您可以有一個數(shù)據(jù)庫大于一個服務器節(jié)點HD。
按比例放大寫入如果您的網(wǎng)絡(luò)速度較慢,并且具有同步(默認)復制,則可以支付延遲成本。事實上當OrientDB同步運行時,它至少等待writeQuorum。這意味著如果writeQuorum為3,并且您有5個節(jié)點,則協(xié)調(diào)服務器節(jié)點(分布式操作啟動的地方)必須等待至少3個節(jié)點的答案,以便向客戶端提供答案。
為了保持一致性,writeQuorum應該設(shè)置為多數(shù)。如果你有5個節(jié)點,多數(shù)是3.對于4個節(jié)點,它仍然是3.將writeQuorum設(shè)置為3而不是4或5允許減少延遲成本,并仍然保持一致性。
異步復制為了加快速度,您可以設(shè)置異步復制以消除延遲瓶頸。在這種情況下,協(xié)調(diào)器服務器節(jié)點在本地執(zhí)行操作并向客戶端給出答案。整個復制將在后臺。如果未達到定額,則更改將被透明地回滾。
在閱讀時放大如果已經(jīng)將writeQuorum設(shè)置為大多數(shù)節(jié)點,則可以將readQuorum保留為1(默認值)。這加快了所有的讀取。
更多建議: