ಅಪಾಚೆ ಇಗ್ನೈಟ್‌ನಲ್ಲಿ ಡೇಟಾ ಕಂಪ್ರೆಷನ್. Sber ಅವರ ಅನುಭವ

ಅಪಾಚೆ ಇಗ್ನೈಟ್‌ನಲ್ಲಿ ಡೇಟಾ ಕಂಪ್ರೆಷನ್. Sber ಅವರ ಅನುಭವದೊಡ್ಡ ಪ್ರಮಾಣದ ಡೇಟಾದೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ, ಡಿಸ್ಕ್ ಜಾಗದ ಕೊರತೆಯ ಸಮಸ್ಯೆ ಕೆಲವೊಮ್ಮೆ ಉದ್ಭವಿಸಬಹುದು. ಈ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ಒಂದು ಮಾರ್ಗವೆಂದರೆ ಸಂಕೋಚನ, ಇದಕ್ಕೆ ಧನ್ಯವಾದಗಳು, ಅದೇ ಸಾಧನದಲ್ಲಿ, ಶೇಖರಣಾ ಪರಿಮಾಣವನ್ನು ಹೆಚ್ಚಿಸಲು ನೀವು ನಿಭಾಯಿಸಬಹುದು. ಈ ಲೇಖನದಲ್ಲಿ, ಅಪಾಚೆ ಇಗ್ನೈಟ್‌ನಲ್ಲಿ ಡೇಟಾ ಕಂಪ್ರೆಷನ್ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ನಾವು ನೋಡುತ್ತೇವೆ. ಈ ಲೇಖನವು ಉತ್ಪನ್ನದಲ್ಲಿ ಅಳವಡಿಸಲಾಗಿರುವ ಡಿಸ್ಕ್ ಕಂಪ್ರೆಷನ್ ವಿಧಾನಗಳನ್ನು ಮಾತ್ರ ವಿವರಿಸುತ್ತದೆ. ಡೇಟಾ ಕಂಪ್ರೆಷನ್‌ನ ಇತರ ವಿಧಾನಗಳು (ನೆಟ್‌ವರ್ಕ್ ಮೂಲಕ, ಮೆಮೊರಿಯಲ್ಲಿ), ಕಾರ್ಯಗತಗೊಳಿಸಿದರೂ ಅಥವಾ ಇಲ್ಲದಿದ್ದರೂ, ವ್ಯಾಪ್ತಿಯ ಹೊರಗೆ ಉಳಿಯುತ್ತದೆ.

ಆದ್ದರಿಂದ, ನಿರಂತರ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದಾಗ, ಸಂಗ್ರಹಗಳಲ್ಲಿನ ಡೇಟಾದಲ್ಲಿನ ಬದಲಾವಣೆಗಳ ಪರಿಣಾಮವಾಗಿ, ಇಗ್ನೈಟ್ ಡಿಸ್ಕ್ಗೆ ಬರೆಯಲು ಪ್ರಾರಂಭಿಸುತ್ತದೆ:

  1. ಸಂಗ್ರಹಗಳ ವಿಷಯಗಳು
  2. ಮುಂದೆ ಲಾಗ್ ಬರೆಯಿರಿ (ಇನ್ನು ಮುಂದೆ ಸರಳವಾಗಿ WAL)

WAL ಸಂಕೋಚನಕ್ಕೆ ಸ್ವಲ್ಪ ಸಮಯದವರೆಗೆ ಒಂದು ಯಾಂತ್ರಿಕ ವ್ಯವಸ್ಥೆ ಇದೆ, ಇದನ್ನು WAL ಸಂಕೋಚನ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ಇತ್ತೀಚೆಗೆ ಬಿಡುಗಡೆಯಾದ ಅಪಾಚೆ ಇಗ್ನೈಟ್ 2.8 ಡಿಸ್ಕ್‌ನಲ್ಲಿ ಡೇಟಾವನ್ನು ಕುಗ್ಗಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುವ ಎರಡು ಕಾರ್ಯವಿಧಾನಗಳನ್ನು ಪರಿಚಯಿಸಿದೆ: ಕ್ಯಾಶ್‌ಗಳ ವಿಷಯಗಳನ್ನು ಕುಗ್ಗಿಸಲು ಡಿಸ್ಕ್ ಪುಟ ಸಂಕುಚಿತಗೊಳಿಸುವಿಕೆ ಮತ್ತು ಕೆಲವು WAL ನಮೂದುಗಳನ್ನು ಕುಗ್ಗಿಸಲು WAL ಪುಟ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್ ಸಂಕುಚಿತಗೊಳಿಸುವಿಕೆ. ಈ ಎಲ್ಲಾ ಮೂರು ಕಾರ್ಯವಿಧಾನಗಳ ಕುರಿತು ಹೆಚ್ಚಿನ ವಿವರಗಳನ್ನು ಕೆಳಗೆ ನೀಡಲಾಗಿದೆ.

ಡಿಸ್ಕ್ ಪುಟ ಸಂಕೋಚನ

ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ

ಮೊದಲಿಗೆ, ಇಗ್ನೈಟ್ ಡೇಟಾವನ್ನು ಹೇಗೆ ಸಂಗ್ರಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ನಾವು ಸಂಕ್ಷಿಪ್ತವಾಗಿ ನೋಡೋಣ. ಸಂಗ್ರಹಣೆಗಾಗಿ ಪುಟ ಮೆಮೊರಿಯನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಪುಟದ ಗಾತ್ರವನ್ನು ನೋಡ್‌ನ ಪ್ರಾರಂಭದಲ್ಲಿ ಹೊಂದಿಸಲಾಗಿದೆ ಮತ್ತು ನಂತರದ ಹಂತಗಳಲ್ಲಿ ಬದಲಾಯಿಸಲಾಗುವುದಿಲ್ಲ; ಅಲ್ಲದೆ, ಪುಟದ ಗಾತ್ರವು ಎರಡು ಶಕ್ತಿಯಾಗಿರಬೇಕು ಮತ್ತು ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್ ಗಾತ್ರದ ಬಹುಸಂಖ್ಯೆಯಾಗಿರಬೇಕು. ಅಗತ್ಯವಿರುವಂತೆ ಡಿಸ್ಕ್‌ನಿಂದ RAM ಗೆ ಪುಟಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತದೆ; ಡಿಸ್ಕ್‌ನಲ್ಲಿನ ಡೇಟಾದ ಗಾತ್ರವು ನಿಗದಿಪಡಿಸಿದ RAM ನ ಪ್ರಮಾಣವನ್ನು ಮೀರಬಹುದು. ಡಿಸ್ಕ್‌ನಿಂದ ಪುಟವನ್ನು ಲೋಡ್ ಮಾಡಲು RAM ನಲ್ಲಿ ಸಾಕಷ್ಟು ಸ್ಥಳವಿಲ್ಲದಿದ್ದರೆ, ಹಳೆಯ, ಇನ್ನು ಮುಂದೆ ಬಳಸದ ಪುಟಗಳನ್ನು RAM ನಿಂದ ಹೊರಹಾಕಲಾಗುತ್ತದೆ.

ಡೇಟಾವನ್ನು ಈ ಕೆಳಗಿನ ರೂಪದಲ್ಲಿ ಡಿಸ್ಕ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗಿದೆ: ಪ್ರತಿ ಸಂಗ್ರಹ ಗುಂಪಿನ ಪ್ರತಿಯೊಂದು ವಿಭಾಗಕ್ಕೆ ಪ್ರತ್ಯೇಕ ಫೈಲ್ ಅನ್ನು ರಚಿಸಲಾಗಿದೆ; ಈ ಫೈಲ್‌ನಲ್ಲಿ, ಆರೋಹಣ ಸೂಚ್ಯಂಕ ಕ್ರಮದಲ್ಲಿ ಪುಟಗಳು ಒಂದರ ನಂತರ ಒಂದರಂತೆ ಗೋಚರಿಸುತ್ತವೆ. ಪೂರ್ಣ ಪುಟ ಗುರುತಿಸುವಿಕೆಯು ಸಂಗ್ರಹ ಗುಂಪು ಗುರುತಿಸುವಿಕೆ, ವಿಭಾಗ ಸಂಖ್ಯೆ ಮತ್ತು ಫೈಲ್‌ನಲ್ಲಿ ಪುಟ ಸೂಚ್ಯಂಕವನ್ನು ಒಳಗೊಂಡಿದೆ. ಹೀಗಾಗಿ, ಪೂರ್ಣ ಪುಟ ಗುರುತಿಸುವಿಕೆಯನ್ನು ಬಳಸಿಕೊಂಡು, ನಾವು ಪ್ರತಿ ಪುಟಕ್ಕೆ ಫೈಲ್‌ನಲ್ಲಿ ಫೈಲ್ ಮತ್ತು ಆಫ್‌ಸೆಟ್ ಅನ್ನು ಅನನ್ಯವಾಗಿ ನಿರ್ಧರಿಸಬಹುದು. ಅಪಾಚೆ ಇಗ್ನೈಟ್ ವಿಕಿ ಲೇಖನದಲ್ಲಿ ಪೇಜಿಂಗ್ ಮೆಮೊರಿಯ ಕುರಿತು ನೀವು ಇನ್ನಷ್ಟು ಓದಬಹುದು: ಇಗ್ನೈಟ್ ಪರ್ಸಿಸ್ಟೆಂಟ್ ಸ್ಟೋರ್ - ಹುಡ್ ಅಡಿಯಲ್ಲಿ.

ಡಿಸ್ಕ್ ಪೇಜ್ ಕಂಪ್ರೆಷನ್ ಮೆಕ್ಯಾನಿಸಂ, ನೀವು ಹೆಸರಿನಿಂದ ಊಹಿಸಿದಂತೆ, ಪುಟ ಮಟ್ಟದಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಈ ಕಾರ್ಯವಿಧಾನವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದಾಗ, RAM ನಲ್ಲಿನ ಡೇಟಾವನ್ನು ಯಾವುದೇ ಸಂಕೋಚನವಿಲ್ಲದೆಯೇ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲಾಗುತ್ತದೆ, ಆದರೆ RAM ನಿಂದ ಡಿಸ್ಕ್ಗೆ ಪುಟಗಳನ್ನು ಉಳಿಸಿದಾಗ, ಅವುಗಳನ್ನು ಸಂಕುಚಿತಗೊಳಿಸಲಾಗುತ್ತದೆ.

ಆದರೆ ಪ್ರತಿ ಪುಟವನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಕುಗ್ಗಿಸುವುದು ಸಮಸ್ಯೆಗೆ ಪರಿಹಾರವಲ್ಲ; ಪರಿಣಾಮವಾಗಿ ಡೇಟಾ ಫೈಲ್‌ಗಳ ಗಾತ್ರವನ್ನು ನೀವು ಹೇಗಾದರೂ ಕಡಿಮೆ ಮಾಡಬೇಕಾಗುತ್ತದೆ. ಪುಟದ ಗಾತ್ರವನ್ನು ಇನ್ನು ಮುಂದೆ ಸರಿಪಡಿಸಲಾಗದಿದ್ದರೆ, ನಾವು ಇನ್ನು ಮುಂದೆ ಫೈಲ್‌ಗೆ ಒಂದರ ನಂತರ ಒಂದರಂತೆ ಪುಟಗಳನ್ನು ಬರೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ, ಏಕೆಂದರೆ ಇದು ಹಲವಾರು ಸಮಸ್ಯೆಗಳನ್ನು ರಚಿಸಬಹುದು:

  • ಪುಟ ಸೂಚ್ಯಂಕವನ್ನು ಬಳಸಿಕೊಂಡು, ಫೈಲ್‌ನಲ್ಲಿ ಇರುವ ಆಫ್‌ಸೆಟ್ ಅನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ನಮಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.
  • ಫೈಲ್‌ನ ಕೊನೆಯಲ್ಲಿಲ್ಲದ ಮತ್ತು ಅವುಗಳ ಗಾತ್ರವನ್ನು ಬದಲಾಯಿಸುವ ಪುಟಗಳೊಂದಿಗೆ ಏನು ಮಾಡಬೇಕೆಂದು ಸ್ಪಷ್ಟವಾಗಿಲ್ಲ. ಪುಟದ ಗಾತ್ರವು ಕಡಿಮೆಯಾದರೆ, ಅದು ಮುಕ್ತಗೊಳಿಸಿದ ಸ್ಥಳವು ಕಣ್ಮರೆಯಾಗುತ್ತದೆ. ಪುಟದ ಗಾತ್ರವು ಹೆಚ್ಚಾದರೆ, ಅದಕ್ಕಾಗಿ ನೀವು ಫೈಲ್‌ನಲ್ಲಿ ಹೊಸ ಸ್ಥಳವನ್ನು ಹುಡುಕಬೇಕಾಗಿದೆ.
  • ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್ ಗಾತ್ರದ ಬಹುಸಂಖ್ಯೆಯಲ್ಲದ ಹಲವಾರು ಬೈಟ್‌ಗಳಿಂದ ಪುಟವು ಚಲಿಸಿದರೆ, ಅದನ್ನು ಓದಲು ಅಥವಾ ಬರೆಯಲು ಇನ್ನೊಂದು ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್ ಅನ್ನು ಸ್ಪರ್ಶಿಸುವ ಅಗತ್ಯವಿರುತ್ತದೆ, ಇದು ಕಾರ್ಯಕ್ಷಮತೆಯ ಅವನತಿಗೆ ಕಾರಣವಾಗಬಹುದು.

ಈ ಸಮಸ್ಯೆಗಳನ್ನು ತನ್ನದೇ ಮಟ್ಟದಲ್ಲಿ ಪರಿಹರಿಸುವುದನ್ನು ತಪ್ಪಿಸಲು, ಅಪಾಚೆ ಇಗ್ನೈಟ್‌ನಲ್ಲಿನ ಡಿಸ್ಕ್ ಪುಟ ಸಂಕುಚನವು ವಿರಳ ಫೈಲ್‌ಗಳು ಎಂಬ ಫೈಲ್ ಸಿಸ್ಟಮ್ ಕಾರ್ಯವಿಧಾನವನ್ನು ಬಳಸುತ್ತದೆ. ವಿರಳವಾದ ಫೈಲ್ ಎಂದರೆ ಕೆಲವು ಶೂನ್ಯ ತುಂಬಿದ ಪ್ರದೇಶಗಳನ್ನು "ರಂಧ್ರಗಳು" ಎಂದು ಗುರುತಿಸಬಹುದು. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಈ ರಂಧ್ರಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಯಾವುದೇ ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್ಗಳನ್ನು ನಿಯೋಜಿಸಲಾಗುವುದಿಲ್ಲ, ಇದರಿಂದಾಗಿ ಡಿಸ್ಕ್ ಜಾಗದಲ್ಲಿ ಉಳಿತಾಯವಾಗುತ್ತದೆ.

ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್ ಅನ್ನು ಮುಕ್ತಗೊಳಿಸಲು, ರಂಧ್ರದ ಗಾತ್ರವು ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್‌ಗಿಂತ ಹೆಚ್ಚಾಗಿರಬೇಕು ಅಥವಾ ಸಮನಾಗಿರಬೇಕು, ಇದು ಪುಟದ ಗಾತ್ರ ಮತ್ತು ಅಪಾಚೆ ಇಗ್ನೈಟ್‌ನ ಮೇಲೆ ಹೆಚ್ಚುವರಿ ಮಿತಿಯನ್ನು ಹೇರುತ್ತದೆ: ಸಂಕೋಚನವು ಯಾವುದೇ ಪರಿಣಾಮವನ್ನು ಬೀರಲು, ಪುಟದ ಗಾತ್ರವು ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್ನ ಗಾತ್ರಕ್ಕಿಂತ ಕಟ್ಟುನಿಟ್ಟಾಗಿ ದೊಡ್ಡದಾಗಿರಬೇಕು. ಪುಟದ ಗಾತ್ರವು ಬ್ಲಾಕ್ ಗಾತ್ರಕ್ಕೆ ಸಮನಾಗಿದ್ದರೆ, ಒಂದೇ ಬ್ಲಾಕ್ ಅನ್ನು ಮುಕ್ತಗೊಳಿಸಲು ನಮಗೆ ಎಂದಿಗೂ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ, ಏಕೆಂದರೆ ಒಂದೇ ಬ್ಲಾಕ್ ಅನ್ನು ಮುಕ್ತಗೊಳಿಸಲು, ಸಂಕುಚಿತ ಪುಟವು 0 ಬೈಟ್‌ಗಳನ್ನು ಆಕ್ರಮಿಸಿಕೊಳ್ಳಬೇಕು. ಪುಟದ ಗಾತ್ರವು 2 ಅಥವಾ 4 ಬ್ಲಾಕ್‌ಗಳ ಗಾತ್ರಕ್ಕೆ ಸಮನಾಗಿದ್ದರೆ, ನಮ್ಮ ಪುಟವನ್ನು ಅನುಕ್ರಮವಾಗಿ ಕನಿಷ್ಠ 50% ಅಥವಾ 75% ಗೆ ಸಂಕುಚಿತಗೊಳಿಸಿದರೆ ನಾವು ಈಗಾಗಲೇ ಕನಿಷ್ಠ ಒಂದು ಬ್ಲಾಕ್ ಅನ್ನು ಮುಕ್ತಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.

ಹೀಗಾಗಿ, ಕಾರ್ಯವಿಧಾನವು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದರ ಅಂತಿಮ ವಿವರಣೆ: ಡಿಸ್ಕ್ಗೆ ಪುಟವನ್ನು ಬರೆಯುವಾಗ, ಪುಟವನ್ನು ಕುಗ್ಗಿಸುವ ಪ್ರಯತ್ನವನ್ನು ಮಾಡಲಾಗುತ್ತದೆ. ಸಂಕುಚಿತ ಪುಟದ ಗಾತ್ರವು ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್‌ಗಳನ್ನು ಮುಕ್ತಗೊಳಿಸಲು ಅನುಮತಿಸಿದರೆ, ನಂತರ ಪುಟವನ್ನು ಸಂಕುಚಿತ ರೂಪದಲ್ಲಿ ಬರೆಯಲಾಗುತ್ತದೆ ಮತ್ತು ಮುಕ್ತಗೊಳಿಸಿದ ಬ್ಲಾಕ್‌ಗಳ ಸ್ಥಳದಲ್ಲಿ “ರಂಧ್ರ” ಮಾಡಲಾಗುತ್ತದೆ (ಸಿಸ್ಟಮ್ ಕರೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ fallocate() ಪಂಚ್ ಹೋಲ್ ಧ್ವಜದೊಂದಿಗೆ). ಸಂಕುಚಿತ ಪುಟದ ಗಾತ್ರವು ಬ್ಲಾಕ್‌ಗಳನ್ನು ಮುಕ್ತಗೊಳಿಸಲು ಅನುಮತಿಸದಿದ್ದರೆ, ಪುಟವನ್ನು ಸಂಕ್ಷೇಪಿಸದೆ ಉಳಿಸಲಾಗುತ್ತದೆ. ಪುಟದ ಗಾತ್ರದಿಂದ ಪುಟ ಸೂಚಿಯನ್ನು ಗುಣಿಸುವ ಮೂಲಕ ಎಲ್ಲಾ ಪುಟ ಆಫ್‌ಸೆಟ್‌ಗಳನ್ನು ಸಂಕುಚಿತಗೊಳಿಸದೆ ಅದೇ ರೀತಿಯಲ್ಲಿ ಲೆಕ್ಕಹಾಕಲಾಗುತ್ತದೆ. ನಿಮ್ಮದೇ ಆದ ಪುಟಗಳ ಸ್ಥಳಾಂತರ ಅಗತ್ಯವಿಲ್ಲ. ಸಂಕೋಚನವಿಲ್ಲದೆಯೇ ಪೇಜ್ ಆಫ್‌ಸೆಟ್‌ಗಳು ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್‌ಗಳ ಗಡಿಗಳ ಮೇಲೆ ಬೀಳುತ್ತವೆ.

ಅಪಾಚೆ ಇಗ್ನೈಟ್‌ನಲ್ಲಿ ಡೇಟಾ ಕಂಪ್ರೆಷನ್. Sber ಅವರ ಅನುಭವ

ಪ್ರಸ್ತುತ ಅಳವಡಿಕೆಯಲ್ಲಿ, ಲಿನಕ್ಸ್ ಓಎಸ್ ಅಡಿಯಲ್ಲಿ ವಿರಳ ಫೈಲ್‌ಗಳೊಂದಿಗೆ ಮಾತ್ರ ಇಗ್ನೈಟ್ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ; ಅದರ ಪ್ರಕಾರ, ಈ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಂನಲ್ಲಿ ಇಗ್ನೈಟ್ ಬಳಸುವಾಗ ಮಾತ್ರ ಡಿಸ್ಕ್ ಪುಟ ಸಂಕುಚನವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬಹುದು.

ಡಿಸ್ಕ್ ಪುಟ ಸಂಕೋಚನಕ್ಕಾಗಿ ಬಳಸಬಹುದಾದ ಸಂಕೋಚನ ಕ್ರಮಾವಳಿಗಳು: ZSTD, LZ4, Snappy. ಹೆಚ್ಚುವರಿಯಾಗಿ, ಆಪರೇಟಿಂಗ್ ಮೋಡ್ (SKIP_GARBAGE) ಇದೆ, ಇದರಲ್ಲಿ ಉಳಿದ ಡೇಟಾದ ಮೇಲೆ ಸಂಕೋಚನವನ್ನು ಅನ್ವಯಿಸದೆ ಪುಟದಲ್ಲಿನ ಬಳಕೆಯಾಗದ ಜಾಗವನ್ನು ಮಾತ್ರ ಹೊರಹಾಕಲಾಗುತ್ತದೆ, ಇದು ಹಿಂದೆ ಪಟ್ಟಿ ಮಾಡಲಾದ ಅಲ್ಗಾರಿದಮ್‌ಗಳಿಗೆ ಹೋಲಿಸಿದರೆ CPU ಮೇಲಿನ ಲೋಡ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.

ಕಾರ್ಯಕ್ಷಮತೆಯ ಪರಿಣಾಮ

ದುರದೃಷ್ಟವಶಾತ್, ಉತ್ಪಾದನೆಯಲ್ಲಿ ಈ ಕಾರ್ಯವಿಧಾನವನ್ನು ಬಳಸಲು ನಾವು ಯೋಜಿಸದ ಕಾರಣ ನಾನು ನೈಜ ಸ್ಟ್ಯಾಂಡ್‌ಗಳಲ್ಲಿ ನಿಜವಾದ ಕಾರ್ಯಕ್ಷಮತೆಯ ಮಾಪನಗಳನ್ನು ನಡೆಸಲಿಲ್ಲ, ಆದರೆ ನಾವು ಎಲ್ಲಿ ಸೋಲುತ್ತೇವೆ ಮತ್ತು ಎಲ್ಲಿ ಗೆಲ್ಲುತ್ತೇವೆ ಎಂದು ನಾವು ಸೈದ್ಧಾಂತಿಕವಾಗಿ ಊಹಿಸಬಹುದು.

ಇದನ್ನು ಮಾಡಲು, ಪ್ರವೇಶಿಸಿದಾಗ ಪುಟಗಳನ್ನು ಹೇಗೆ ಓದಲಾಗುತ್ತದೆ ಮತ್ತು ಬರೆಯಲಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ನಾವು ನೆನಪಿಟ್ಟುಕೊಳ್ಳಬೇಕು:

  • ಓದುವ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ನಿರ್ವಹಿಸುವಾಗ, ಅದನ್ನು ಮೊದಲು RAM ನಲ್ಲಿ ಹುಡುಕಲಾಗುತ್ತದೆ; ಹುಡುಕಾಟವು ವಿಫಲವಾದಲ್ಲಿ, ಓದುವಿಕೆಯನ್ನು ನಿರ್ವಹಿಸುವ ಅದೇ ಥ್ರೆಡ್‌ನಿಂದ ಪುಟವನ್ನು ಡಿಸ್ಕ್‌ನಿಂದ RAM ಗೆ ಲೋಡ್ ಮಾಡಲಾಗುತ್ತದೆ.
  • ಬರೆಯುವ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ನಿರ್ವಹಿಸಿದಾಗ, RAM ನಲ್ಲಿನ ಪುಟವನ್ನು ಕೊಳಕು ಎಂದು ಗುರುತಿಸಲಾಗುತ್ತದೆ, ಆದರೆ ಬರೆಯುವಿಕೆಯನ್ನು ನಿರ್ವಹಿಸುವ ಥ್ರೆಡ್‌ನಿಂದ ಪುಟವನ್ನು ತಕ್ಷಣವೇ ಡಿಸ್ಕ್‌ಗೆ ಭೌತಿಕವಾಗಿ ಉಳಿಸಲಾಗುವುದಿಲ್ಲ. ಎಲ್ಲಾ ಕೊಳಕು ಪುಟಗಳನ್ನು ಪ್ರತ್ಯೇಕ ಥ್ರೆಡ್‌ಗಳಲ್ಲಿ ಚೆಕ್‌ಪಾಯಿಂಟ್ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ನಂತರ ಡಿಸ್ಕ್‌ಗೆ ಉಳಿಸಲಾಗುತ್ತದೆ.

ಆದ್ದರಿಂದ ಓದುವ ಕಾರ್ಯಾಚರಣೆಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ:

  • ಧನಾತ್ಮಕ (ಡಿಸ್ಕ್ IO), ಓದುವ ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್ಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿನ ಇಳಿಕೆಯಿಂದಾಗಿ.
  • ನಕಾರಾತ್ಮಕ (ಸಿಪಿಯು), ವಿರಳ ಫೈಲ್ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್ಗೆ ಅಗತ್ಯವಿರುವ ಹೆಚ್ಚುವರಿ ಲೋಡ್ ಕಾರಣ. ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾದ ವಿರಳ ಫೈಲ್ ರಚನೆಯನ್ನು ಉಳಿಸಲು ಹೆಚ್ಚುವರಿ IO ಕಾರ್ಯಾಚರಣೆಗಳು ಇಲ್ಲಿ ಸೂಚ್ಯವಾಗಿ ಗೋಚರಿಸುವ ಸಾಧ್ಯತೆಯಿದೆ (ದುರದೃಷ್ಟವಶಾತ್, ವಿರಳ ಫೈಲ್‌ಗಳು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಎಂಬುದರ ಎಲ್ಲಾ ವಿವರಗಳೊಂದಿಗೆ ನನಗೆ ಪರಿಚಿತವಾಗಿಲ್ಲ).
  • ಋಣಾತ್ಮಕ (CPU), ಪುಟಗಳನ್ನು ಡಿಕಂಪ್ರೆಸ್ ಮಾಡುವ ಅಗತ್ಯತೆಯಿಂದಾಗಿ.
  • ಬರೆಯುವ ಕಾರ್ಯಾಚರಣೆಗಳ ಮೇಲೆ ಯಾವುದೇ ಪರಿಣಾಮವಿಲ್ಲ.
  • ಚೆಕ್‌ಪಾಯಿಂಟ್ ಪ್ರಕ್ರಿಯೆಯ ಮೇಲೆ ಪರಿಣಾಮ (ಇಲ್ಲಿ ಎಲ್ಲವೂ ಓದುವ ಕಾರ್ಯಾಚರಣೆಗಳಿಗೆ ಹೋಲುತ್ತದೆ):
  • ಧನಾತ್ಮಕ (ಡಿಸ್ಕ್ IO), ಲಿಖಿತ ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್ಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿನ ಇಳಿಕೆಯಿಂದಾಗಿ.
  • ವಿರಳ ಫೈಲ್‌ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದರಿಂದ ನಕಾರಾತ್ಮಕ (CPU, ಪ್ರಾಯಶಃ ಡಿಸ್ಕ್ IO).
  • ಋಣಾತ್ಮಕ (CPU), ಪುಟ ಸಂಕೋಚನದ ಅಗತ್ಯತೆಯಿಂದಾಗಿ.

ಸ್ಕೇಲ್‌ನ ಯಾವ ಭಾಗವು ಸ್ಕೇಲ್ ಅನ್ನು ತುದಿ ಮಾಡುತ್ತದೆ? ಇದೆಲ್ಲವೂ ಪರಿಸರದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ, ಆದರೆ ಡಿಸ್ಕ್ ಪುಟ ಸಂಕುಚನವು ಹೆಚ್ಚಿನ ಸಿಸ್ಟಮ್‌ಗಳಲ್ಲಿ ಕಾರ್ಯಕ್ಷಮತೆಯ ಅವನತಿಗೆ ಕಾರಣವಾಗಬಹುದು ಎಂದು ನಾನು ನಂಬಲು ಒಲವು ತೋರುತ್ತೇನೆ. ಇದಲ್ಲದೆ, ಸಂಕೋಚನವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದಾಗ ವಿರಳ ಫೈಲ್‌ಗಳೊಂದಿಗೆ ಇದೇ ವಿಧಾನವನ್ನು ಬಳಸುವ ಇತರ DBMS ಗಳಲ್ಲಿನ ಪರೀಕ್ಷೆಗಳು ಕಾರ್ಯಕ್ಷಮತೆಯಲ್ಲಿ ಕುಸಿತವನ್ನು ತೋರಿಸುತ್ತವೆ.

ಹೇಗೆ ಸಕ್ರಿಯಗೊಳಿಸುವುದು ಮತ್ತು ಕಾನ್ಫಿಗರ್ ಮಾಡುವುದು

ಮೇಲೆ ತಿಳಿಸಿದಂತೆ, ಡಿಸ್ಕ್ ಪೇಜ್ ಕಂಪ್ರೆಷನ್ ಅನ್ನು ಬೆಂಬಲಿಸುವ ಅಪಾಚೆ ಇಗ್ನೈಟ್‌ನ ಕನಿಷ್ಠ ಆವೃತ್ತಿಯು 2.8 ಆಗಿದೆ ಮತ್ತು ಲಿನಕ್ಸ್ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್ ಮಾತ್ರ ಬೆಂಬಲಿತವಾಗಿದೆ. ಈ ಕೆಳಗಿನಂತೆ ಸಕ್ರಿಯಗೊಳಿಸಿ ಮತ್ತು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ:

  • ವರ್ಗ-ಪಥದಲ್ಲಿ ದಹನ-ಸಂಕೋಚನ ಮಾಡ್ಯೂಲ್ ಇರಬೇಕು. ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ, ಇದು ಲಿಬ್ಸ್/ಐಚ್ಛಿಕ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಅಪಾಚೆ ಇಗ್ನೈಟ್ ವಿತರಣೆಯಲ್ಲಿದೆ ಮತ್ತು ವರ್ಗ-ಪಥದಲ್ಲಿ ಸೇರಿಸಲಾಗಿಲ್ಲ. ನೀವು ಡೈರೆಕ್ಟರಿಯನ್ನು ಲಿಬ್‌ಗಳಿಗೆ ಒಂದು ಹಂತದ ಮೇಲಕ್ಕೆ ಚಲಿಸಬಹುದು ಮತ್ತು ನಂತರ ನೀವು ಅದನ್ನು ignite.sh ಮೂಲಕ ಚಲಾಯಿಸಿದಾಗ ಅದು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಕ್ರಿಯಗೊಳಿಸಲ್ಪಡುತ್ತದೆ.
  • ನಿರಂತರತೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬೇಕು (ಮೂಲಕ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ DataRegionConfiguration.setPersistenceEnabled(true)).
  • ಪುಟದ ಗಾತ್ರವು ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್ ಗಾತ್ರಕ್ಕಿಂತ ದೊಡ್ಡದಾಗಿರಬೇಕು (ನೀವು ಅದನ್ನು ಬಳಸಿ ಹೊಂದಿಸಬಹುದು DataStorageConfiguration.setPageSize() ).
  • ಡೇಟಾವನ್ನು ಸಂಕುಚಿತಗೊಳಿಸಬೇಕಾದ ಪ್ರತಿಯೊಂದು ಸಂಗ್ರಹಕ್ಕಾಗಿ, ನೀವು ಸಂಕೋಚನ ವಿಧಾನವನ್ನು ಮತ್ತು (ಐಚ್ಛಿಕವಾಗಿ) ಸಂಕೋಚನ ಮಟ್ಟವನ್ನು (ವಿಧಾನಗಳು) ಕಾನ್ಫಿಗರ್ ಮಾಡಬೇಕು CacheConfiguration.setDiskPageCompression() , CacheConfiguration.setDiskPageCompressionLevel()).

WAL ಸಂಕೋಚನ

ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ

WAL ಎಂದರೇನು ಮತ್ತು ಅದು ಏಕೆ ಬೇಕು? ಬಹಳ ಸಂಕ್ಷಿಪ್ತವಾಗಿ: ಇದು ಪುಟದ ಸಂಗ್ರಹಣೆಯನ್ನು ಅಂತಿಮವಾಗಿ ಬದಲಾಯಿಸುವ ಎಲ್ಲಾ ಈವೆಂಟ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಲಾಗ್ ಆಗಿದೆ. ಪತನದ ಸಂದರ್ಭದಲ್ಲಿ ಚೇತರಿಸಿಕೊಳ್ಳಲು ಇದು ಪ್ರಾಥಮಿಕವಾಗಿ ಅಗತ್ಯವಿದೆ. ಯಾವುದೇ ಕಾರ್ಯಾಚರಣೆಯು ಬಳಕೆದಾರರಿಗೆ ನಿಯಂತ್ರಣವನ್ನು ನೀಡುವ ಮೊದಲು, ಮೊದಲು WAL ನಲ್ಲಿ ಈವೆಂಟ್ ಅನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡಬೇಕು, ಆದ್ದರಿಂದ ವೈಫಲ್ಯದ ಸಂದರ್ಭದಲ್ಲಿ, ಅದನ್ನು ಲಾಗ್‌ನಲ್ಲಿ ಮತ್ತೆ ಪ್ಲೇ ಮಾಡಬಹುದು ಮತ್ತು ಈ ಕಾರ್ಯಾಚರಣೆಗಳಿದ್ದರೂ ಸಹ ಬಳಕೆದಾರರು ಯಶಸ್ವಿ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಪಡೆದ ಎಲ್ಲಾ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಬಹುದು. ಡಿಸ್ಕ್‌ನಲ್ಲಿನ ಪುಟ ಸಂಗ್ರಹಣೆಯಲ್ಲಿ ಪ್ರತಿಬಿಂಬಿಸಲು ಸಮಯವನ್ನು ಹೊಂದಿಲ್ಲ (ಈಗಾಗಲೇ ಪುಟ ಸ್ಟೋರ್‌ಗೆ ನಿಜವಾದ ಬರವಣಿಗೆಯನ್ನು ಪ್ರತ್ಯೇಕ ಥ್ರೆಡ್‌ಗಳ ಮೂಲಕ ಸ್ವಲ್ಪ ವಿಳಂಬದೊಂದಿಗೆ "ಚೆಕ್‌ಪಾಯಿಂಟಿಂಗ್" ಎಂಬ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಮಾಡಲಾಗುತ್ತದೆ ಎಂದು ವಿವರಿಸಲಾಗಿದೆ).

WAL ನಲ್ಲಿನ ನಮೂದುಗಳನ್ನು ತಾರ್ಕಿಕ ಮತ್ತು ಭೌತಿಕವಾಗಿ ವಿಂಗಡಿಸಲಾಗಿದೆ. ಬೂಲಿಯನ್ ಕೀಗಳು ಮತ್ತು ಮೌಲ್ಯಗಳು. ಭೌತಿಕ - ಪುಟ ಅಂಗಡಿಯಲ್ಲಿನ ಪುಟಗಳಿಗೆ ಬದಲಾವಣೆಗಳನ್ನು ಪ್ರತಿಬಿಂಬಿಸುತ್ತದೆ. ಇತರ ಕೆಲವು ಪ್ರಕರಣಗಳಿಗೆ ತಾರ್ಕಿಕ ದಾಖಲೆಗಳು ಉಪಯುಕ್ತವಾಗಿದ್ದರೂ, ಕ್ರ್ಯಾಶ್‌ನ ಸಂದರ್ಭದಲ್ಲಿ ಚೇತರಿಕೆಗೆ ಮಾತ್ರ ಭೌತಿಕ ದಾಖಲೆಗಳು ಬೇಕಾಗುತ್ತವೆ ಮತ್ತು ಕೊನೆಯ ಯಶಸ್ವಿ ಚೆಕ್‌ಪಾಯಿಂಟ್‌ನಿಂದ ಮಾತ್ರ ದಾಖಲೆಗಳು ಬೇಕಾಗುತ್ತವೆ. ಇಲ್ಲಿ ನಾವು ವಿವರವಾಗಿ ಹೋಗುವುದಿಲ್ಲ ಮತ್ತು ಅದು ಏಕೆ ಈ ರೀತಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ವಿವರಿಸುವುದಿಲ್ಲ, ಆದರೆ ಆಸಕ್ತರು ಅಪಾಚೆ ಇಗ್ನೈಟ್ ವಿಕಿಯಲ್ಲಿ ಈಗಾಗಲೇ ಉಲ್ಲೇಖಿಸಿರುವ ಲೇಖನವನ್ನು ಉಲ್ಲೇಖಿಸಬಹುದು: ಇಗ್ನೈಟ್ ಪರ್ಸಿಸ್ಟೆಂಟ್ ಸ್ಟೋರ್ - ಹುಡ್ ಅಡಿಯಲ್ಲಿ.

ಪ್ರತಿ ತಾರ್ಕಿಕ ದಾಖಲೆಗೆ ಹಲವಾರು ಭೌತಿಕ ದಾಖಲೆಗಳಿವೆ. ಅಂದರೆ, ಉದಾಹರಣೆಗೆ, ಸಂಗ್ರಹಕ್ಕೆ ಒಂದು ಪುಟ್ ಕಾರ್ಯಾಚರಣೆಯು ಪುಟದ ಮೆಮೊರಿಯಲ್ಲಿ ಹಲವಾರು ಪುಟಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ (ಡೇಟಾವನ್ನು ಹೊಂದಿರುವ ಪುಟ, ಸೂಚಿಕೆಗಳನ್ನು ಹೊಂದಿರುವ ಪುಟಗಳು, ಉಚಿತ-ಪಟ್ಟಿಗಳನ್ನು ಹೊಂದಿರುವ ಪುಟಗಳು). ಕೆಲವು ಸಂಶ್ಲೇಷಿತ ಪರೀಕ್ಷೆಗಳಲ್ಲಿ, ಭೌತಿಕ ದಾಖಲೆಗಳು WAL ಫೈಲ್‌ನ 90% ವರೆಗೆ ಆಕ್ರಮಿಸಿಕೊಂಡಿರುವುದನ್ನು ನಾನು ಕಂಡುಕೊಂಡಿದ್ದೇನೆ. ಆದಾಗ್ಯೂ, ಅವು ಬಹಳ ಕಡಿಮೆ ಸಮಯಕ್ಕೆ ಬೇಕಾಗುತ್ತವೆ (ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ, ಚೆಕ್‌ಪೋಸ್ಟ್‌ಗಳ ನಡುವಿನ ಮಧ್ಯಂತರವು 3 ನಿಮಿಷಗಳು). ಅದರ ಪ್ರಸ್ತುತತೆಯನ್ನು ಕಳೆದುಕೊಂಡ ನಂತರ ಈ ಡೇಟಾವನ್ನು ತೊಡೆದುಹಾಕಲು ಇದು ತಾರ್ಕಿಕವಾಗಿದೆ. WAL ಸಂಕುಚಿತ ಕಾರ್ಯವಿಧಾನವು ನಿಖರವಾಗಿ ಏನು ಮಾಡುತ್ತದೆ: ಇದು ಭೌತಿಕ ದಾಖಲೆಗಳನ್ನು ತೊಡೆದುಹಾಕುತ್ತದೆ ಮತ್ತು ಜಿಪ್ ಬಳಸಿ ಉಳಿದ ತಾರ್ಕಿಕ ದಾಖಲೆಗಳನ್ನು ಸಂಕುಚಿತಗೊಳಿಸುತ್ತದೆ, ಆದರೆ ಫೈಲ್ ಗಾತ್ರವು ಬಹಳ ಗಮನಾರ್ಹವಾಗಿ ಕಡಿಮೆಯಾಗುತ್ತದೆ (ಕೆಲವೊಮ್ಮೆ ಹತ್ತಾರು ಬಾರಿ).

ಭೌತಿಕವಾಗಿ, WAL ಸ್ಥಿರ ಗಾತ್ರದ (ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ 10MB) ಹಲವಾರು ವಿಭಾಗಗಳನ್ನು (ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ 64) ಒಳಗೊಂಡಿರುತ್ತದೆ, ಇವುಗಳನ್ನು ವೃತ್ತಾಕಾರದ ರೀತಿಯಲ್ಲಿ ತಿದ್ದಿ ಬರೆಯಲಾಗುತ್ತದೆ. ಪ್ರಸ್ತುತ ವಿಭಾಗವನ್ನು ಭರ್ತಿ ಮಾಡಿದ ತಕ್ಷಣ, ಮುಂದಿನ ವಿಭಾಗವನ್ನು ಪ್ರಸ್ತುತ ಎಂದು ನಿಗದಿಪಡಿಸಲಾಗಿದೆ ಮತ್ತು ತುಂಬಿದ ವಿಭಾಗವನ್ನು ಪ್ರತ್ಯೇಕ ಥ್ರೆಡ್ ಮೂಲಕ ಆರ್ಕೈವ್‌ಗೆ ನಕಲಿಸಲಾಗುತ್ತದೆ. WAL ಸಂಕೋಚನವು ಈಗಾಗಲೇ ಆರ್ಕೈವ್ ವಿಭಾಗಗಳೊಂದಿಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಅಲ್ಲದೆ, ಪ್ರತ್ಯೇಕ ಥ್ರೆಡ್ ಆಗಿ, ಇದು ಚೆಕ್‌ಪಾಯಿಂಟ್‌ನ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುತ್ತದೆ ಮತ್ತು ಭೌತಿಕ ದಾಖಲೆಗಳು ಇನ್ನು ಮುಂದೆ ಅಗತ್ಯವಿಲ್ಲದ ಆರ್ಕೈವ್ ವಿಭಾಗಗಳಲ್ಲಿ ಸಂಕೋಚನವನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ.

ಅಪಾಚೆ ಇಗ್ನೈಟ್‌ನಲ್ಲಿ ಡೇಟಾ ಕಂಪ್ರೆಷನ್. Sber ಅವರ ಅನುಭವ

ಕಾರ್ಯಕ್ಷಮತೆಯ ಪರಿಣಾಮ

WAL ಸಂಕೋಚನವು ಪ್ರತ್ಯೇಕ ಥ್ರೆಡ್ ಆಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದರಿಂದ, ನಿರ್ವಹಿಸುತ್ತಿರುವ ಕಾರ್ಯಾಚರಣೆಗಳ ಮೇಲೆ ಯಾವುದೇ ನೇರ ಪರಿಣಾಮ ಬೀರಬಾರದು. ಆದರೆ ಇದು ಇನ್ನೂ CPU (ಸಂಕೋಚನ) ಮತ್ತು ಡಿಸ್ಕ್‌ನಲ್ಲಿ ಹೆಚ್ಚುವರಿ ಹಿನ್ನೆಲೆ ಲೋಡ್ ಅನ್ನು ಇರಿಸುತ್ತದೆ (ಆರ್ಕೈವ್‌ನಿಂದ ಪ್ರತಿ WAL ವಿಭಾಗವನ್ನು ಓದುವುದು ಮತ್ತು ಸಂಕುಚಿತ ವಿಭಾಗಗಳನ್ನು ಬರೆಯುವುದು), ಆದ್ದರಿಂದ ಸಿಸ್ಟಮ್ ಅದರ ಗರಿಷ್ಠ ಸಾಮರ್ಥ್ಯದಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿದ್ದರೆ, ಅದು ಕಾರ್ಯಕ್ಷಮತೆಯ ಅವನತಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ.

ಹೇಗೆ ಸಕ್ರಿಯಗೊಳಿಸುವುದು ಮತ್ತು ಕಾನ್ಫಿಗರ್ ಮಾಡುವುದು

ನೀವು ಆಸ್ತಿಯನ್ನು ಬಳಸಿಕೊಂಡು WAL ಸಂಕೋಚನವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬಹುದು WalCompactionEnabled в DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)) ಅಲ್ಲದೆ, DataStorageConfiguration.setWalCompactionLevel() ವಿಧಾನವನ್ನು ಬಳಸಿಕೊಂಡು, ನೀವು ಡೀಫಾಲ್ಟ್ ಮೌಲ್ಯದೊಂದಿಗೆ (BEST_SPEED) ತೃಪ್ತರಾಗದಿದ್ದರೆ ನೀವು ಸಂಕುಚಿತ ಮಟ್ಟವನ್ನು ಹೊಂದಿಸಬಹುದು.

WAL ಪುಟ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್ ಕಂಪ್ರೆಷನ್

ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ

WAL ದಾಖಲೆಗಳಲ್ಲಿ ತಾರ್ಕಿಕ ಮತ್ತು ಭೌತಿಕವಾಗಿ ವಿಂಗಡಿಸಲಾಗಿದೆ ಎಂದು ನಾವು ಈಗಾಗಲೇ ಕಂಡುಕೊಂಡಿದ್ದೇವೆ. ಪ್ರತಿ ಪುಟಕ್ಕೆ ಪ್ರತಿ ಬದಲಾವಣೆಗೆ, ಪುಟದ ಮೆಮೊರಿಯಲ್ಲಿ ಭೌತಿಕ WAL ದಾಖಲೆಯನ್ನು ರಚಿಸಲಾಗುತ್ತದೆ. ಭೌತಿಕ ದಾಖಲೆಗಳು, ಪ್ರತಿಯಾಗಿ, 2 ಉಪವಿಧಗಳಾಗಿ ವಿಂಗಡಿಸಲಾಗಿದೆ: ಪುಟ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್ ದಾಖಲೆ ಮತ್ತು ಡೆಲ್ಟಾ ದಾಖಲೆ. ಪ್ರತಿ ಬಾರಿ ನಾವು ಪುಟದಲ್ಲಿ ಏನನ್ನಾದರೂ ಬದಲಾಯಿಸುತ್ತೇವೆ ಮತ್ತು ಅದನ್ನು ಶುದ್ಧ ಸ್ಥಿತಿಯಿಂದ ಕೊಳಕು ಸ್ಥಿತಿಗೆ ವರ್ಗಾಯಿಸುತ್ತೇವೆ, ಈ ಪುಟದ ಸಂಪೂರ್ಣ ನಕಲನ್ನು WAL (ಪುಟ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್ ರೆಕಾರ್ಡ್) ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ನಾವು WAL ನಲ್ಲಿ ಕೇವಲ ಒಂದು ಬೈಟ್ ಅನ್ನು ಬದಲಾಯಿಸಿದ್ದರೂ ಸಹ, ದಾಖಲೆಯು ಪುಟದ ಗಾತ್ರಕ್ಕಿಂತ ಸ್ವಲ್ಪ ದೊಡ್ಡದಾಗಿರುತ್ತದೆ. ನಾವು ಈಗಾಗಲೇ ಕೊಳಕು ಪುಟದಲ್ಲಿ ಏನನ್ನಾದರೂ ಬದಲಾಯಿಸಿದರೆ, ನಂತರ WAL ನಲ್ಲಿ ಡೆಲ್ಟಾ ರೆಕಾರ್ಡ್ ರಚನೆಯಾಗುತ್ತದೆ, ಇದು ಪುಟದ ಹಿಂದಿನ ಸ್ಥಿತಿಗೆ ಹೋಲಿಸಿದರೆ ಬದಲಾವಣೆಗಳನ್ನು ಮಾತ್ರ ಪ್ರತಿಬಿಂಬಿಸುತ್ತದೆ, ಆದರೆ ಸಂಪೂರ್ಣ ಪುಟವಲ್ಲ. ಚೆಕ್‌ಪಾಯಿಂಟ್‌ನ ಪ್ರಾರಂಭದ ನಂತರ, ಬಹುತೇಕ ಎಲ್ಲಾ ಭೌತಿಕ ದಾಖಲೆಗಳು ಕೇವಲ ಪುಟಗಳ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್‌ಗಳನ್ನು ಮಾತ್ರ ಒಳಗೊಂಡಿರುತ್ತವೆ (ಚೆಕ್‌ಪಾಯಿಂಟ್ ಪ್ರಾರಂಭವಾದ ತಕ್ಷಣ ಎಲ್ಲಾ ಪುಟಗಳು ಸ್ವಚ್ಛವಾಗಿರುತ್ತವೆ) , ನಂತರ ನಾವು ಮುಂದಿನ ಚೆಕ್‌ಪಾಯಿಂಟ್ ಅನ್ನು ಸಮೀಪಿಸಿದಾಗ, ಡೆಲ್ಟಾ ರೆಕಾರ್ಡ್ ಭಾಗವು ಬೆಳೆಯಲು ಪ್ರಾರಂಭವಾಗುತ್ತದೆ ಮತ್ತು ಮುಂದಿನ ಚೆಕ್‌ಪಾಯಿಂಟ್‌ನ ಆರಂಭದಲ್ಲಿ ಮತ್ತೆ ಮರುಹೊಂದಿಸುತ್ತದೆ. ಕೆಲವು ಸಂಶ್ಲೇಷಿತ ಪರೀಕ್ಷೆಗಳಲ್ಲಿನ ಮಾಪನಗಳು ಭೌತಿಕ ದಾಖಲೆಗಳ ಒಟ್ಟು ಪರಿಮಾಣದಲ್ಲಿ ಪುಟ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್‌ಗಳ ಪಾಲು 90% ತಲುಪುತ್ತದೆ ಎಂದು ತೋರಿಸಿದೆ.

WAL ಪುಟ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್ ಸಂಕೋಚನದ ಕಲ್ಪನೆಯು ಸಿದ್ಧ-ಸಿದ್ಧ ಪುಟ ಸಂಕೋಚನ ಸಾಧನವನ್ನು ಬಳಸಿಕೊಂಡು ಪುಟ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್‌ಗಳನ್ನು ಸಂಕುಚಿತಗೊಳಿಸುವುದು (ಡಿಸ್ಕ್ ಪುಟ ಸಂಕುಚನವನ್ನು ನೋಡಿ). ಅದೇ ಸಮಯದಲ್ಲಿ, WAL ನಲ್ಲಿ, ದಾಖಲೆಗಳನ್ನು ಅನುಬಂಧ-ಮಾತ್ರ ಮೋಡ್‌ನಲ್ಲಿ ಅನುಕ್ರಮವಾಗಿ ಉಳಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್‌ಗಳ ಗಡಿಗಳಿಗೆ ದಾಖಲೆಗಳನ್ನು ಬಂಧಿಸುವ ಅಗತ್ಯವಿಲ್ಲ, ಆದ್ದರಿಂದ ಇಲ್ಲಿ, ಡಿಸ್ಕ್ ಪುಟ ಸಂಕುಚಿತ ಕಾರ್ಯವಿಧಾನದಂತೆ, ನಮಗೆ ವಿರಳ ಫೈಲ್‌ಗಳು ಅಗತ್ಯವಿಲ್ಲ ಎಲ್ಲಾ; ಅದರ ಪ್ರಕಾರ, ಈ ಕಾರ್ಯವಿಧಾನವು OS ಲಿನಕ್ಸ್‌ನಲ್ಲಿ ಮಾತ್ರವಲ್ಲದೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಹೆಚ್ಚುವರಿಯಾಗಿ, ನಾವು ಪುಟವನ್ನು ಎಷ್ಟು ಕುಗ್ಗಿಸಲು ಸಾಧ್ಯವಾಯಿತು ಎಂಬುದು ಇನ್ನು ಮುಂದೆ ನಮಗೆ ಮುಖ್ಯವಲ್ಲ. ನಾವು 1 ಬೈಟ್ ಅನ್ನು ಮುಕ್ತಗೊಳಿಸಿದ್ದರೂ ಸಹ, ಇದು ಈಗಾಗಲೇ ಸಕಾರಾತ್ಮಕ ಫಲಿತಾಂಶವಾಗಿದೆ ಮತ್ತು ಡಿಸ್ಕ್ ಪುಟ ಸಂಕುಚನದಂತೆ ನಾವು ಸಂಕುಚಿತ ಡೇಟಾವನ್ನು WAL ನಲ್ಲಿ ಉಳಿಸಬಹುದು, ಅಲ್ಲಿ ನಾವು 1 ಕ್ಕಿಂತ ಹೆಚ್ಚು ಫೈಲ್ ಸಿಸ್ಟಮ್ ಬ್ಲಾಕ್ ಅನ್ನು ಮುಕ್ತಗೊಳಿಸಿದರೆ ಮಾತ್ರ ಸಂಕುಚಿತ ಪುಟವನ್ನು ಉಳಿಸುತ್ತೇವೆ.

ಪುಟಗಳು ಹೆಚ್ಚು ಸಂಕುಚಿತ ಡೇಟಾ, ಒಟ್ಟು WAL ಪರಿಮಾಣದಲ್ಲಿ ಅವರ ಪಾಲು ತುಂಬಾ ಹೆಚ್ಚಾಗಿದೆ, ಆದ್ದರಿಂದ WAL ಫೈಲ್ ಸ್ವರೂಪವನ್ನು ಬದಲಾಯಿಸದೆಯೇ ನಾವು ಅದರ ಗಾತ್ರದಲ್ಲಿ ಗಮನಾರ್ಹವಾದ ಕಡಿತವನ್ನು ಪಡೆಯಬಹುದು. ತಾರ್ಕಿಕ ದಾಖಲೆಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ಸಂಕೋಚನಕ್ಕೆ ಸ್ವರೂಪದಲ್ಲಿ ಬದಲಾವಣೆ ಮತ್ತು ಹೊಂದಾಣಿಕೆಯ ನಷ್ಟದ ಅಗತ್ಯವಿರುತ್ತದೆ, ಉದಾಹರಣೆಗೆ, ತಾರ್ಕಿಕ ದಾಖಲೆಗಳಲ್ಲಿ ಆಸಕ್ತಿ ಹೊಂದಿರುವ ಬಾಹ್ಯ ಗ್ರಾಹಕರಿಗೆ, ಆದರೆ ಫೈಲ್ ಗಾತ್ರದಲ್ಲಿ ಗಮನಾರ್ಹವಾದ ಕಡಿತಕ್ಕೆ ಕಾರಣವಾಗುವುದಿಲ್ಲ.

ಡಿಸ್ಕ್ ಪೇಜ್ ಕಂಪ್ರೆಷನ್‌ನಂತೆ, WAL ಪುಟ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್ ಕಂಪ್ರೆಷನ್ ZSTD, LZ4, ಸ್ನ್ಯಾಪಿ ಕಂಪ್ರೆಷನ್ ಅಲ್ಗಾರಿದಮ್‌ಗಳು, ಹಾಗೆಯೇ SKIP_GARBAGE ಮೋಡ್ ಅನ್ನು ಬಳಸಬಹುದು.

ಕಾರ್ಯಕ್ಷಮತೆಯ ಪರಿಣಾಮ

WAL ಪುಟ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್ ಸಂಕೋಚನವನ್ನು ನೇರವಾಗಿ ಸಕ್ರಿಯಗೊಳಿಸುವುದರಿಂದ ಪುಟ ಮೆಮೊರಿಗೆ ಡೇಟಾವನ್ನು ಬರೆಯುವ ಥ್ರೆಡ್‌ಗಳ ಮೇಲೆ ಮಾತ್ರ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ, ಅಂದರೆ, ಸಂಗ್ರಹಗಳಲ್ಲಿ ಡೇಟಾವನ್ನು ಬದಲಾಯಿಸುವ ಆ ಥ್ರೆಡ್‌ಗಳು. WAL ನಿಂದ ಭೌತಿಕ ದಾಖಲೆಗಳನ್ನು ಓದುವುದು ಒಮ್ಮೆ ಮಾತ್ರ ಸಂಭವಿಸುತ್ತದೆ, ಕ್ಷಣದಲ್ಲಿ ನೋಡ್ ಅನ್ನು ಪತನದ ನಂತರ ಏರಿಸಲಾಗುತ್ತದೆ (ಮತ್ತು ಅದು ಚೆಕ್ಪಾಯಿಂಟ್ ಸಮಯದಲ್ಲಿ ಬಿದ್ದರೆ ಮಾತ್ರ).

ಇದು ಕೆಳಗಿನ ರೀತಿಯಲ್ಲಿ ಡೇಟಾವನ್ನು ಬದಲಾಯಿಸುವ ಥ್ರೆಡ್‌ಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ: ಡಿಸ್ಕ್‌ಗೆ ಬರೆಯುವ ಮೊದಲು ಪ್ರತಿ ಬಾರಿ ಪುಟವನ್ನು ಸಂಕುಚಿತಗೊಳಿಸುವ ಅಗತ್ಯತೆಯಿಂದಾಗಿ ನಾವು ನಕಾರಾತ್ಮಕ ಪರಿಣಾಮವನ್ನು (ಸಿಪಿಯು) ಪಡೆಯುತ್ತೇವೆ ಮತ್ತು ಮೊತ್ತದಲ್ಲಿನ ಕಡಿತದಿಂದಾಗಿ ಧನಾತ್ಮಕ ಪರಿಣಾಮ (ಡಿಸ್ಕ್ ಐಒ) ಬರೆಯಲಾದ ಡೇಟಾ. ಅಂತೆಯೇ, ಇಲ್ಲಿ ಎಲ್ಲವೂ ಸರಳವಾಗಿದೆ: ಸಿಪಿಯುನಿಂದ ಸಿಸ್ಟಮ್ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸೀಮಿತಗೊಳಿಸಿದರೆ, ನಾವು ಸ್ವಲ್ಪ ಅವನತಿಯನ್ನು ಪಡೆಯುತ್ತೇವೆ, ಅದು ಡಿಸ್ಕ್ I / O ನಿಂದ ಸೀಮಿತವಾಗಿದ್ದರೆ, ನಾವು ಹೆಚ್ಚಳವನ್ನು ಪಡೆಯುತ್ತೇವೆ.

ಪರೋಕ್ಷವಾಗಿ, WAL ಗಾತ್ರವನ್ನು ಕಡಿಮೆ ಮಾಡುವುದರಿಂದ WAL ವಿಭಾಗಗಳನ್ನು ಆರ್ಕೈವ್ ಮತ್ತು WAL ಸಂಕುಚಿತ ಸ್ಟ್ರೀಮ್‌ಗಳಿಗೆ ಡಂಪ್ ಮಾಡುವ (ಧನಾತ್ಮಕವಾಗಿ) ಸ್ಟ್ರೀಮ್‌ಗಳ ಮೇಲೂ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ.

ಸಿಂಥೆಟಿಕ್ ಡೇಟಾವನ್ನು ಬಳಸಿಕೊಂಡು ನಮ್ಮ ಪರಿಸರದಲ್ಲಿ ನೈಜ ಕಾರ್ಯಕ್ಷಮತೆ ಪರೀಕ್ಷೆಗಳು ಸ್ವಲ್ಪ ಹೆಚ್ಚಳವನ್ನು ತೋರಿಸಿದೆ (ಥ್ರೋಪುಟ್ 10% -15% ರಷ್ಟು ಹೆಚ್ಚಾಗಿದೆ, ಸುಪ್ತತೆಯು 10% -15% ರಷ್ಟು ಕಡಿಮೆಯಾಗಿದೆ).

ಹೇಗೆ ಸಕ್ರಿಯಗೊಳಿಸುವುದು ಮತ್ತು ಕಾನ್ಫಿಗರ್ ಮಾಡುವುದು

ಕನಿಷ್ಠ ಅಪಾಚೆ ಇಗ್ನೈಟ್ ಆವೃತ್ತಿ: 2.8. ಈ ಕೆಳಗಿನಂತೆ ಸಕ್ರಿಯಗೊಳಿಸಿ ಮತ್ತು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ:

  • ವರ್ಗ-ಪಥದಲ್ಲಿ ದಹನ-ಸಂಕೋಚನ ಮಾಡ್ಯೂಲ್ ಇರಬೇಕು. ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ, ಇದು ಲಿಬ್ಸ್/ಐಚ್ಛಿಕ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಅಪಾಚೆ ಇಗ್ನೈಟ್ ವಿತರಣೆಯಲ್ಲಿದೆ ಮತ್ತು ವರ್ಗ-ಪಥದಲ್ಲಿ ಸೇರಿಸಲಾಗಿಲ್ಲ. ನೀವು ಡೈರೆಕ್ಟರಿಯನ್ನು ಲಿಬ್‌ಗಳಿಗೆ ಒಂದು ಹಂತದ ಮೇಲಕ್ಕೆ ಚಲಿಸಬಹುದು ಮತ್ತು ನಂತರ ನೀವು ಅದನ್ನು ignite.sh ಮೂಲಕ ಚಲಾಯಿಸಿದಾಗ ಅದು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಕ್ರಿಯಗೊಳಿಸಲ್ಪಡುತ್ತದೆ.
  • ನಿರಂತರತೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬೇಕು (ಮೂಲಕ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ DataRegionConfiguration.setPersistenceEnabled(true)).
  • ಸಂಕೋಚನ ಮೋಡ್ ಅನ್ನು ವಿಧಾನವನ್ನು ಬಳಸಿಕೊಂಡು ಹೊಂದಿಸಬೇಕು DataStorageConfiguration.setWalPageCompression(), ಕಂಪ್ರೆಷನ್ ಅನ್ನು ಡಿಫಾಲ್ಟ್ ಆಗಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ (ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ಮೋಡ್).
  • ಐಚ್ಛಿಕವಾಗಿ, ನೀವು ವಿಧಾನವನ್ನು ಬಳಸಿಕೊಂಡು ಸಂಕೋಚನ ಮಟ್ಟವನ್ನು ಹೊಂದಿಸಬಹುದು DataStorageConfiguration.setWalPageCompression(), ಪ್ರತಿ ಮೋಡ್‌ಗೆ ಮಾನ್ಯವಾದ ಮೌಲ್ಯಗಳ ವಿಧಾನಕ್ಕಾಗಿ ಜಾವಾಡೋಕ್ ಅನ್ನು ನೋಡಿ.

ತೀರ್ಮಾನಕ್ಕೆ

ಅಪಾಚೆ ಇಗ್ನೈಟ್‌ನಲ್ಲಿ ಪರಿಗಣಿಸಲಾದ ಡೇಟಾ ಕಂಪ್ರೆಷನ್ ಕಾರ್ಯವಿಧಾನಗಳನ್ನು ಪರಸ್ಪರ ಸ್ವತಂತ್ರವಾಗಿ ಬಳಸಬಹುದು, ಆದರೆ ಅವುಗಳ ಯಾವುದೇ ಸಂಯೋಜನೆಯು ಸಹ ಸ್ವೀಕಾರಾರ್ಹವಾಗಿದೆ. ಅವರು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಾರೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ನಿಮ್ಮ ಪರಿಸರದಲ್ಲಿ ನಿಮ್ಮ ಕಾರ್ಯಗಳಿಗೆ ಎಷ್ಟು ಸೂಕ್ತವಾಗಿದೆ ಮತ್ತು ಅವುಗಳನ್ನು ಬಳಸುವಾಗ ನೀವು ಏನು ತ್ಯಾಗ ಮಾಡಬೇಕೆಂದು ನಿರ್ಧರಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಡಿಸ್ಕ್ ಪುಟ ಸಂಕೋಚನವನ್ನು ಮುಖ್ಯ ಸಂಗ್ರಹಣೆಯನ್ನು ಕುಗ್ಗಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ ಮತ್ತು ಮಧ್ಯಮ ಸಂಕುಚಿತ ಅನುಪಾತವನ್ನು ನೀಡುತ್ತದೆ. WAL ಪುಟ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್ ಸಂಕೋಚನವು WAL ಫೈಲ್‌ಗಳಿಗೆ ಸರಾಸರಿ ಮಟ್ಟದ ಸಂಕೋಚನವನ್ನು ನೀಡುತ್ತದೆ ಮತ್ತು ಹೆಚ್ಚಾಗಿ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ. WAL ಸಂಕೋಚನವು ಕಾರ್ಯಕ್ಷಮತೆಯ ಮೇಲೆ ಸಕಾರಾತ್ಮಕ ಪರಿಣಾಮವನ್ನು ಬೀರುವುದಿಲ್ಲ, ಆದರೆ ಭೌತಿಕ ದಾಖಲೆಗಳನ್ನು ತೆಗೆದುಹಾಕುವ ಮೂಲಕ WAL ಫೈಲ್‌ಗಳ ಗಾತ್ರವನ್ನು ಸಾಧ್ಯವಾದಷ್ಟು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ