Cơ sở dữ liệu shending vs phân vùng


166

Tôi đã đọc về kiến ​​trúc có thể mở rộng gần đây. Trong bối cảnh đó, hai từ tiếp tục hiển thị liên quan đến cơ sở dữ liệu là shendingphân vùng . Tôi nhìn lên mô tả nhưng cuối cùng vẫn bối rối.

Các chuyên gia tại stackoverflow có thể giúp tôi có được những điều cơ bản không?

  • Sự khác biệt giữa shendingphân vùng là gì?
  • Có đúng là 'tất cả các cơ sở dữ liệu được phân chia về cơ bản được phân vùng (trên các nút khác nhau), nhưng tất cả các cơ sở dữ liệu được phân vùng không nhất thiết phải được phân chia' ?

digitalocean.com/community/tutorials/ trộm điều này có thể giúp ích.
mchawre

Câu trả lời:


130

Phân vùng là một thuật ngữ chung để phân chia dữ liệu giữa các bảng hoặc cơ sở dữ liệu. Shending là một loại phân vùng cụ thể, một phần của cái được gọi là phân vùng ngang.

Tại đây, bạn sao chép lược đồ trên (thông thường) nhiều phiên bản hoặc máy chủ, sử dụng một số loại logic hoặc mã định danh để biết trường hợp hoặc máy chủ nào cần tìm dữ liệu. Một định danh loại này thường được gọi là "Khóa Shard".

Một logic phổ biến, không có khóa là sử dụng bảng chữ cái để phân chia dữ liệu. AD là ví dụ 1, EG là ví dụ 2, v.v. Dữ liệu khách hàng rất phù hợp cho việc này, nhưng sẽ bị sai lệch một chút về kích thước giữa các phiên bản nếu việc phân vùng không tính đến việc một số chữ cái phổ biến hơn các chữ cái khác.

Một kỹ thuật phổ biến khác là sử dụng hệ thống đồng bộ hóa khóa hoặc logic để đảm bảo các khóa duy nhất trong các phiên bản.

Một ví dụ nổi tiếng bạn có thể nghiên cứu là cách Instagram giải quyết phân vùng của họ trong những ngày đầu (xem liên kết bên dưới). Họ bắt đầu phân vùng trên rất ít máy chủ, sử dụng Postgres để phân chia dữ liệu từ việc di chuyển. Tôi tin rằng đó là vài ngàn mảnh vỡ logic trên vài mảnh vật lý đó. Đọc bài viết tuyệt vời của họ từ năm 2012 tại đây: Instagram Engineering - Shending & ID

Cũng xem tại đây: http://www.quora.com/Whats-the-difference-b between-shending-and-partition


16
Shending là một loại HP . Nó không phải là HP.
NoChance 27/12/13

1
Tôi có đúng không khi nghĩ phân vùng ngang chỉ có nghĩa là chia các hàng ra khỏi một bảng thành nhiều bảng phụ (có thể trong cùng một lược đồ hoặc cơ sở dữ liệu.) Trong khi shending là phân vùng theo chiều ngang, đặt các bảng phụ vào các lược đồ riêng biệt trong một cơ sở dữ liệu hoặc vào các trường hợp cơ sở dữ liệu riêng biệt trên các máy riêng biệt. Hay không?
Jonathan Hartley

48

Có vẻ như điều này trả lời cả câu hỏi của bạn:

Phân vùng ngang chia một hoặc nhiều bảng theo hàng, thường là trong một thể hiện duy nhất của lược đồ và máy chủ cơ sở dữ liệu. Nó có thể cung cấp một lợi thế bằng cách giảm kích thước chỉ mục (và do đó nỗ lực tìm kiếm) miễn là có một cách rõ ràng, mạnh mẽ, rõ ràng để xác định trong đó một hàng cụ thể sẽ được tìm thấy, mà không cần phải tìm kiếm chỉ mục, ví dụ: cổ điển ví dụ về các bảng 'UsersEast' và 'UsersWest', nơi mã zip của họ đã cho biết nơi họ sẽ được tìm thấy.

Shending vượt xa điều này: nó phân vùng (các) bảng có vấn đề theo cùng một cách, nhưng nó thực hiện điều này qua nhiều trường hợp của lược đồ. Lợi thế rõ ràng là tải tìm kiếm cho bảng được phân vùng lớn hiện có thể được phân chia trên nhiều máy chủ (logic hoặc vật lý), không chỉ nhiều chỉ mục trên cùng một máy chủ logic.

Nguồn: Wiki-Shard .

Shending là quá trình lưu trữ các bản ghi dữ liệu trên nhiều máy và là cách tiếp cận của MongoDB để đáp ứng nhu cầu tăng trưởng dữ liệu. Khi kích thước của dữ liệu tăng lên, một máy có thể không đủ để lưu trữ dữ liệu cũng như không cung cấp thông lượng đọc và ghi chấp nhận được. Shending giải quyết vấn đề với tỷ lệ ngang. Với shending, bạn thêm nhiều máy hơn để hỗ trợ tăng trưởng dữ liệu và nhu cầu của hoạt động đọc và ghi.

Nguồn: MongoDB .


41

Tôi cũng đã đi sâu vào vấn đề này và mặc dù cho đến nay tôi vẫn tham khảo về vấn đề này, có một vài sự kiện chính mà tôi đã thu thập và những điểm mà tôi muốn chia sẻ:

Một phân vùng là một bộ phận của một cơ sở dữ liệu logic hoặc các yếu tố cấu thành của nó thành các phần độc lập riêng biệt. Phân vùng cơ sở dữ liệu thường được thực hiện vì lý do quản lý, hiệu suất hoặc tính khả dụng, như để cân bằng tải.

https://en.wikipedia.org/wiki/Partition_(database)

Shending là một loại phân vùng, chẳng hạn như Phân vùng ngang (HP)

Ngoài ra còn có Phân vùng dọc (VP) theo đó bạn chia một bảng thành các phần nhỏ hơn khác nhau. Chuẩn hóa cũng liên quan đến việc phân chia các cột này qua các bảng, nhưng phân vùng dọc vượt xa các cột đó và phân vùng ngay cả khi đã được chuẩn hóa.

https://en.wikipedia.org/wiki/Shard_(database_arch architecture)

Tôi thực sự thích câu trả lời của Tony Baco trên Quora nơi anh ấy khiến bạn phải suy nghĩ về mặt lược đồ (thay vì cột và hàng). Anh ấy khẳng định rằng...

" Phân vùng ngang ", hoặc shending, đang sao chép [sao chép] lược đồ, sau đó phân chia dữ liệu dựa trên khóa shard.

" Phân vùng dọc " liên quan đến việc phân chia lược đồ (và dữ liệu đi cùng cho chuyến đi).

https://www.quora.com/Whats-the-difference-b between-shending-DB-tables-and-partitioning-them

Hướng dẫn phân vùng cơ sở dữ liệu của Oracle có một số số liệu hay. Tôi đã sao chép một vài trích đoạn từ bài báo.

https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htmlm

Khi phân vùng bảng

Dưới đây là một số gợi ý khi phân vùng bảng:

  • Các bảng lớn hơn 2 GB phải luôn được coi là ứng cử viên để phân vùng.
  • Các bảng chứa dữ liệu lịch sử, trong đó dữ liệu mới được thêm vào phân vùng mới nhất. Một ví dụ điển hình là một bảng lịch sử trong đó chỉ có dữ liệu của tháng hiện tại mới có thể cập nhật và 11 tháng còn lại chỉ được đọc.
  • Khi nội dung của bảng cần được phân phối trên các loại thiết bị lưu trữ khác nhau.

Cắt tỉa phân vùng

Cắt tỉa phân vùng là cách đơn giản nhất và cũng là phương tiện đáng kể nhất để cải thiện hiệu suất bằng cách sử dụng phân vùng. Cắt tỉa phân vùng thường có thể cải thiện hiệu suất truy vấn theo một số bậc độ lớn. Ví dụ: giả sử một ứng dụng chứa bảng Đơn hàng chứa bản ghi lịch sử của các đơn hàng và bảng này đã được phân vùng theo tuần. Một truy vấn yêu cầu các đơn đặt hàng trong một tuần sẽ chỉ truy cập vào một phân vùng duy nhất của bảng Đơn hàng. Nếu bảng Đơn hàng có 2 năm dữ liệu lịch sử, thì truy vấn này sẽ truy cập vào một phân vùng thay vì 104 phân vùng. Truy vấn này có khả năng thực thi nhanh hơn 100 lần chỉ vì cắt tỉa phân vùng.

Chiến lược phân vùng

  • Phạm vi
  • Băm
  • Danh sách

Bạn có thể đọc văn bản của họ và hình dung hình ảnh của họ giải thích mọi thứ khá tốt.

Và cuối cùng, điều quan trọng là phải hiểu rằng cơ sở dữ liệu cực kỳ tốn tài nguyên:

  • CPU
  • Đĩa
  • Tôi / O
  • Ký ức

Nhiều DBA sẽ phân vùng trên cùng một máy, trong đó các phân vùng sẽ chia sẻ tất cả các tài nguyên nhưng cung cấp sự cải tiến trong đĩa và I / O bằng cách chia nhỏ dữ liệu và / hoặc chỉ mục.

Trong khi các chiến lược khác sẽ sử dụng kiến ​​trúc "không chia sẻ gì", trong đó các phân đoạn sẽ nằm trên các đơn vị tính toán riêng biệt và riêng biệt, có 100% CPU, đĩa, I / O và bộ nhớ cho chính nó. Cung cấp tập hợp các lợi thế và sự phức tạp của riêng nó.

https://en.wikipedia.org/wiki/Shared_noth_arch architecture


"" Phân vùng ngang "hoặc shending, đang sao chép [sao chép] lược đồ, sau đó phân chia dữ liệu dựa trên khóa shard." - đây là tautological.
8bitjunkie

Vì vậy, có một tấm gương, và nó bị phân mảnh, do đó từ nguyên.
mckenzm

5

Xem xét Bảng trong cơ sở dữ liệu với 1 triệu hàng và 100 cột Trong Phân vùng, bạn có thể chia bảng thành 2 hoặc nhiều bảng có thuộc tính như:

  1. 0,4 triệu hàng (bảng1), 0,6 triệu hàng (bảng2)

  2. 1 triệu hàng & 60 cột (bảng1) và 1 triệu hàng & 40 cột (bảng2)

    Có thể có nhiều trường hợp như thế

Đây là phân vùng chung

Nhưng Shending chỉ đề cập đến trường hợp thứ nhất khi chúng ta đang phân chia dữ liệu trên cơ sở các hàng. Nếu chúng ta chia bảng thành nhiều bảng, chúng ta cần duy trì nhiều bản sao tương tự của lược đồ vì bây giờ chúng ta có nhiều bảng.


1

Shending trong một trường hợp đặc biệt của phân vùng ngang , khi phân vùng trải dài trên nhiều trường hợp cơ sở dữ liệu. Nếu một cơ sở dữ liệu bị loại bỏ, điều đó có nghĩa là nó được phân vùng theo định nghĩa.


1

Khi nói về phân vùng xin vui lòng không sử dụng thuật ngữ sao chép hoặc nhân rộng. Nhân rộng là một khái niệm khác và nằm ngoài phạm vi của trang này. Khi chúng ta nói về phân vùng thì từ tốt hơn là phân chia và khi chúng ta nói về shending thì từ tốt hơn được phân phối. Trong phân vùng (thông thường và theo cách hiểu thông thường không phải lúc nào), các hàng của bảng tập dữ liệu lớn được chia thành hai hoặc nhiều nhóm khác nhau (không chia sẻ bất kỳ hàng nào). Bạn có thể gọi mỗi nhóm một phân vùng. Các nhóm này hoặc tất cả các phân vùng vẫn nằm dưới sự kiểm soát của một lần đối tượng RDMB và điều này hoàn toàn hợp lý. Cơ sở của mỗi nhóm có thể là hàm băm hoặc phạm vi hoặc vv Nếu bạn có dữ liệu mười năm trong một bảng thì bạn có thể lưu trữ từng dữ liệu của năm trong một phân vùng riêng và điều này có thể đạt được bằng cách đặt ranh giới phân vùng trên cơ sở một cột không null CREATE_DATE. Khi bạn truy vấn db thì nếu bạn chỉ định ngày tạo trong khoảng từ 01-01-1999 đến 31-12-2000 thì chỉ có hai phân vùng sẽ được nhấn và nó sẽ được tuần tự. Tôi đã làm tương tự trên DB cho hàng tỷ bản ghi + và thời gian sql lên tới 50 triệu từ 30 giây bằng cách sử dụng tất cả các chỉ số, v.v. Shending là bạn lưu trữ mỗi phân vùng trên một nút / máy khác nhau. Bây giờ tìm kiếm bên trong các phân vùng / phân đoạn có thể xảy ra song song.


0

Phân vùng ngang khi được chuyển sang thể hiện cơ sở dữ liệu khác * trở thành phân đoạn cơ sở dữ liệu .

Ví dụ cơ sở dữ liệu có thể trên cùng một máy hoặc trên một máy khác.

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.