OrientDB - การปรับแต่งประสิทธิภาพ
ในบทนี้คุณจะได้รับคำแนะนำทั่วไปเกี่ยวกับวิธีเพิ่มประสิทธิภาพแอปพลิเคชันของคุณที่ใช้ OrientDB มีสามวิธีในการเพิ่มประสิทธิภาพสำหรับฐานข้อมูลประเภทต่างๆ
Document Database Performance Tuning - ใช้เทคนิคที่ช่วยหลีกเลี่ยงการสร้างเอกสารสำหรับเอกสารใหม่ทุกฉบับ
Object Database Performance Tuning - ใช้เทคนิคทั่วไปเพื่อปรับปรุงประสิทธิภาพ
Distributed Configuration Tuning - ใช้วิธีการต่างๆเพื่อปรับปรุงประสิทธิภาพในการกำหนดค่าแบบกระจาย
คุณสามารถปรับแต่งประสิทธิภาพทั่วไปได้โดยเปลี่ยนการตั้งค่าหน่วยความจำ JVM และการเชื่อมต่อระยะไกล
การตั้งค่าหน่วยความจำ
มีกลยุทธ์ที่แตกต่างกันในการตั้งค่าหน่วยความจำเพื่อปรับปรุงประสิทธิภาพ
การตั้งค่าเซิร์ฟเวอร์และฝังตัว
การตั้งค่าเหล่านี้ใช้ได้กับทั้งคอมโพเนนต์เซิร์ฟเวอร์และ JVM ที่แอ็พพลิเคชัน Java ทำงานโดยใช้ OrientDB ในโหมดฝังตัวโดยใช้โดยตรง plocal.
สิ่งที่สำคัญที่สุดในการปรับแต่งคือการตรวจสอบว่าการตั้งค่าหน่วยความจำถูกต้อง สิ่งที่สามารถสร้างความแตกต่างได้อย่างแท้จริงคือการปรับสมดุลระหว่างฮีปและหน่วยความจำเสมือนที่ใช้โดย Memory Mapping โดยเฉพาะอย่างยิ่งในชุดข้อมูลขนาดใหญ่ (GBs, TBs และอื่น ๆ ) ซึ่งโครงสร้างแคชในหน่วยความจำนับน้อยกว่า IO ดิบ
ตัวอย่างเช่นหากคุณสามารถกำหนด 8GB สูงสุดให้กับกระบวนการ Java ได้โดยปกติแล้วการกำหนดฮีปขนาดเล็กและดิสก์แคชบัฟเฟอร์ขนาดใหญ่ (หน่วยความจำนอกฮีป) จะดีกว่า
ลองใช้คำสั่งต่อไปนี้เพื่อเพิ่มหน่วยความจำฮีป
java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ...
storage.diskCache.bufferSize การตั้งค่า (ด้วยพื้นที่เก็บข้อมูล "ในเครื่อง" แบบเก่า file.mmap.maxMemory) เป็น MB และบอกจำนวนหน่วยความจำที่จะใช้สำหรับคอมโพเนนต์ Disk Cache โดยค่าเริ่มต้นคือ 4GB
NOTE - หากผลรวมของฮีปสูงสุดและบัฟเฟอร์แคชดิสก์สูงเกินไปอาจทำให้ระบบปฏิบัติการสลับกับการชะลอตัวครั้งใหญ่
การตั้งค่า JVM
การตั้งค่า JVM ถูกเข้ารหัสในไฟล์แบตช์ server.sh (และ server.bat) คุณสามารถเปลี่ยนเพื่อปรับแต่ง JVM ตามการใช้งานและการตั้งค่า hw / sw ของคุณ เพิ่มบรรทัดต่อไปนี้ในไฟล์ 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 ช่วยให้คุณสามารถทำงานนอกสถานที่ได้ กรณีทั่วไปคือแบบสอบถามแบบอ่านอย่างเดียวหรือสามารถเรียกคืนการดำเนินการขนาดใหญ่และไม่เป็นปัจจุบันได้ในกรณีที่เกิดความล้มเหลว เมื่อคุณเรียกใช้การกำหนดค่าแบบกระจายการใช้ธุรกรรมจะช่วยลดเวลาในการตอบสนอง เนื่องจากการดำเนินการแบบกระจายจะเกิดขึ้นในเวลาคอมมิตเท่านั้น การกระจายการดำเนินการขนาดใหญ่หนึ่งครั้งมีประสิทธิภาพมากกว่าการถ่ายโอนการดำเนินการหลายรายการขนาดเล็กเนื่องจากเวลาแฝง
การจำลองแบบเทียบกับ Sharding
การกำหนดค่าแบบกระจาย OrientDB ถูกตั้งค่าเป็นการจำลองแบบเต็ม การมีหลายโหนดที่มีสำเนาฐานข้อมูลเดียวกันเป็นสิ่งสำคัญสำหรับการอ่านมาตราส่วน ในความเป็นจริงแต่ละเซิร์ฟเวอร์มีความเป็นอิสระในการดำเนินการอ่านและการสืบค้น หากคุณมีโหนดเซิร์ฟเวอร์ 10 โหนดทรูพุตการอ่านคือ 10x
ด้วยการเขียนมันตรงกันข้าม: การมีหลายโหนดที่มีการจำลองแบบเต็มจะทำให้การดำเนินการช้าลงหากการจำลองแบบซิงโครนัส ในกรณีนี้การแบ่งฐานข้อมูลในหลายโหนดช่วยให้คุณสามารถขยายขนาดการเขียนได้เนื่องจากมีเพียงโหนดย่อยเท่านั้นที่เกี่ยวข้องกับการเขียน นอกจากนี้คุณอาจมีฐานข้อมูลที่ใหญ่กว่า HD ของเซิร์ฟเวอร์โหนด
ขยายขนาดในการเขียน
หากคุณมีเครือข่ายที่ช้าและคุณมีการจำลองแบบซิงโครนัส (ค่าเริ่มต้น) คุณสามารถจ่ายค่าเวลาแฝงได้ ในความเป็นจริงเมื่อ OrientDB ทำงานพร้อมกันจะรออย่างน้อยสำหรับไฟล์writeQuorum. ซึ่งหมายความว่าถ้า writeQuorum คือ 3 และคุณมี 5 โหนดโหนดเซิร์ฟเวอร์ผู้ประสานงาน (ซึ่งการดำเนินการแบบกระจายจะเริ่มต้นขึ้น) จะต้องรอคำตอบจากอย่างน้อย 3 โหนดเพื่อให้คำตอบกับไคลเอ็นต์
เพื่อรักษาความสอดคล้องควรกำหนด writeQuorum เป็นส่วนใหญ่ หากคุณมี 5 โหนดส่วนใหญ่คือ 3 โดยมี 4 โหนดก็ยังคงเป็น 3 การตั้งค่า writeQuorum เป็น 3 แทนที่จะเป็น 4 หรือ 5 จะช่วยลดต้นทุนแฝงและยังคงรักษาความสม่ำเสมอ
การจำลองแบบอะซิงโครนัส
เพื่อเร่งความเร็วคุณสามารถตั้งค่าการจำลองแบบอะซิงโครนัสเพื่อลบปัญหาคอขวดของเวลาในการตอบสนอง ในกรณีนี้โหนดเซิร์ฟเวอร์ผู้ประสานงานจะเรียกใช้การดำเนินการภายในเครื่องและให้คำตอบกับไคลเอ็นต์ การจำลองแบบทั้งหมดจะอยู่เบื้องหลัง ในกรณีที่ไม่ถึงองค์ประชุมการเปลี่ยนแปลงจะถูกยกเลิกอย่างโปร่งใส
ปรับขนาดการอ่าน
หากคุณตั้งค่า writeQuorum เป็นโหนดส่วนใหญ่แล้วคุณสามารถออกจากไฟล์ readQuorumถึง 1 (ค่าเริ่มต้น) สิ่งนี้จะเร่งความเร็วในการอ่านทั้งหมด