2011-01-29 37 views
14

Lưu ý: Tôi đã tìm kiếm các Q khác tương tự ở đây và không có câu hỏi nào khác được trả lời tương tự từ xa ... Tôi có câu hỏi về MySql bảng (chính xác hơn, trên các trường cụ thể từ một bảng - tức là tweets hoặc updates).Các hàng tối đa cho bảng MySQL

Vì vậy, câu hỏi ... số lượng hàng tối đa trên bảng InnoDB là bao nhiêu? Đó là nếu có một số lượng đáng kể sự khác biệt giữa số tiền MyIsam, InnoDB, và những người khác có thể nắm giữ, nếu không có, sau đó, nói chung. Thứ hai, nếu bảng được thực sự lớn, thực hành tốt nhất để lưu trữ dữ liệu- (cùng một bảng, hoặc chia/nhiều bảng/dbs) là gì?

Tôi đọc rằng twitter nhận được khoảng 100 triệu tweet mỗi ngày. Trong cùng một bối cảnh, câu hỏi thứ hai của tôi sẽ áp dụng như thế nào với twitter?

Trả lời

14

http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html sẽ cho phép bạn tính toán các hạn chế từ kích thước khóa của mình.

Nhưng tôi khiêm tốn cho rằng bạn không muốn để lưu trữ thông tin như tweets trong một công cụ giao dịch với toàn vẹn tham chiếu và các tính năng khác của InnoDB, và bạn chắc chắn không lưu trữ chúng tất cả trong một bảng trong một DB đơn ví dụ. Bạn đặt chúng vào rất nhiều và nhiều cơ sở dữ liệu không phải SQL độc lập cho phép bạn nối nhanh, sau đó trích xuất siêu thông tin (như hashtags, RTs, vv) thành một cơ sở dữ liệu phức tạp hơn. Các bản trình bày trên kiến ​​trúc DB của Twitter rất dễ google (ví dụ: http://www.slideshare.net/nkallen/q-con-3770885).

Nếu bạn phải lưu trữ lượng lớn dữ liệu trong một bảng, phân vùng là bạn của bạn và có thể Postgres hỗ trợ tốt hơn cho nó. Một bảng được phân đoạn là một vài bảng vật lý mà logic nhìn như một bảng. Bạn đặt các bảng con này (phân vùng) vào các đĩa khác nhau, chạy độc lập bảo trì trên chúng, v.v. Ngoài ra, "lược đồ hình sao" với một bảng rất dài chỉ chứa các cột cần thiết và một số bảng lưu trữ cột lớn hơn nhưng tùy chọn Cứu giúp.

+0

Tính đến nay (cuối năm 2015), MySQL dường như có hỗ trợ tốt hơn cho phân vùng hơn Postgres, và một cái gì đó như RethinkDB nên được coi là một giải pháp nosql. – 9000

18

Không có một giới hạn hàng, nhưng một size limit trên một cơ sở dữ liệu InnoDB:

Kích thước bảng tối thiểu là 10MB. Kích thước vùng bảng tối đa là bốn trang tỷ cơ sở dữ liệu (64TB). Đây là cũng là kích thước tối đa cho một bảng.

Bạn luôn có thể horizontally partition bảng của mình bằng cách lưu trữ hàng trong nhiều phân đoạn của cùng một bảng, trong nhiều tệp.

+0

Còn các câu hỏi khác của tôi thì sao? :) cảm ơn –

+0

@avon_verma: đã cập nhật – ash

+0

Phân đoạn ngang có được phân bổ thành Sharding không? @ash – edam

1

Các 64TB giới hạn cho một bảng có các ngoại lệ sau:

  • Đó là giả định innodb_page_size = 16K (mặc định). Điều đó có thể được đặt thành lũy thừa của 2 giữa 4K và 64K, thay đổi giới hạn vùng bảng tương ứng.
  • Một bảng PARTITIONed về bản chất là một loạt các 'bảng phụ' được tổ chức với nhau và hoạt động như một bảng lớn. Giới hạn trước-5.6.7 về số lượng phân vùng là 1024. Sau đó, nó đã là 8192. Vì vậy, nhân 64TB bằng cách đó.

OK, chỉ cung cấp cho bạn giới hạn byte. Hơn nữa, nó bao gồm trên không, và chỉ mục. Sau đó, bạn cần phải chia cho một bản ghi trung bình lớn như thế nào để có được số hàng tối đa.

(Nó không phải là dễ dàng để tính toán kích thước kỷ lục trung bình.)

câu trả lời đơn giản:

Bạn có thể có thể dễ dàng có được 1 nghìn tỷ hồ sơ "nhỏ" trong một bảng InnoDB. Với một số nỗ lực, bạn có thể lên tới 1000 nghìn tỷ. Nhưng tôi nghi ngờ bạn ngân sách cho ổ đĩa sẽ bị cạn kiệt trước đó. Hơn nữa, nó sẽ mất nhiều năm để làm tất cả các INSERTs để điền vào nó!

Vì vậy, câu trả lời thực tế: MySQL có thể xử lý số lượng hàng không giới hạn.

Cuộc sống thực? Tôi đã nghe nói về một vài bảng với hơn một tỷ hàng, thậm chí nhiều như 15 tỷ.

Xem Limits của tôi, nhưng nó không nói nhiều hơn về câu hỏi Hàng.

+1

Tại công việc cuối cùng của tôi, một bảng có hơn 5 tỷ hàng và vẫn đang phát triển nhanh chóng. Đó là bản ghi DW mọi cuộc gọi điện thoại mà dịch vụ của chúng tôi đã đặt từ năm 2007. Chúng tôi đã sử dụng RANGE phân vùng theo ngày cho dữ liệu gần đây và theo tháng cho dữ liệu cũ hơn. –

Các vấn đề liên quan