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

BLOB so với VARCHAR để lưu trữ mảng trong bảng MySQL

Có lý do gì bạn không tạo bảng con để có thể lưu trữ một giá trị dấu phẩy động trên mỗi hàng, thay vì một mảng?

Giả sử bạn lưu trữ một nghìn mảng gồm 300 phần tử mỗi ngày. Đó là 300.000 hàng mỗi ngày, hay 109,5 triệu hàng năm. Không có gì để hắt hơi, nhưng trong khả năng của MySQL hoặc bất kỳ RDBMS nào khác.

Re nhận xét của bạn:

Chắc chắn, nếu đơn đặt hàng quan trọng, bạn thêm một cột khác cho đơn đặt hàng. Đây là cách tôi thiết kế bảng:

CREATE TABLE VectorData (
  trial_id INT NOT NULL,
  vector_no SMALLINT UNSIGNED NOT NULL,
  order_no SMALLINT UNSIGNED NOT NULL,
  element FLOAT NOT NULL,
  PRIMARY KEY (trial_id, vector_no),
  FOREIGN KEY (trial_id) REFERENCES Trials (trial_id)
);
  • Tổng không gian cho một hàng dữ liệu vectơ:300x (4 + 2 + 2 + 4) =3600 byte. Cộng với thư mục bản ghi InnoDB (nội dung) 16 byte.

  • Tổng không gian nếu bạn tuần tự hóa một mảng Java 300 float =1227 byte?

Vì vậy, bạn tiết kiệm khoảng 2400 byte, hoặc 67% không gian bằng cách lưu trữ mảng. Nhưng giả sử bạn có 100GB dung lượng để lưu trữ cơ sở dữ liệu. Lưu trữ một mảng được tuần tự hóa cho phép bạn lưu trữ 87,5 triệu vectơ, trong khi thiết kế chuẩn hóa chỉ cho phép bạn lưu trữ 29,8 triệu vectơ.

Bạn cho biết bạn lưu trữ vài trăm vectơ mỗi ngày, vì vậy bạn sẽ lấp đầy phân vùng 100GB đó chỉ trong 81 năm thay vì 239 năm.

Xin lại nhận xét của bạn: Hiệu suất của INSERT là một vấn đề quan trọng, nhưng bạn chỉ lưu trữ vài trăm vectơ mỗi ngày.

Hầu hết các ứng dụng MySQL có thể đạt được hàng trăm hoặc hàng nghìn lần chèn mỗi giây mà không cần quá nhiều thủ thuật.

Nếu bạn cần hiệu suất tối ưu, đây là một số điều cần xem xét:

  • Giao dịch rõ ràng
  • Cú pháp CHÈN nhiều hàng
  • CHÈN BỊ TRÌ HOÃN (nếu bạn vẫn sử dụng MyISAM)
  • TẢI THÔNG TIN DỮ LIỆU
  • BÀN PHÍM TẮT BẢNG ALTER, thực hiện các thao tác chèn, BẬT KHÓA BẢNG ALTER

Tìm kiếm cụm từ "mysql insert per second" trên công cụ tìm kiếm yêu thích của bạn để đọc nhiều bài báo và blog nói về điều này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LỖI:Tính năng tải dữ liệu cục bộ bị tắt - tính năng này phải được bật ở cả phía máy khách và máy chủ

  2. Nhận 5 ký tự cuối cùng của chuỗi với truy vấn mysql

  3. Chỉ chọn một số cột từ bảng trên THAM GIA TRÁI

  4. Bao gồm các kết quả rỗng trong group_concat

  5. Làm thế nào để nhận được sự khác biệt trong năm từ hai ngày khác nhau?