Cơ sở dữ liệu gộp là gì?


Câu trả lời:


217

Nhóm kết nối cơ sở dữ liệu là một phương pháp được sử dụng để giữ kết nối cơ sở dữ liệu mở để người khác có thể sử dụng lại chúng.

Thông thường, mở kết nối cơ sở dữ liệu là một hoạt động tốn kém, đặc biệt nếu cơ sở dữ liệu ở xa. Bạn phải mở các phiên mạng, xác thực, kiểm tra ủy quyền, v.v. Pooling giữ cho các kết nối hoạt động để khi kết nối được yêu cầu sau đó, một trong những kết nối được sử dụng theo sở thích là phải tạo một kết nối khác.

Tham khảo sơ đồ sau cho các đoạn tiếp theo:

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

Ở dạng đơn giản nhất, nó chỉ là một lệnh gọi API tương tự (1) với một lệnh gọi API kết nối mở tương tự như lệnh gọi "thực". Điều này trước tiên kiểm tra nhóm cho một kết nối phù hợp (2) và, nếu có sẵn, đó là cho khách hàng. Nếu không, một cái mới được tạo ra (3).

"Kết nối phù hợp" chỉ là một kết nối đã quyền truy cập vào cơ sở dữ liệu bằng cách sử dụng thông tin chính xác (chẳng hạn như cơ sở dữ liệu, thông tin đăng nhập và có thể cả những thứ khác).

Tương tự, có một lệnh gọi API gần (4) không thực sự gọi kết nối gần thực sự , thay vào đó, nó đặt kết nối vào nhóm (5) để sử dụng sau. Tại một số điểm, các kết nối trong nhóm có thể thực sự bị đóng (6).

Đó là một lời giải thích khá đơn giản. Việc triển khai thực tế có thể xử lý các kết nối đến nhiều máy chủ và nhiều tài khoản người dùng, họ có thể phân bổ trước một số đường cơ sở của kết nối để một số sẵn sàng ngay lập tức và họ thực sự có thể đóng các kết nối cũ khi mô hình sử dụng im lặng.


9
Nơi nào bạn có đồ thị nhỏ đẹp từ đâu?
Adrian Grigore

19
Tôi đã làm nó từ đầu (ngớ ngẩn tôi). Nếu bạn muốn xem một số đồ họa phong nha, hãy xem câu trả lời của zengr.
paxdiablo

1
Nếu có sẵn, nó sẽ được cung cấp cho khách hàng, nếu không, một cái mới sẽ được tạo. Tương tự, có một lệnh gọi API gần như không thực sự gọi kết nối gần thực sự, thay vào đó, nó đặt kết nối vào nhóm để sử dụng sau. Như bạn đề cập đến điều này, tôi có ít câu hỏi. Khi 1000 khách hàng yêu cầu kết nối và không đóng. Vì vậy, 1000 kết nối còn sống trong pool. Điều này sẽ tốt cho hiệu suất pool ?? Và cho tôi biết sự hiểu biết của tôi là ít sai ??
Ye Win

@YeWin, không có âm thanh tốt. Câu hỏi của bạn về 1000 kết nối bị bỏ lại trong nhóm, điều đó có thể xảy ra nhưng thường chỉ khi bạn kết thúc tại một số điểm với 1000 kết nối hoạt động đồng thời. Mặt khác, sẽ có việc sử dụng lại và nó sẽ đạt tới 1000. Về điều đó xảy ra, hãy xem đoạn áp chót của tôi, đặc biệt là "có thể thực sự đóng các kết nối cũ khi mô hình sử dụng im lặng".
paxdiablo

1
@DiegoMariani, chậm hơn nếu tôi làm bằng tay, nhanh hơn nếu tôi cố gắng ép buộc MS Word để làm cho nó dễ dàng hơn :-)
paxdiablo

104

Hình ảnh nói lên hàng ngàn từ (paxdiablo đã đưa ra một mô tả tuyệt vời):

văn bản thay thế

Nguồn


35
Và rõ ràng, những hình ảnh đẹp cũng nói lên vài trăm tác phẩm nghệ thuật ASCII :-)
paxdiablo

@sagar vui lòng chọn câu trả lời mà bạn thấy là hữu ích nhất. Bạn không có hồ sơ chấp nhận.
zengr

1
Tôi thấy 4 kết nối trong Pool. Số kết nối bị hạn chế trong nhóm này theo loại nhóm ?? Hoặc điều gì sẽ xảy ra khi kết nối không miễn phí trong Pool? Khách hàng cần chờ kết nối miễn phí ??
Ye Win

1
@DEADEND Nó thực sự phụ thuộc vào cách nhóm kết nối được triển khai. Hầu hết các nhóm tạo ra một kết nối mới khi các kết nối đạt đến công suất tối đa. Điều này có thể tiếp tục phát triển cho đến khi db đạt đến ngưỡng. Trong một số trường hợp (như oracle jdbc), bạn có thể chỉ định "kích thước ban đầu" và "kích thước tối đa" trong quá trình xây dựng hồ bơi.
zengr

2
Thật không may, hình ảnh không nói lên điều quan trọng nhất. Đó là: Tại sao việc giữ 10, 20, 30, ... số lượng kết nối được mở sẽ ít tốn kém hơn cho bộ nhớ và hiệu năng hệ thống tổng thể so với việc mở một kết nối khi được yêu cầu? Sao nó có thể? 30 so với 1 là ít tốn kém hơn? Làm sao?
Màu xanh lá cây

16

Như tên cho thấy. Nếu một vài người muốn bơi, họ có thể bơi trong cùng một bể bơi, điều đó có thực sự có ý nghĩa khi xây dựng một bể bơi mới mỗi khi có ai đó thêm vào không? Thời gian và chi phí là ưu tiên hàng đầu.


7

Nhóm kết nối cơ sở dữ liệu chỉ đơn giản là lưu trữ kết nối vào cơ sở dữ liệu để chúng có thể được sử dụng lại vào lần tới để giảm chi phí thiết lập kết nối mới mỗi lần chúng tôi muốn kết nối với cơ sở dữ liệu.



1

Khái niệm Pooling kết nối không chỉ trong Java mà trên nhiều ngôn ngữ lập trình. Tạo một đối tượng kết nối mới rất tốn kém vì vậy một số lượng kết nối cố định được tạo và duy trì trong vòng đời tạo ra một nhóm ảo Java Chỉ cần ( http://javajust.com/javaques.html ) xem câu hỏi 14 trên trang này

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.