Hệ thống cơ sở dữ liệu phân tán 101
Hoặc, Cơ sở dữ liệu phân tán - FK thực sự ' quy mô web ' nghĩa là gì?
Hệ thống cơ sở dữ liệu phân tán là các sinh vật phức tạp và có nhiều hương vị khác nhau. Nếu tôi tìm hiểu sâu về các nghiên cứu được nhớ đến lờ mờ của mình về vấn đề này tại trường đại học, tôi sẽ cố gắng giải thích một số vấn đề kỹ thuật chính để xây dựng một hệ thống cơ sở dữ liệu phân tán.
Đầu tiên, một số thuật ngữ
Các thuộc tính ACID (Nguyên tử, Tính nhất quán, Cách ly và Độ bền): Đây là các bất biến chính phải được thực thi để giao dịch được thực hiện một cách đáng tin cậy mà không gây ra tác dụng phụ không mong muốn.
Nguyên tử yêu cầu giao dịch hoàn thành hoặc hoàn nguyên. Các giao dịch đã hoàn thành một phần sẽ không bao giờ được nhìn thấy và hệ thống phải được xây dựng theo cách ngăn chặn điều này xảy ra.
Tính nhất quán đòi hỏi một giao dịch không bao giờ được vi phạm bất kỳ bất biến nào (chẳng hạn như tính toàn vẹn tham chiếu khai báo) được đảm bảo bởi lược đồ cơ sở dữ liệu. Ví dụ: nếu khóa ngoại tồn tại, không thể chèn bản ghi con với sự tôn trọng đối với cha mẹ không tồn tại.
Cô lập yêu cầu các giao dịch không nên can thiệp lẫn nhau. Hệ thống sẽ đảm bảo kết quả tương tự nếu các giao dịch được thực hiện song song hoặc tuần tự. Trong thực tế, hầu hết các sản phẩm RDBMS cho phép các chế độ đánh đổi sự cô lập với hiệu suất.
Độ bền đòi hỏi rằng một khi đã cam kết, giao dịch vẫn được lưu trữ liên tục theo cách mạnh mẽ đối với lỗi phần cứng hoặc phần mềm.
Tôi sẽ giải thích một số trở ngại kỹ thuật mà các yêu cầu này có trên các hệ thống phân tán bên dưới.
Kiến trúc đĩa chia sẻ: Một kiến trúc trong đó tất cả các nút xử lý trong một cụm có quyền truy cập vào tất cả các bộ lưu trữ. Điều này có thể trình bày một nút cổ chai trung tâm để truy cập dữ liệu. Một ví dụ về hệ thống chia sẻ đĩa là Oracle RAC hoặc Exadata .
Kiến trúc không chia sẻ: Một kiến trúc trong đó các nút xử lý trong một cụm có lưu trữ cục bộ không thể nhìn thấy đối với các nút cụm khác. Ví dụ về các hệ thống không chia sẻ là Teradata và Netezza .
Kiến trúc bộ nhớ dùng chung: Một kiến trúc trong đó nhiều CPU (hoặc nút) có thể truy cập vào nhóm bộ nhớ dùng chung. Hầu hết các máy chủ hiện đại thuộc loại bộ nhớ dùng chung. Bộ nhớ dùng chung tạo điều kiện cho các hoạt động nhất định như bộ nhớ cache hoặc nguyên thủy đồng bộ hóa nguyên tử khó thực hiện hơn trên các hệ thống phân tán.
Đồng bộ hóa: Một thuật ngữ chung mô tả các phương pháp khác nhau để đảm bảo quyền truy cập nhất quán vào tài nguyên được chia sẻ bởi nhiều quy trình hoặc luồng. Điều này khó thực hiện hơn trên các hệ thống phân tán so với các hệ thống bộ nhớ dùng chung, mặc dù một số kiến trúc mạng (ví dụ BYNET của Teradata) có các nguyên tắc đồng bộ hóa trong giao thức mạng. Đồng bộ hóa cũng có thể đi kèm với một lượng chi phí đáng kể.
Semi-Join: Một nguyên thủy được sử dụng trong việc nối dữ liệu được giữ trong hai nút khác nhau của một hệ thống phân tán. Về cơ bản, nó bao gồm đủ thông tin về các hàng để tham gia được gói lại và được truyền bởi một nút khác để giải quyết liên kết. Trên một truy vấn lớn, điều này có thể liên quan đến lưu lượng mạng đáng kể.
Tính nhất quán cuối cùng: Thuật ngữ được sử dụng để mô tả ngữ nghĩa giao dịch nhằm đánh đổi cập nhật tức thời (tính nhất quán về số lần đọc) trên tất cả các nút của hệ thống phân tán để thực hiện (và do đó thông lượng giao dịch cao hơn) trên ghi. Tính nhất quán cuối cùng là tác dụng phụ của việc sử dụng Bản sao đại biểu như một tối ưu hóa hiệu suất để tăng tốc độ cam kết giao dịch trong cơ sở dữ liệu phân tán, nơi nhiều bản sao dữ liệu được giữ trên các nút riêng biệt.
Thuật toán của Lamport: Một thuật toán để thực hiện loại trừ lẫn nhau (đồng bộ hóa) trên các hệ thống không có bộ nhớ dùng chung. Thông thường loại trừ lẫn nhau trong một hệ thống đòi hỏi một nguyên tắc đọc so sánh-ghi hoặc hướng dẫn tương tự của một loại thường chỉ thực tế trên một hệ thống bộ nhớ dùng chung. Các thuật toán đồng bộ hóa phân tán khác tồn tại, nhưng Lamport là một trong những thuật toán đầu tiên và được biết đến nhiều nhất. Giống như hầu hết các cơ chế đồng bộ hóa phân tán, thuật toán của Lamport phụ thuộc rất nhiều vào các nút cụm đồng bộ hóa thời gian và đồng bộ hóa chính xác.
Cam kết hai pha (2PC): Một nhóm các giao thức đảm bảo rằng các cập nhật cơ sở dữ liệu liên quan đến nhiều hệ thống vật lý cam kết hoặc khôi phục một cách nhất quán. Cho dù 2PC được sử dụng trong một hệ thống hay trên nhiều hệ thống thông qua trình quản lý giao dịch, nó sẽ mang một chi phí đáng kể.
Trong giao thức cam kết hai pha, người quản lý giao dịch yêu cầu các nút tham gia tiếp tục duy trì giao dịch theo cách mà họ có thể đảm bảo rằng nó sẽ cam kết, sau đó báo hiệu trạng thái này. Khi tất cả các nút đã trả về trạng thái 'hạnh phúc', nó sẽ báo hiệu cho các nút cam kết. Giao dịch vẫn được coi là mở cho đến khi tất cả các nút gửi trả lời cho biết cam kết đã hoàn tất. Nếu một nút bị hỏng trước khi báo hiệu cam kết hoàn tất, trình quản lý giao dịch sẽ truy vấn lại nút đó khi nó quay trở lại cho đến khi nhận được phản hồi tích cực cho biết giao dịch đã được thực hiện.
Kiểm soát đồng thời nhiều phiên bản (MVCC): Quản lý sự tranh chấp bằng cách viết các phiên bản mới của dữ liệu đến một vị trí khác và cho phép các giao dịch khác xem phiên bản cũ của dữ liệu cho đến khi phiên bản mới được cam kết. Điều này làm giảm sự tranh chấp cơ sở dữ liệu với chi phí của một số lưu lượng ghi bổ sung để viết phiên bản mới và sau đó đánh dấu phiên bản cũ là lỗi thời.
Thuật toán bầu cử: Các hệ thống phân tán liên quan đến nhiều nút vốn đã kém tin cậy hơn một hệ thống đơn lẻ vì có nhiều chế độ thất bại hơn. Trong nhiều trường hợp, một số cơ chế là cần thiết cho các hệ thống phân cụm để đối phó với sự thất bại của một nút. Các thuật toán bầu cử là một lớp các thuật toán được sử dụng để chọn một nhà lãnh đạo để phối hợp tính toán phân tán trong các tình huống trong đó nút 'nhà lãnh đạo' không được xác định hoặc tin cậy 100%.
Phân vùng ngang: Một bảng có thể được phân chia trên nhiều nút hoặc khối lượng lưu trữ bằng khóa của nó. Điều này cho phép một khối lượng dữ liệu lớn được chia thành các phần nhỏ hơn và được phân phối trên các nút lưu trữ.
Shending: Một tập dữ liệu có thể được phân vùng theo chiều ngang trên nhiều nút vật lý trong kiến trúc không chia sẻ. Trường hợp phân vùng này không trong suốt (tức là máy khách phải nhận thức được sơ đồ phân vùng và tìm ra nút nào để truy vấn rõ ràng) điều này được gọi là shending. Một số hệ thống (ví dụ Teradata) thực hiện phân chia dữ liệu giữa các nút nhưng vị trí trong suốt đối với máy khách; thuật ngữ này thường không được sử dụng cùng với loại hệ thống này.
Băm nhất quán: Một thuật toán được sử dụng để phân bổ dữ liệu cho các phân vùng dựa trên khóa. Nó được đặc trưng bởi sự phân phối đồng đều của các khóa băm và khả năng co giãn hoặc giảm số lượng xô một cách hiệu quả. Các thuộc tính này làm cho nó hữu ích cho việc phân vùng dữ liệu hoặc tải trên một cụm các nút trong đó kích thước có thể thay đổi linh hoạt với các nút được thêm hoặc thả khỏi cụm (có thể do lỗi).
Tái tạo đa chủ: Một kỹ thuật cho phép ghi trên nhiều nút trong một cụm được sao chép sang các nút khác. Kỹ thuật này tạo điều kiện mở rộng quy mô bằng cách cho phép một số bảng được phân vùng hoặc phân chia trên các máy chủ và các bảng khác được đồng bộ hóa trên toàn cụm. Các bài viết phải được sao chép cho tất cả các nút chứ không phải là một đại biểu, vì vậy các cam kết giao dịch sẽ tốn kém hơn trên một kiến trúc được sao chép đa chủ so với trên một hệ thống sao chép đại biểu.
Công tắc không chặn: Công tắc mạng sử dụng song song phần cứng bên trong để đạt được thông lượng tỷ lệ thuận với số lượng cổng không có tắc nghẽn bên trong. Việc triển khai ngây thơ có thể sử dụng cơ chế thanh ngang, nhưng điều này có độ phức tạp O (N ^ 2) cho các cổng N, giới hạn nó ở các công tắc nhỏ hơn. Các công tắc lớn hơn có thể sử dụng nhiều cấu trúc liên kết nội bộ phức tạp hơn gọi là công tắc kéo dài tối thiểu không chặn để đạt được tỷ lệ thông lượng tuyến tính mà không cần phần cứng O (N ^ 2).
Tạo một DBMS phân tán - nó có thể khó đến mức nào?
Một số thách thức kỹ thuật làm cho điều này khá khó thực hiện trong thực tế. Ngoài sự phức tạp thêm vào của việc xây dựng một hệ thống phân tán, kiến trúc sư của một DBMS phân tán phải khắc phục một số vấn đề kỹ thuật khó khăn.
Tính nguyên tử trên các hệ thống phân tán: Nếu dữ liệu được cập nhật bởi một giao dịch được trải rộng trên nhiều nút, thì cam kết / khôi phục của các nút phải được phối hợp. Điều này thêm một chi phí đáng kể trên các hệ thống không chia sẻ. Trên các hệ thống đĩa chia sẻ, đây không phải là vấn đề vì tất cả các nút lưu trữ có thể được nhìn thấy bởi tất cả các nút để một nút có thể phối hợp cam kết.
Tính nhất quán trên các hệ thống phân tán: Để lấy ví dụ về khóa ngoại được trích dẫn ở trên, hệ thống phải có khả năng đánh giá trạng thái nhất quán. Ví dụ: nếu cha mẹ và con của mối quan hệ khóa ngoài có thể cư trú trên các nút khác nhau, một số cơ chế khóa phân tán là cần thiết để đảm bảo rằng thông tin lỗi thời không được sử dụng để xác thực giao dịch. Nếu điều này không được thi hành, bạn có thể có (ví dụ) một điều kiện chủng tộc trong đó cha mẹ bị xóa sau khi sự hiện diện của nó được xác minh trước khi cho phép chèn con.
Việc thực thi các ràng buộc bị trì hoãn (nghĩa là chờ đợi cho đến khi cam kết xác nhận DRI) yêu cầu khóa phải được giữ trong suốt thời gian giao dịch. Loại khóa phân tán này đi kèm với một chi phí đáng kể.
Nếu nhiều bản sao dữ liệu được giữ (điều này có thể cần thiết trên các hệ thống không chia sẻ để tránh lưu lượng mạng không cần thiết từ bán kết nối) thì tất cả các bản sao của dữ liệu phải được cập nhật.
Cách ly trên các hệ thống phân tán: Trường hợp dữ liệu bị ảnh hưởng trên một giao dịch nằm trên nhiều nút hệ thống, các khóa và phiên bản (nếu MVCC đang được sử dụng) phải được đồng bộ hóa qua các nút. Đảm bảo tính tuần tự hóa của các hoạt động, đặc biệt là các kiến trúc không chia sẻ, nơi các bản sao dữ liệu dư thừa có thể được lưu trữ đòi hỏi một cơ chế đồng bộ hóa phân tán như Thuật toán của Lamport, cũng đi kèm với lưu lượng truy cập mạng đáng kể.
Độ bền trên các hệ thống phân tán: Trên hệ thống đĩa dùng chung, vấn đề về độ bền về cơ bản giống như hệ thống bộ nhớ dùng chung, ngoại trừ các giao thức đồng bộ hóa phân tán vẫn được yêu cầu trên các nút. DBMS phải ghi nhật ký vào nhật ký và ghi dữ liệu ra một cách nhất quán. Trên hệ thống không chia sẻ, có thể có nhiều bản sao dữ liệu hoặc các phần của dữ liệu được lưu trữ trên các nút khác nhau. Một giao thức cam kết hai pha là cần thiết để đảm bảo rằng cam kết xảy ra chính xác trên các nút. Điều này cũng phát sinh chi phí đáng kể.
Trên hệ thống không chia sẻ, việc mất nút có thể có nghĩa là dữ liệu không có sẵn cho hệ thống. Để giảm thiểu dữ liệu này có thể được sao chép qua nhiều nút. Tính nhất quán trong tình huống này có nghĩa là dữ liệu phải được sao chép vào tất cả các nút nơi thường trú. Điều này có thể phải chịu chi phí đáng kể trên văn bản.
Một tối ưu hóa phổ biến được thực hiện trong các hệ thống NoQuery là sử dụng sao chép đại biểu và tính nhất quán cuối cùng để cho phép dữ liệu được sao chép một cách lười biếng trong khi vẫn đảm bảo mức độ phục hồi nhất định của dữ liệu bằng cách viết vào đại biểu trước khi báo cáo giao dịch như đã cam kết. Dữ liệu sau đó được sao chép một cách lười biếng sang các nút khác nơi các bản sao của dữ liệu cư trú.
Lưu ý rằng "tính nhất quán cuối cùng" là một sự đánh đổi lớn về tính nhất quán có thể không được chấp nhận nếu dữ liệu phải được xem một cách nhất quán ngay khi giao dịch được thực hiện. Ví dụ, trên một ứng dụng tài chính, số dư cập nhật sẽ có sẵn ngay lập tức.
Hệ thống chia sẻ đĩa
Một hệ thống đĩa chia sẻ là một trong đó tất cả các nút có quyền truy cập vào tất cả các bộ lưu trữ. Do đó, tính toán là độc lập với vị trí. Nhiều nền tảng DBMS cũng có thể hoạt động trong chế độ này - Oracle RAC là một ví dụ về kiến trúc như vậy.
Các hệ thống đĩa được chia sẻ có thể mở rộng đáng kể vì chúng có thể hỗ trợ mối quan hệ M: M giữa các nút lưu trữ và các nút xử lý. Một SAN có thể có nhiều bộ điều khiển và nhiều máy chủ có thể chạy cơ sở dữ liệu. Các kiến trúc này có một công tắc như một nút cổ chai trung tâm nhưng các công tắc thanh ngang cho phép công tắc này có nhiều băng thông. Một số xử lý có thể được giảm tải lên các nút lưu trữ (như trong trường hợp Exadata của Oracle) có thể làm giảm lưu lượng trên băng thông lưu trữ.
Mặc dù về mặt lý thuyết, việc chuyển đổi là tắc nghẽn băng thông có sẵn có nghĩa là các kiến trúc đĩa chia sẻ sẽ mở rộng khá hiệu quả với khối lượng giao dịch lớn. Hầu hết các kiến trúc DBMS chính thống đều áp dụng phương pháp này bởi vì nó có khả năng mở rộng 'đủ tốt' và độ tin cậy cao. Với kiến trúc lưu trữ dự phòng như kênh sợi quang, không có điểm thất bại duy nhất vì có ít nhất hai đường dẫn giữa bất kỳ nút xử lý và bất kỳ nút lưu trữ nào.
Hệ thống không chia sẻ
Các hệ thống không chia sẻ là các hệ thống có ít nhất một số dữ liệu được lưu cục bộ vào một nút và không thể hiển thị trực tiếp với các nút khác. Điều này loại bỏ nút cổ chai của một công tắc trung tâm, cho phép cơ sở dữ liệu mở rộng quy mô (ít nhất là trên lý thuyết) với số lượng nút. Phân vùng ngang cho phép dữ liệu được phân chia giữa các nút; điều này có thể trong suốt với khách hàng hay không (xem Shending ở trên).
Vì dữ liệu được phân phối vốn có nên một truy vấn có thể yêu cầu dữ liệu từ nhiều hơn một nút. Nếu một phép nối cần dữ liệu từ các nút khác nhau, thao tác bán tham gia được sử dụng để truyền đủ dữ liệu để hỗ trợ phép nối từ nút này sang nút khác. Điều này có thể dẫn đến một lượng lớn lưu lượng mạng, do đó tối ưu hóa việc phân phối dữ liệu có thể tạo ra sự khác biệt lớn đối với hiệu suất truy vấn.
Thông thường, dữ liệu được sao chép trên các nút của hệ thống không chia sẻ để giảm sự cần thiết cho các liên kết bán. Điều này hoạt động khá tốt trên các thiết bị kho dữ liệu vì kích thước thường có nhiều đơn đặt hàng có độ lớn nhỏ hơn các bảng thực tế và có thể dễ dàng sao chép trên các nút. Chúng cũng thường được tải theo đợt vì vậy chi phí nhân rộng ít gây ra sự cố hơn so với trên ứng dụng giao dịch.
Tính song song vốn có của một kiến trúc không chia sẻ làm cho chúng phù hợp với kiểu truy vấn quét / tổng hợp bảng đặc trưng của kho dữ liệu. Loại hoạt động này có thể mở rộng gần như tuyến tính với số lượng nút xử lý. Các phép nối lớn trên các nút có xu hướng phát sinh nhiều chi phí hơn vì các hoạt động bán tham gia có thể tạo ra nhiều lưu lượng mạng.
Di chuyển khối lượng dữ liệu lớn ít hữu ích hơn cho các ứng dụng xử lý giao dịch, trong đó chi phí chung của nhiều bản cập nhật làm cho loại kiến trúc này kém hấp dẫn hơn so với đĩa chia sẻ. Do đó, kiểu kiến trúc này có xu hướng không được sử dụng rộng rãi trong các ứng dụng kho dữ liệu.
Shending, sao chép đại biểu và tính nhất quán cuối cùng
Bản sao đại biểu là một cơ sở trong đó DBMS sao chép dữ liệu để có tính sẵn sàng cao. Điều này hữu ích cho các hệ thống dự định hoạt động trên phần cứng hàng hóa rẻ hơn không có tính năng sẵn sàng cao như SAN. Trong loại hệ thống này, dữ liệu được sao chép trên nhiều nút lưu trữ để đọc hiệu năng và lưu trữ dự phòng để làm cho hệ thống trở nên linh hoạt trước lỗi phần cứng của một nút.
Tuy nhiên, sao chép ghi vào tất cả các nút là O (M x N) cho các nút M và N ghi. Điều này làm cho việc ghi đắt tiền nếu việc ghi phải được sao chép tới tất cả các nút trước khi giao dịch được phép thực hiện. Sao chép đại biểu là một sự thỏa hiệp cho phép ghi được sao chép vào một tập hợp con của các nút ngay lập tức và sau đó lười biếng viết ra các nút khác bằng một tác vụ nền. Việc ghi có thể được cam kết nhanh hơn, trong khi cung cấp một mức độ dư thừa nhất định bằng cách đảm bảo rằng chúng được sao chép thành một tập hợp con tối thiểu (đại biểu) của các nút trước khi giao dịch được báo cáo như đã cam kết với khách hàng.
Điều này có nghĩa là đọc các nút bên ngoài đại biểu có thể thấy các phiên bản dữ liệu đã lỗi thời cho đến khi quá trình nền hoàn thành việc ghi dữ liệu vào phần còn lại của các nút. Các ngữ nghĩa được gọi là 'Tính nhất quán cuối cùng' và có thể hoặc không thể chấp nhận được tùy thuộc vào yêu cầu của ứng dụng của bạn nhưng có nghĩa là các cam kết giao dịch gần với O (1) hơn so với O (n) trong việc sử dụng tài nguyên.
Shending yêu cầu khách hàng nhận thức được việc phân vùng dữ liệu trong cơ sở dữ liệu, thường sử dụng một loại thuật toán được gọi là 'băm nhất quán'. Trong cơ sở dữ liệu được phân tách, máy khách băm khóa để xác định máy chủ nào trong cụm sẽ đưa ra truy vấn. Vì các yêu cầu được phân phối trên các nút trong cụm, không có nút cổ chai với một nút điều phối truy vấn duy nhất.
Các kỹ thuật này cho phép cơ sở dữ liệu mở rộng ở tốc độ gần tuyến tính bằng cách thêm các nút vào cụm. Về mặt lý thuyết, sao chép đại biểu chỉ cần thiết nếu phương tiện lưu trữ cơ bản được coi là không đáng tin cậy. Điều này hữu ích nếu các máy chủ hàng hóa được sử dụng nhưng ít giá trị hơn nếu cơ chế lưu trữ cơ bản có sơ đồ sẵn sàng cao của riêng nó (ví dụ: SAN với bộ điều khiển được nhân đôi và kết nối nhiều đường dẫn đến máy chủ).
Ví dụ: BigTable của Google không tự triển khai Bản sao đại biểu, mặc dù nó nằm trên GFS, một hệ thống tệp được nhóm sử dụng sao chép đại biểu. BigTable (hoặc bất kỳ hệ thống không chia sẻ nào) có thể sử dụng hệ thống lưu trữ đáng tin cậy với nhiều bộ điều khiển và phân vùng dữ liệu giữa các bộ điều khiển. Truy cập song song sau đó sẽ đạt được thông qua phân vùng dữ liệu.
Quay lại nền tảng RDBMS
Không có lý do cố hữu nào mà các kỹ thuật này không thể được sử dụng với RDBMS. Tuy nhiên, quản lý khóa và phiên bản sẽ khá phức tạp trên một hệ thống như vậy và bất kỳ thị trường nào cho một hệ thống như vậy có thể sẽ khá chuyên biệt. Không có nền tảng RDBMS chính thống nào sử dụng sao chép đại biểu và tôi không biết cụ thể về bất kỳ sản phẩm RDBMS nào (ít nhất là không có bất kỳ sự hấp thụ đáng kể nào).
Hệ thống chia sẻ đĩa và không chia sẻ có thể mở rộng khối lượng công việc rất lớn. Chẳng hạn, Oracle RAC có thể hỗ trợ 63 nút xử lý (có thể là các máy SMP lớn theo cách riêng của họ) và một số lượng bộ điều khiển lưu trữ tùy ý trên SAN. Một IBM Sysplex (một cụm các máy tính lớn của zSeries) có thể hỗ trợ nhiều máy tính lớn (mỗi máy có sức mạnh xử lý đáng kể và băng thông I / O của riêng chúng) và nhiều bộ điều khiển SAN. Các kiến trúc này có thể hỗ trợ khối lượng giao dịch rất lớn với ngữ nghĩa ACID, mặc dù chúng giả định lưu trữ đáng tin cậy. Teradata, Netezza và các nhà cung cấp khác tạo ra các nền tảng phân tích hiệu suất cao dựa trên các thiết kế không chia sẻ có quy mô với khối lượng dữ liệu cực lớn.
Cho đến nay, thị trường cho các nền tảng ACID RDBMS giá rẻ nhưng khối lượng cực lớn hoàn toàn bị chi phối bởi MySQL, hỗ trợ sao chép và sao chép đa chủ. MySQL không sử dụng sao chép đại biểu để tối ưu hóa thông lượng ghi, vì vậy các cam kết giao dịch đắt hơn so với trên hệ thống NoQuery. Shending cho phép thông lượng đọc rất cao (ví dụ Facebook sử dụng rộng rãi MySQL), vì vậy loại kiến trúc này có quy mô tốt trên khối lượng công việc nặng đọc.
Một cuộc tranh luận thú vị
BigTable là một kiến trúc không chia sẻ (về cơ bản là một cặp khóa-giá trị phân tán) như được chỉ ra bởi Michael Hausenblas bên dưới . Đánh giá ban đầu của tôi về nó bao gồm công cụ MapReduce, không phải là một phần của BigTable nhưng thường được sử dụng cùng với nó trong các triển khai phổ biến nhất của nó (ví dụ: khung Hadoop / HBase và MapReduce của Google).
So sánh kiến trúc này với Teradata, có mối quan hệ vật lý giữa lưu trữ và xử lý (nghĩa là các nút có lưu trữ cục bộ chứ không phải SAN chung), bạn có thể lập luận rằng BigTable / MapReduce là kiến trúc đĩa được chia sẻ thông qua hệ thống lưu trữ song song có thể nhìn thấy trên toàn cầu.
Thông lượng xử lý của hệ thống kiểu MapReduce như Hadoop bị hạn chế bởi băng thông của bộ chuyển đổi mạng không chặn. 1 Non-blocking chuyển mạch có thể, tuy nhiên, xử lý uẩn băng thông lớn do sự xử lý song song vốn có trong việc thiết kế, vì vậy chúng hiếm khi một hạn chế thực tế đáng kể về hiệu suất. Điều này có nghĩa là một kiến trúc đĩa chia sẻ (có lẽ được gọi là hệ thống lưu trữ chia sẻ) có thể mở rộng thành khối lượng công việc lớn mặc dù về mặt lý thuyết, chuyển đổi mạng là một nút cổ chai trung tâm.
Điểm ban đầu là lưu ý rằng mặc dù nút cổ chai trung tâm này tồn tại trong các hệ thống đĩa chia sẻ, một hệ thống con lưu trữ được phân vùng với nhiều nút lưu trữ (ví dụ: máy chủ máy tính bảng BigTable hoặc bộ điều khiển SAN) vẫn có thể mở rộng đến khối lượng công việc lớn. Một kiến trúc chuyển mạch không chặn có thể (về lý thuyết) xử lý nhiều kết nối hiện tại như nó có các cổng.
1 Tất nhiên việc xử lý và thông lượng I / O khả dụng cũng tạo thành giới hạn về hiệu suất nhưng chuyển đổi mạng là một điểm trung tâm mà tất cả lưu lượng truy cập đều đi qua.