Sự khác biệt giữa chia tỷ lệ theo chiều ngang và chiều dọc cho cơ sở dữ liệu [đã đóng]


698

Tôi đã đi qua nhiều cơ sở dữ liệu NoQuery và cơ sở dữ liệu SQL. Có nhiều thông số khác nhau để đo lường điểm mạnh và điểm yếu của các cơ sở dữ liệu này và khả năng mở rộng là một trong số đó. Sự khác biệt giữa quy mô theo chiều ngang và chiều dọc các cơ sở dữ liệu này là gì?


2
vi.wikipedia.org/wiki/Scalability - thuật ngữ áp dụng cho tất cả các phần mềm / hệ thống
Tomasz Nurkiewicz

5
Chú ý spaecial đến cơ sở dữ liệu phần en.wikipedia.org/wiki/Scalability#Database_scalability
user454322

Câu trả lời:


1259

Chia tỷ lệ theo chiều ngang có nghĩa là bạn chia tỷ lệ bằng cách thêm nhiều máy vào nhóm tài nguyên của mình trong khi chia tỷ lệ theo chiều dọc có nghĩa là bạn chia tỷ lệ bằng cách thêm nhiều năng lượng (CPU, RAM) vào máy hiện có .

Một cách dễ dàng để nhớ điều này là nghĩ về một máy trên giá máy chủ, chúng tôi thêm nhiều máy theo hướng ngang và thêm nhiều tài nguyên hơn cho máy theo hướng dọc .

                  Hình ảnh tỷ lệ ngang / tỷ lệ dọc

Trong thế giới cơ sở dữ liệu, tỷ lệ ngang thường dựa trên phân vùng dữ liệu, tức là mỗi nút chỉ chứa một phần dữ liệu, theo tỷ lệ dọc, dữ liệu nằm trên một nút và việc chia tỷ lệ được thực hiện thông qua đa lõi, tức là trải tải giữa tài nguyên CPU và RAM của máy đó.

Với quy mô ngang, việc mở rộng quy mô linh hoạt thường dễ dàng hơn bằng cách thêm nhiều máy vào nhóm hiện có - Quy mô dọc thường bị giới hạn ở công suất của một máy, việc mở rộng vượt quá khả năng đó thường liên quan đến thời gian chết và đi kèm với giới hạn trên.

Các ví dụ điển hình về chia tỷ lệ theo chiều ngang là Cassandra, MongoDB, Google Cloud Spanner .. và một ví dụ điển hình về tỷ lệ dọc là MySQL - Amazon RDS (Phiên bản đám mây của MySQL). Nó cung cấp một cách dễ dàng để mở rộng quy mô theo chiều dọc bằng cách chuyển đổi từ các máy nhỏ sang lớn hơn. Quá trình này thường liên quan đến thời gian chết.

Các lưới dữ liệu trong bộ nhớ như GigaSpaces XAP , Coherence , v.v. thường được tối ưu hóa cho cả tỷ lệ ngang và dọc đơn giản vì chúng không bị ràng buộc vào đĩa. Chia tỷ lệ ngang thông qua phân vùng và chia tỷ lệ dọc thông qua hỗ trợ đa lõi.

Bạn có thể đọc thêm về chủ đề này trong các bài viết trước đây của tôi: Mở rộng quy mô so với Tăng quy môCác nguyên tắc chung đằng sau các lựa chọn thay thế NOSQL


1
Ngoài ra còn có Couchbase, Riak, HBase, CitrusLeaf và Infinispan để hoàn thành danh sách xa hơn một chút (có nhiều hơn nữa).
tỷ lệ 3

3
@Nati Shalom Có phải cơ sở dữ liệu NOSQL có quy mô theo chiều ngang?
Bhushan Firake

2
@BillyMoon Tôi đã nghe nói điều này có thể là có thể với Mysql Galera
Sam Stoelinga

9
Tôi hơi bối rối ở đây ... thêm nhiều máy cũng hiệu quả tương tự với việc thêm nhiều cpu / ram .. vậy thì hai chúng khác nhau như thế nào bởi vì khi chúng tôi thêm một máy mới, nó đi kèm với cpu và ram, vui lòng sửa cho tôi nếu tôi tôi sai rồi
Subham Tripathi

8
@SubhamTripathi Như đã giải thích ở đây, tỷ lệ dọc được giới hạn ở một máy chủ (hoặc một nhóm nhỏ máy chủ) và nó có giới hạn trên thực tế (có nghĩa là bạn không thể vượt quá 512 GB RAM). Mặt khác, tỷ lệ ngang có thể xảy ra vô tận.
asg

200

Thu nhỏ theo chiều ngang ===> Hàng ngàn tay sai sẽ làm việc cùng bạn.

Chia tỷ lệ theo chiều dọc ===> Một hulk lớn sẽ làm tất cả công việc cho bạn.


Tương tự rất tốt!
Nikita Kurtin

20

Hãy bắt đầu với nhu cầu mở rộng quy mô đang gia tăng tài nguyên để giờ đây hệ thống của bạn có thể xử lý nhiều yêu cầu hơn so với trước đây.

Khi bạn nhận ra hệ thống của mình đang chậm và không thể xử lý số lượng yêu cầu hiện tại, bạn cần phải mở rộng hệ thống.

Điều này cung cấp cho bạn hai tùy chọn. Hoặc là bạn tăng tài nguyên trong máy chủ mà bạn hiện đang sử dụng, tức là tăng dung lượng RAM, CPU, GPU và các tài nguyên khác. Điều này được gọi là tỷ lệ dọc.

Chia tỷ lệ dọc thường tốn kém. Nó không làm cho hệ thống chịu lỗi, tức là nếu bạn đang mở rộng ứng dụng đang chạy với một máy chủ, nếu máy chủ đó bị hỏng, hệ thống của bạn sẽ bị hỏng. Ngoài ra số lượng chủ đề vẫn giữ nguyên trong tỷ lệ dọc. Chia tỷ lệ theo chiều dọc có thể yêu cầu hệ thống của bạn ngừng hoạt động trong giây lát khi quá trình diễn ra. Việc tăng tài nguyên trên máy chủ yêu cầu khởi động lại và đặt hệ thống của bạn xuống.

Một giải pháp khác cho vấn đề này là tăng số lượng máy chủ có trong hệ thống. Giải pháp này được sử dụng nhiều trong ngành công nghiệp công nghệ. Điều này cuối cùng sẽ làm giảm yêu cầu mỗi tốc độ thứ hai trong mỗi máy chủ. Nếu bạn cần mở rộng hệ thống, chỉ cần thêm một máy chủ khác, và bạn đã hoàn thành. Bạn sẽ không cần phải khởi động lại hệ thống. Số lượng chủ đề trong mỗi hệ thống giảm dẫn đến thông lượng cao. Để phân tách các yêu cầu, bằng nhau cho mỗi máy chủ ứng dụng, bạn cần thêm bộ cân bằng tải sẽ đóng vai trò là proxy ngược cho các máy chủ web. Toàn bộ hệ thống này có thể được gọi là một cụm duy nhất. Hệ thống của bạn có thể chứa một số lượng lớn yêu cầu sẽ yêu cầu số lượng cụm như thế này nhiều hơn.

Hy vọng bạn có được toàn bộ khái niệm giới thiệu nhân rộng cho hệ thống.


9

Có một kiến ​​trúc bổ sung không được đề cập - các dịch vụ cơ sở dữ liệu dựa trên SQL cho phép mở rộng theo chiều ngang mà không cần sự phức tạp của việc sắp xếp thủ công. Các dịch vụ này thực hiện việc bảo vệ nền, vì vậy chúng cho phép bạn chạy cơ sở dữ liệu SQL truyền thống và mở rộng quy mô như bạn làm với các công cụ NoQuery như MongoDB hoặc CouchDB. Hai dịch vụ tôi quen thuộc là EnterpriseDB cho PostgreSQL và Xeround cho MySQL. Tôi đã thấy một bài viết chuyên sâu của Xeround giải thích tại sao việc mở rộng quy mô trên cơ sở dữ liệu SQL là khó khăn và cách họ thực hiện nó khác nhau - đối xử với điều này bằng một hạt muối vì đây là bài đăng của nhà cung cấp. Ngoài ra, hãy xem mục nhập Cơ sở dữ liệu đám mây của Wikipedia, có một lời giải thích hay về SQL so với NoQuery và dịch vụ so với tự lưu trữ, một danh sách các nhà cung cấp và các tùy chọn mở rộng cho mỗi kết hợp. ;)


Là một điểm dữ liệu khác, tôi gửi một bài đăng của nhà cung cấp khác từ Clustrix: clustrix.com/blog/bid/259950/scale-up-vs-scale-out
clieu

Amazon RDS thì sao?
Raja Nagendra Kumar

1
Tôi biết đây là một bài viết cũ ... chỉ là một số cập nhật .. Xeround đã đóng cửa hàng. Các tùy chọn mở rộng theo chiều ngang của PostreSQL không thực sự là các tùy chọn mở rộng theo chiều ngang - chúng chỉ là các tùy chọn sao chép DB, nơi bạn có thể sinh ra một số hoạt động cho DB được sao chép.
DharmWiki Kumar 'DK'

8

Có tỷ lệ theo chiều ngang có nghĩa là thêm nhiều máy hơn, nhưng nó cũng ngụ ý rằng các máy bằng nhau trong cụm. MySQL có thể mở rộng theo chiều ngang về mặt Đọc dữ liệu, thông qua việc sử dụng bản sao, nhưng một khi nó đạt đến dung lượng của mem / đĩa máy chủ, bạn phải bắt đầu bảo vệ dữ liệu trên các máy chủ. Điều này ngày càng trở nên phức tạp hơn. Thường thì việc giữ dữ liệu nhất quán trên các bản sao là một vấn đề vì tốc độ sao chép thường quá chậm để theo kịp tốc độ thay đổi dữ liệu.

Couchbase cũng là một cơ sở dữ liệu mở rộng theo chiều ngang NoQuery tuyệt vời, được sử dụng trong nhiều ứng dụng và trò chơi có tính sẵn sàng cao thương mại và được cho là hiệu suất cao nhất trong danh mục. Nó tự động phân vùng dữ liệu trên cụm, thêm các nút rất đơn giản và bạn có thể sử dụng phần cứng hàng hóa, các phiên bản vm rẻ hơn (ví dụ sử dụng các máy lớn thay vì High Mem, High Disk tại AWS). Nó được xây dựng ngoài Membase (Memcached) nhưng thêm sự bền bỉ. Ngoài ra, trong trường hợp của Couchbase, mọi nút có thể đọc và ghi và bằng nhau trong cụm, chỉ sao chép dự phòng (không sao chép toàn bộ dữ liệu trên tất cả các máy chủ như trong myQuery).

Hiệu suất-khôn ngoan, bạn có thể thấy một điểm chuẩn tuyệt vời của Cisco: http://blog.couchbase.com/under Hiểu-performance- benchmark-published-cisco-and-solarflare-USE-couchbase- server

Đây là một bài đăng blog tuyệt vời về Kiến trúc Couchbase: http://horicky.blogspot.com/2012/07/couchbase-arch architecture.html


6

Cơ sở dữ liệu quan hệ truyền thống được thiết kế như hệ thống cơ sở dữ liệu máy khách / máy chủ. Chúng có thể được thu nhỏ theo chiều ngang nhưng quá trình thực hiện có xu hướng phức tạp và dễ bị lỗi. Các cơ sở dữ liệu NewQuery như NuoDB là các hệ thống cơ sở dữ liệu phân tán tập trung vào bộ nhớ được thiết kế để mở rộng theo chiều ngang trong khi vẫn duy trì các thuộc tính SQL / ACID của RDBMS truyền thống.

Để biết thêm thông tin về NuoDB, hãy đọc sách trắng kỹ thuật của họ .


5

Các cơ sở dữ liệu SQL như Oracle, db2 cũng hỗ trợ mở rộng theo chiều ngang thông qua cụm đĩa được chia sẻ. Ví dụ: Oracle RAC, IBM purescale hoặc phiên bản Sybase ASE Cluster. Nút mới có thể được thêm vào hệ thống Oracle RAC hoặc hệ thống purescale của DB2 để đạt được tỷ lệ ngang.

Nhưng cách tiếp cận khác với các cơ sở dữ liệu noQuery (như mongodb, CouchDB hoặc IBM Cloudant) là việc bảo vệ dữ liệu không phải là một phần của quy mô ngang. Trong cơ sở dữ liệu noQuery, dữ liệu bị xáo trộn trong quá trình mở rộng theo chiều ngang.


1

Bạn có một công ty và chỉ có 1 công nhân nhưng bạn đã có 1 dự án mới tại thời điểm đó bạn thuê ứng viên mới - đây là quy mô ngang. trong đó ứng cử viên mới là máy móc mới và dự án là lưu lượng truy cập / cuộc gọi mới đến người bạn của bạn.

Trong đó có 1 dự án với một anh chàng IIT / NIT xử lý tất cả các yêu cầu đối với api / lưu lượng truy cập của bạn. Nếu bất cứ lúc nào có thêm yêu cầu cho người bạn của bạn thì hãy sa thải anh ta và thay thế anh ta bằng một anh chàng NIT / IIT IQ cao - đây là quy mô theo chiều dọc.


0

Thêm nhiều bộ cân bằng tải tạo thêm chi phí và độ trễ và đó là nhược điểm để nhân rộng theo chiều ngang trong cơ sở dữ liệu nosql. Nó giống như câu hỏi tại sao mọi người nói RPC không được khuyến khích vì nó không mạnh mẽ.

Tôi nghĩ rằng trong một hệ thống thực, chúng ta nên sử dụng cả cơ sở dữ liệu sql và nosql để sử dụng cả khả năng điện toán đám mây và đa lõi của các hệ thống ngày nay.

Mặt khác, các truy vấn giao dịch phức tạp có hiệu suất cao nếu cơ sở dữ liệu sql như oracle được sử dụng. NoSql có thể được sử dụng cho bigdata và khả năng mở rộng theo chiều ngang bằng cách shending.


0

Câu trả lời được chấp nhận là tại chỗ trên định nghĩa cơ bản của tỷ lệ ngang và dọc. Nhưng không giống như niềm tin phổ biến rằng quy mô cơ sở dữ liệu theo chiều ngang chỉ có thể có với Cassandra, MongoDB, v.v. Tôi muốn thêm rằng quy mô ngang cũng rất khả thi với bất kỳ RDMS truyền thống nào; điều đó cũng không sử dụng bất kỳ giải pháp của bên thứ ba.

Tôi biết nhiều công ty, đặc biệt là các công ty dựa trên SaaS làm việc này. Điều này được thực hiện bằng cách sử dụng logic ứng dụng đơn giản. Về cơ bản, bạn lấy một nhóm người dùng và chia chúng cho nhiều máy chủ DB. Vì vậy, ví dụ, bạn thường có một cơ sở dữ liệu / bảng "meta" để lưu trữ các máy khách, máy chủ DB / chuỗi kết nối, v.v. và một bảng lưu trữ ánh xạ máy khách / máy chủ.

Sau đó, chỉ cần yêu cầu trực tiếp từ mỗi máy khách đến máy chủ DB mà chúng được ánh xạ tới.

Bây giờ một số người có thể nói rằng điều này gần giống với phân vùng ngang và không phải là tỷ lệ ngang "thật" và họ sẽ đúng theo một số cách. Nhưng kết quả cuối cùng là bạn đã mở rộng DB của mình trên nhiều máy chủ Db.

Sự khác biệt duy nhất giữa hai cách tiếp cận đối với tỷ lệ ngang là một cách tiếp cận (MongoDB, v.v.) việc chia tỷ lệ được thực hiện bởi chính phần mềm DB. Theo nghĩa đó, bạn đang "mua" tỷ lệ. Theo cách tiếp cận khác (đối với tỷ lệ ngang RDBMS), tỷ lệ được xây dựng theo mã / logic ứng dụng.

Mua vs Xây dựng

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.