Tôi nghĩ rằng bạn có một vài thuật ngữ lẫn lộn ở đây.
Tất cả dữ liệu của bạn được đưa vào một cơ sở dữ liệu (hay còn gọi là lược đồ). Trong cơ sở dữ liệu, bạn có thể có các bảng.
ví dụ:
table employee
id integer
name varchar
address varchar
country varchar
table office
id integer
employee_id integer
address varchar
Bên trong bảng, bạn có các trường (id, name, address)
hay còn gọi là cột Và các bảng có một hoặc nhiều hàng.
Ví dụ cho nhân viên bảng:
id name address country
----------------------------------------------------
1 John 1 Regent Street UK
2 James 24 Jump Street China
3 Darth Vader 1 Death Star Bestine, Tatooine
Quá nhiều cho những điều cơ bản.
Tại sao nên phân vùng
Bây giờ, giả sử rằng chúng ta có rất nhiều người (hàng) trong cơ sở dữ liệu của mình.
Hãy nhớ rằng đây là cơ sở dữ liệu thiên hà, vì vậy chúng ta có 100 tỷ bản ghi.
Nếu chúng ta muốn tìm kiếm nhanh như thế này thật tuyệt nếu chúng ta có thể làm điều này song song.
Vì vậy, chúng ta phân vùng bảng (giả sử theo quốc gia) và sau đó chúng ta có thể có x máy chủ tìm kiếm ở mỗi quốc gia.
Phân vùng trên các máy chủ được gọi là sharding
.
Hoặc chúng ta có thể phân vùng v.d. dữ liệu lịch sử theo năm, vì vậy chúng tôi không phải xem qua tất cả dữ liệu chỉ để lấy gần đây Tin tức. Chúng tôi chỉ phải xem xét phân vùng cho năm nay. Đây được gọi là partitioning
.
Sự khác biệt lớn giữa sharding
là gì chỉ có thể partitioning
?
Mài sắc
Trong sharding
bạn dự đoán rằng tất cả dữ liệu của bạn có liên quan và có khả năng được truy vấn như nhau. (ví dụ:google có thể mong đợi tất cả dữ liệu của họ được truy vấn; lưu trữ một phần dữ liệu của họ là vô ích đối với họ).
Trong trường hợp này, bạn muốn nhiều máy xem xét dữ liệu của bạn song song, trong đó mỗi máy thực hiện một phần của làm việc.
Vì vậy, bạn cung cấp cho mỗi máy một phân vùng (phân đoạn) dữ liệu khác nhau và cung cấp cho tất cả các máy cùng một truy vấn. Khi có kết quả, bạn UNION
tất cả chúng cùng nhau và xuất ra kết quả.
Phân vùng cơ bản
Trong partitioning
một phần dữ liệu của bạn là hot
và một phần là not
. Một trường hợp điển hình là dữ liệu lịch sử, dữ liệu mới là hot
, dữ liệu cũ hầu như không bị đụng đến.
Đối với trường hợp sử dụng này, việc đặt dữ liệu cũ trong các máy chủ riêng biệt là vô nghĩa. Các máy đó sẽ chỉ chờ đợi và chờ đợi và không làm gì cả vì không ai quan tâm đến dữ liệu cũ ngoại trừ một số người kiểm tra xem xét nó mỗi năm một lần.
Vì vậy, bạn phân vùng dữ liệu đó theo năm và máy chủ sẽ tự động lưu trữ các phân vùng cũ để của bạn các truy vấn sẽ chỉ xem xét dữ liệu trong một (có thể là 2) năm và nhanh hơn nhiều.
Tôi có cần phân vùng không?
Bạn chỉ thực hiện phân vùng khi bạn có nhiều và nhiều dữ liệu, vì nó làm phức tạp quá trình thiết lập của bạn.
Trừ khi bạn có hơn một triệu bản ghi, bạn không cần phải xem xét việc phân vùng.
Nếu bạn có hơn 100 triệu bản ghi, bạn chắc chắn nên xem xét nó.
Để biết thêm thông tin, hãy xem: http://dev.mysql.com/ doc / refman / 5.1 / en / partitioning.html
và: http://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-big-real-life-problems.html
Xem thêm wiki: http://en.wikipedia.org/wiki / Partition_% 28database% 29
Đây chỉ là YMMV khám phá cá nhân của tôi.