Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

tại sao chúng ta chia một bảng mysql thành nhiều bảng nhỏ hơn?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật MySQL từ CSV bằng JAVA

  2. Làm thế nào để ngăn ai đó quay lại trang trước?

  3. Cách sử dụng câu lệnh CASE trong MySQL

  4. Nguyên nhân gây ra lỗi MySQL 2014 Không thể thực thi truy vấn trong khi các truy vấn không có bộ đệm khác đang hoạt động

  5. đảm bảo rằng kết quả phương thức tìm nạp PDO false là một lỗi hoặc kết quả trống