Shending là gì và tại sao nó quan trọng?


196

Tôi nghĩ rằng tôi hiểu rằng shending sẽ đưa dữ liệu bị cắt của bạn (các mảnh vỡ) vào một cách dễ dàng để đối phó với tổng hợp có ý nghĩa trong bối cảnh. Điều này có đúng không?

Cập nhật : Tôi đoán tôi đang vật lộn ở đây. Theo tôi, tầng ứng dụng không nên xác định nơi lưu trữ dữ liệu. Tốt nhất nên là shard client của một số loại. Cả hai câu trả lời trả lời những gì nhưng không phải là lý do tại sao nó là khía cạnh quan trọng. Nó có ý nghĩa gì ngoài việc đạt được hiệu suất rõ ràng? Những lợi ích này có đủ để bù đắp cho vi phạm MVC không? Là shending chủ yếu quan trọng trong các ứng dụng quy mô rất lớn hoặc nó áp dụng cho các ứng dụng quy mô nhỏ hơn?


1
Một trong những hội thảo trên web này có hữu ích không? vimeo.com/26742356 slideshare.net/rightscale/... vimeo.com/32541189

Câu trả lời:


193

Shending chỉ là một tên gọi khác của "phân vùng ngang" của cơ sở dữ liệu. Bạn có thể muốn tìm kiếm cụm từ đó để làm cho nó rõ ràng hơn.

Từ Wikipedia :

Phân vùng ngang là một nguyên tắc thiết kế, theo đó các hàng của bảng cơ sở dữ liệu được giữ riêng, thay vì chia theo các cột (như để chuẩn hóa). Mỗi phân vùng tạo thành một phần của phân đoạn, có thể lần lượt được đặt trên một máy chủ cơ sở dữ liệu riêng hoặc vị trí thực tế. Ưu điểm là số lượng hàng trong mỗi bảng được giảm (điều này làm giảm kích thước chỉ mục, do đó cải thiện hiệu suất tìm kiếm). Nếu shending dựa trên một số khía cạnh thực tế của dữ liệu (ví dụ: khách hàng châu Âu so với khách hàng Mỹ) thì có thể dễ dàng suy ra tư cách thành viên shard thích hợp và chỉ truy vấn phân đoạn có liên quan.

Một số thông tin khác về shending:

Thứ nhất, mỗi máy chủ cơ sở dữ liệu giống hệt nhau, có cùng cấu trúc bảng. Thứ hai, các bản ghi dữ liệu được phân chia hợp lý trong cơ sở dữ liệu được phân chia. Không giống như cơ sở dữ liệu được phân vùng, mỗi bản ghi dữ liệu hoàn chỉnh chỉ tồn tại trong một phân đoạn (trừ khi có phản chiếu để sao lưu / dự phòng) với tất cả các hoạt động CRUD được thực hiện chỉ trong cơ sở dữ liệu đó. Bạn có thể không thích thuật ngữ được sử dụng, nhưng điều này thể hiện một cách khác để tổ chức cơ sở dữ liệu logic thành các phần nhỏ hơn.

Cập nhật: Bạn sẽ không phá vỡ MVC. Công việc xác định phân đoạn chính xác nơi lưu trữ dữ liệu sẽ được thực hiện trong suốt bởi lớp truy cập dữ liệu của bạn. Ở đó bạn sẽ phải xác định phân đoạn chính xác dựa trên các tiêu chí mà bạn đã sử dụng để bảo vệ cơ sở dữ liệu của mình. (Vì bạn phải phân chia thủ công cơ sở dữ liệu thành một số phân đoạn khác nhau dựa trên một số khía cạnh cụ thể của ứng dụng của bạn.) Sau đó, bạn phải cẩn thận khi tải và lưu trữ dữ liệu từ / vào cơ sở dữ liệu để sử dụng phân đoạn chính xác.

Có thể ví dụ này với mã Java làm cho nó rõ ràng hơn một chút (đó là về các mảnh Hibernate dự án ), cách thức này sẽ hoạt động trong một kịch bản trong thế giới thực.

Để giải quyết " why sharding": Chủ yếu chỉ dành cho các ứng dụng quy mô lớn, có nhiều dữ liệu. Đầu tiên, nó giúp giảm thiểu thời gian phản hồi cho các truy vấn cơ sở dữ liệu. Thứ hai, bạn có thể sử dụng các máy "cấp thấp" rẻ hơn để lưu trữ dữ liệu của mình, thay vì một máy chủ lớn, có thể không còn đủ nữa.


1
Hãy tha thứ cho tôi nhưng cơ sở dữ liệu không nên đưa ra quyết định về nơi lưu trữ dữ liệu. Điều này có ảnh hưởng đến mã trên tầng ứng dụng không?
ojblass

6
Từ lâu tôi đã cố gắng hiểu nó khác với phân vùng ngang như thế nào và liên kết trong câu trả lời của bạn chứng tỏ không có sự khác biệt. Như ai đó đã nói trong các bình luận cho bài đăng của Theo Schlossnagle, "... Nếu bạn đến từ văn hóa cơ sở dữ liệu truyền thống, việc phân vùng ngang của bạn, nếu bạn đến từ một người
sùng bái

@andreister Từ những gì tôi đang đọc, shending khác biệt về mặt khái niệm ở chỗ nó được xác định bằng cách chia tỷ lệ ngang qua nhiều nút logic hoặc vật lý (trong trường hợp tôi hiểu (myQuery) nhiều cơ sở dữ liệu, rất có thể nằm trên phần cứng logic khác nhau). Phân vùng ngang là một thuật ngữ ít cụ thể hơn, trong đó "Shending" là một tập hợp con. Một lần nữa, sử dụng myQuery làm ví dụ, một phân vùng myQuery được xử lý bởi một cá thể db duy nhất, nó trong suốt 100% cho ứng dụng. Một cách tiếp cận shending sẽ liên quan đến một proxy hoặc một ứng dụng thông minh chọn trường hợp nào.
NateDSaint

Theo wikipedia "Mỗi phân vùng riêng lẻ được gọi là phân đoạn cơ sở dữ liệu hoặc cơ sở dữ liệu." Khác một chút so với văn bản trong câu trả lời có nội dung "Mỗi phân vùng tạo thành một phần của phân đoạn".
Kevin Wheeler

Bài viết wiki mà bạn tham chiếu tạo ra sự khác biệt nhỏ giữa hai thuật ngữ đó. 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. / *** / 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 phiên bản tiềm năng của lược đồ. vi.wikipedia.org/wiki/ từ
Peeter Kokk

38

Nếu bạn có truy vấn tới DBMS mà địa phương khá hạn chế (giả sử, người dùng chỉ kích hoạt lựa chọn với 'where username = $ my_username') thì nên đặt tất cả tên người dùng bắt đầu bằng AM trên một máy chủ và tất cả từ New Zealand mặt khác. Bằng cách này, bạn có được gần quy mô tuyến tính cho một số truy vấn.

Câu chuyện dài : Shending về cơ bản là quá trình phân phối các bảng trên các máy chủ khác nhau để cân bằng tải cho cả hai.

Tất nhiên, thực tế nó phức tạp hơn nhiều. :)


Vì vậy, shending ảnh hưởng đến thiết kế dữ liệu bạn đang lưu trữ ... xin lỗi nếu tôi không hiểu lắm.
ojblass

Đây không phải là một phân vùng ngang?
harunurhan

18

Shending là phân vùng cơ sở dữ liệu theo chiều ngang ( hàng khôn ngoan ) trái ngược với phân vùng dọc ( cột khôn ngoan ) là Chuẩn hóa . Nó phân tách các cơ sở dữ liệu rất lớn thành các phần nhỏ hơn, nhanh hơn và dễ quản lý hơn được gọi là phân đoạn dữ liệu. Nó là một cơ chế để đạt được các hệ thống phân tán.

Tại sao chúng ta cần hệ thống phân tán?

  • Tăng tính khả dụng.
  • Mở rộng dễ dàng hơn.
  • Kinh tế: Chi phí ít hơn để tạo ra một mạng lưới các máy tính nhỏ hơn với sức mạnh của một máy tính lớn.

Bạn có thể đọc thêm ở đây: Ưu điểm của cơ sở dữ liệu phân tán

Làm thế nào shending giúp đạt được hệ thống phân tán?

Bạn có thể phân vùng một chỉ mục tìm kiếm thành N phân vùng và tải từng chỉ mục trên một máy chủ riêng biệt. Nếu bạn truy vấn một máy chủ, bạn sẽ nhận được 1 / Nth kết quả. Vì vậy, để có được bộ kết quả hoàn chỉnh, một hệ thống tìm kiếm phân tán điển hình sử dụng bộ tổng hợp sẽ tích lũy kết quả từ mỗi máy chủ và kết hợp chúng. Một bộ tổng hợp cũng phân phối truy vấn trên mỗi máy chủ. Chương trình tổng hợp này được gọi là MapReduce theo thuật ngữ dữ liệu lớn. Nói cách khác, Hệ thống phân tán = Shending + MapReduce (Mặc dù cũng có những thứ khác).

Một đại diện trực quan dưới đây. Hệ thống phân phối


7

Là shending chủ yếu quan trọng trong các ứng dụng quy mô rất lớn hoặc nó áp dụng cho các ứng dụng quy mô nhỏ hơn?

Shending là một mối quan tâm nếu và chỉ khi nhu cầu của bạn vượt quá những gì có thể được phục vụ bởi một máy chủ cơ sở dữ liệu. Đây là một công cụ phù hợp nếu bạn có dữ liệu có thể bảo vệ và bạn có yêu cầu về hiệu suất và khả năng mở rộng cực kỳ cao. Tôi đoán rằng trong suốt 12 năm tôi đã là một chuyên gia phần mềm, tôi đã gặp phải một tình huống có thể được hưởng lợi từ việc bảo vệ. Đây là một kỹ thuật tiên tiến với khả năng ứng dụng rất hạn chế.

Bên cạnh đó, tương lai có lẽ sẽ trở thành một thứ gì đó vui vẻ và thú vị như một "đám mây" vật thể khổng lồ xóa đi mọi giới hạn hiệu suất tiềm năng, phải không? :)


bạn có thể chia sẻ tình huống mà bạn cần
shending không

4

Shending ban đầu được đặt ra bởi các kỹ sư google và bạn có thể thấy nó được sử dụng khá nhiều khi viết các ứng dụng trên Google App Engine. Vì có những hạn chế lớn về số lượng tài nguyên mà các truy vấn của bạn có thể sử dụng và vì bản thân các truy vấn có những hạn chế nghiêm ngặt, nên việc bảo vệ không chỉ được khuyến khích mà gần như được thi hành bởi kiến ​​trúc.

Một nơi khác có thể được sử dụng để giảm sự tranh chấp về các thực thể dữ liệu. Điều đặc biệt quan trọng khi xây dựng các hệ thống có thể mở rộng để coi chừng những phần dữ liệu được viết thường xuyên bởi vì chúng luôn luôn là nút cổ chai. Một giải pháp tốt là loại bỏ thực thể cụ thể đó và viết thành nhiều bản sao, sau đó đọc tổng số. Một ví dụ về "bộ đếm đã xóa GAE: http://code.google.com.vn/appengine/articles/shending_counters.html


7
<< Shending ban đầu được đặt ra bởi các kỹ sư google >> - không đúng sự thật. Google được thành lập vào năm 1998. scholar.google.com tìm thấy các bài báo từ những năm 1980 như "Loại bỏ thông tin lỗi thời trong hệ thống cơ sở dữ liệu sao chép" ... Hệ thống dữ liệu sao chép có tính sẵn sàng cao (SHARD) được phát triển tại CCA ... Tôi nhớ là đã nghe thấy mọi người nói về shending trở lại sau đó.
Krazy Glew

3

Shending không chỉ phân vùng ngang. Theo bài viết trên wikipedia ,

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ể mang lại 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 phân vùng nào sẽ tìm thấy một hàng cụ thể, mà không cần tìm kiếm chỉ mục trước tiên, 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.

Cũng thế,

Việc phân chia các phân đoạn trên nhiều trường hợp bị cô lập đòi hỏi nhiều hơn phân vùng ngang đơn giản. Lợi ích đạt được về hiệu quả sẽ bị mất, nếu truy vấn cơ sở dữ liệu yêu cầu cả hai trường hợp phải được truy vấn, chỉ để truy xuất bảng thứ nguyên đơn giản. Ngoài phân vùng, shending do đó phân chia các bảng có thể phân vùng lớn trên các máy chủ, trong khi các bảng nhỏ hơn được sao chép thành các đơn vị hoàn chỉnh


1

Theo tôi, tầng ứng dụng không nên xác định nơi lưu trữ dữ liệu

Đây là một quy tắc tốt nhưng giống như hầu hết mọi thứ không phải lúc nào cũng đúng.

Khi bạn làm kiến ​​trúc của bạn, bạn bắt đầu với trách nhiệm và hợp tác. Khi bạn xác định kiến ​​trúc chức năng của mình, bạn phải cân bằng các lực không chức năng.

Nếu một trong những lực không chức năng này có khả năng mở rộng lớn, bạn phải điều chỉnh kiến ​​trúc của mình để phục vụ cho lực lượng này ngay cả khi điều đó có nghĩa là sự trừu tượng lưu trữ dữ liệu của bạn hiện bị rò rỉ vào tầng ứng dụng của bạn.


1
Tầng ứng dụng vẫn có thể tạo ra sự tách biệt giữa logic truy cập dữ liệu và quy tắc kinh doanh. Điều này chỉ có nghĩa là bạn có các lớp khái niệm bổ sung trong lớp "tầng ứng dụng".
Eric
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.