Tôi có một bảng MySql trong đó bao gồm:Lớn bảng MySql đặt quá nhiều tải trọng trên máy chủ
- ~ 25million hàng (hiện tại)
- 3 chỉ số
- Mỗi ngày, một trình thu thập thêm ~ hàng 3 triệu
- tôi đang không nhìn quá xa, nhưng một ước tính cuối cùng của db có thể ~ CONST * rows E9
- hiện nay 9.5giga
- InnoDB và nó đang được đọc trong khi chèn
Bản thân dữ liệu bao gồm văn bản ~ 100 ký tự + một số trường có dữ liệu meta về nó. Các chỉ mục là id duy nhất, tên nhà văn và id nhà văn.
Cho đến bây giờ, mọi thứ suôn sẻ, nhưng hiện tại máy chủ đang gặp khó khăn trong việc xử lý chèn dữ liệu mới (~ 10 giây cho mỗi lần chèn có thêm 3k dòng). Tôi đang cố gắng tìm cách khắc phục vấn đề này. Những điều tôi xem xét:
- Làm chỉ mục trong khi chèn nỗ lực. Có thể không làm điều đó trong khi chèn, và chỉ sau khi X chèn thêm các chỉ mục.
- Phân vùng dữ liệu thành các bảng khác nhau.
- Thu thập dữ liệu vào một db nhỏ và mỗi X phút/ngày, chuyển dữ liệu vào db lớn.
- Chuyển sang một db khác. Tôi không đủ quen với NoSql, điều đó có giúp tôi giải quyết những vấn đề này không? Có phải là một nỗ lực lớn để sử dụng nó?
Mỗi tùy chọn có tùy chọn phụ và tình trạng khó xử của nó, nhưng tôi nghĩ trước tiên tôi nên tập trung vào việc có hướng. Tôi nên đi đường nào và tại sao? Có một con đường khác tôi nên nghĩ đến không?
BTW - Ngoài ra còn có tùy chọn để không giữ tất cả dữ liệu và chỉ các phần tôi thực sự hiển thị, nhưng điều đó sẽ không thể thực hiện một số thay đổi chức năng trong quá trình mà dữ liệu đang trải qua trước khi được hiển thị.
Dữ liệu trông như thế nào? Và các chỉ mục? – z5h
Đã cập nhật câu hỏi với câu trả lời cho câu hỏi của bạn. – Noam
innodb hoặc myisam? Bảng đang được sử dụng cho các truy vấn đọc trong khi bạn đang chèn? – ggiroux