การรวมฐานข้อมูลคืออะไร?


คำตอบ:


217

การรวมการเชื่อมต่อฐานข้อมูลเป็นวิธีการที่ใช้เพื่อให้การเชื่อมต่อฐานข้อมูลเปิดอยู่เพื่อให้ผู้อื่นสามารถใช้ซ้ำได้

โดยปกติแล้วการเปิดการเชื่อมต่อฐานข้อมูลเป็นการดำเนินการที่มีราคาแพงโดยเฉพาะอย่างยิ่งหากฐานข้อมูลอยู่ในระยะไกล คุณต้องเปิดเซสชันเครือข่ายตรวจสอบสิทธิ์ตรวจสอบการอนุญาตและอื่น ๆ การรวมกลุ่มช่วยให้การเชื่อมต่อใช้งานได้ดังนั้นเมื่อมีการร้องขอการเชื่อมต่อในภายหลังหนึ่งในการเชื่อมต่อที่ใช้งานอยู่จะถูกใช้ตามความต้องการเพื่อที่จะต้องสร้างการเชื่อมต่อใหม่

อ้างถึงแผนภาพต่อไปนี้สำหรับสองสามย่อหน้าถัดไป:

  +---------+
  |         |
  | Clients |
+---------+ |
|         |-+  (1)   +------+   (3)    +----------+
| Clients | ===#===> | Open | =======> | RealOpen |
|         |    |     +------+          +----------+
+---------+    |         ^
               |         | (2)
               |     /------\
               |     | Pool |
               |     \------/
           (4) |         ^
               |         | (5)
               |     +-------+   (6)   +-----------+
               #===> | Close | ======> | RealClose |
                     +-------+         +-----------+

ในรูปแบบที่ง่ายที่สุดมันเป็นเพียงการเรียก API ที่คล้ายกัน (1) กับการเรียก API การเชื่อมต่อแบบเปิดซึ่งคล้ายกับ "ของจริง" ขั้นแรกนี้จะตรวจสอบพูลสำหรับการเชื่อมต่อที่เหมาะสม (2) และหากมีให้ใช้งานจะมอบให้กับไคลเอ็นต์ มิฉะนั้นจะมีการสร้างรายการใหม่ (3)

A "การเชื่อมต่อที่เหมาะสม" เป็นเพียงหนึ่งที่มีอยู่แล้วมีการเข้าถึงฐานข้อมูลโดยใช้ข้อมูลที่ถูกต้อง (เช่นฐานข้อมูลเช่นข้อมูลประจำตัวและสิ่งที่อาจเป็นไปได้อื่น ๆ )

ในทำนองเดียวกันมีการเรียก API แบบปิด (4) ซึ่งไม่ได้เรียกการเชื่อมต่อแบบปิดจริงแต่เป็นการเชื่อมต่อลงในพูล (5) เพื่อใช้ในภายหลัง ในบางจุดการเชื่อมต่อในสระว่ายน้ำอาจถูกปิดจริง (6)

นั่นเป็นคำอธิบายที่ค่อนข้างง่าย การใช้งานจริงอาจสามารถจัดการการเชื่อมต่อไปยังเซิร์ฟเวอร์หลายเครื่องและบัญชีผู้ใช้หลายบัญชีได้พวกเขาอาจจัดสรรการเชื่อมต่อพื้นฐานบางส่วนไว้ล่วงหน้าเพื่อให้บางส่วนพร้อมใช้งานทันทีและอาจปิดการเชื่อมต่อแบบเก่าเมื่อรูปแบบการใช้งานเงียบลง


9
คุณมีกราฟเล็ก ๆ ที่สวยงามจากที่ไหน?
Adrian Grigore

19
ฉันทำตั้งแต่เริ่มต้น (โง่ฉัน) หากคุณต้องการดูกราฟิกที่ดีลองดูคำตอบของ zengr
paxdiablo

1
หากมีให้ใช้งานจะมอบให้กับไคลเอ็นต์มิฉะนั้นจะมีการสร้างใหม่ในทำนองเดียวกันมีการเรียก API แบบปิดซึ่งไม่ได้เรียกการเชื่อมต่อแบบปิดจริง แต่จะนำการเชื่อมต่อไปไว้ในพูลเพื่อใช้ในภายหลัง ตามที่คุณพูดถึงนี้ฉันมีคำถามเล็กน้อย เมื่อ 1,000 ไคลเอนต์ร้องขอการเชื่อมต่อและไม่ปิด ดังนั้นการเชื่อมต่อ 1,000 ครั้งจึงมีชีวิตอยู่ในพูลสิ่งนี้จะดีต่อประสิทธิภาพของพูล และแจ้งให้เราทราบความเข้าใจของฉันผิดเล็กน้อย ??
Ye Win

@YeWin ไม่ว่าจะฟังดูดี ถามคำถามของคุณเกี่ยวกับการเชื่อมต่อ 1,000 รายการที่เหลืออยู่ในพูลซึ่งอาจเกิดขึ้นได้ แต่โดยทั่วไปแล้วก็ต่อเมื่อคุณจบลงด้วยการเชื่อมต่อที่ใช้งานพร้อมกัน 1,000 รายการ มิฉะนั้นจะมีการใช้ซ้ำและจะไม่ถึง 1,000 ในแง่ของเหตุการณ์นั้นโปรดดูย่อหน้าสุดท้ายของฉันโดยเฉพาะอย่างยิ่ง "อาจปิดการเชื่อมต่อเก่าเมื่อรูปแบบการใช้งานเงียบลง" บิต
paxdiablo

1
@DiegoMariani ช้ากว่าที่ฉันจะทำด้วยมือเร็วกว่าถ้าฉันพยายามบีบบังคับ MS Word เพื่อให้ง่ายขึ้น :-)
paxdiablo

105

รูปภาพพูดได้เป็นพันคำ (paxdiablo ให้คำอธิบายที่ยอดเยี่ยม):

ข้อความแสดงแทน

แหล่ง


35
และเห็นได้ชัดว่าภาพที่ดีนั้นพูดถึงศิลปะ ASCII ไม่กี่ร้อยชิ้นเช่นกัน :-)
paxdiablo

@sagar โปรดเลือกคำตอบที่คุณคิดว่ามีประโยชน์มากที่สุด คุณไม่มีบันทึกการยอมรับ
zengr

1
ฉันเห็นการเชื่อมต่อ 4 รายการในพูลดังนั้นหมายเลขการเชื่อมต่อจึงถูก จำกัด ในพูลนี้ตามประเภทการรวมกลุ่ม ?? หรือจะเกิดอะไรขึ้นเมื่อการเชื่อมต่อไม่ว่างในพูล? ลูกค้าต้องรอการเชื่อมต่อฟรี ??
Ye Win

1
@DEADEND ขึ้นอยู่กับวิธีการใช้พูลการเชื่อมต่อ พูลส่วนใหญ่สร้างการเชื่อมต่อใหม่เมื่อการเชื่อมต่อถึงขีดความสามารถสูงสุด สิ่งนี้สามารถเติบโตต่อไปได้จนกว่าฐานข้อมูลจะถึงเกณฑ์ ในบางกรณี (เช่น oracle jdbc) คุณสามารถระบุ "ขนาดเริ่มต้น" และ "ขนาดสูงสุด" ในระหว่างการสร้างสระว่ายน้ำได้
zengr

2
น่าเสียดายที่ภาพไม่ได้บอกว่าสิ่งที่สำคัญที่สุด นั่นคือ: เหตุใดการรักษา 10, 20, 30, ... จำนวนการเชื่อมต่อที่เปิดจึงมีค่าใช้จ่ายน้อยกว่าสำหรับหน่วยความจำและประสิทธิภาพโดยรวมของระบบมากกว่าการเปิดการเชื่อมต่อเดียวเมื่อจำเป็น จะเป็นไปได้อย่างไร? 30 กับ 1 มีค่าใช้จ่ายน้อยกว่าหรือไม่? อย่างไร?
กรีน

16

ตามชื่อ. หากมีคนอยากว่ายน้ำเพียงไม่กี่คนก็สามารถว่ายน้ำในสระเดียวกันได้หรือไม่ที่จะสร้างสระว่ายน้ำใหม่ทุกครั้งที่มีคนเพิ่มเข้ามา เวลาและต้นทุนเป็นสิ่งสำคัญ


7

การรวมการเชื่อมต่อฐานข้อมูลเป็นเพียงการแคชการเชื่อมต่อกับฐานข้อมูลเพื่อให้สามารถใช้ซ้ำได้ในครั้งต่อไปเพื่อลดต้นทุนในการสร้างการเชื่อมต่อใหม่ทุกครั้งที่เราต้องการเชื่อมต่อกับฐานข้อมูล



1

แนวคิด Connection Pooling ไม่เพียง แต่ใน Java เท่านั้น แต่ยังครอบคลุมภาษาโปรแกรมอีกมากมาย การสร้างอ็อบเจ็กต์การเชื่อมต่อใหม่มีค่าใช้จ่ายสูงดังนั้นจึงมีการสร้างและดูแลการเชื่อมต่อจำนวนคงที่ในวงจรชีวิตการสร้างพูลเสมือน Java Just ( http://javajust.com/javaques.html ) ดูคำถาม 14 ในหน้านี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.