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

Cập nhật bằng cách sử dụng `database / sql` trong Go chậm

(Nói theo quan điểm MySQL ...)

Một số "Quy tắc ngón tay cái":

  • INSERT đơn :10ms
  • 100 hoặc nhiều hàng được chèn bởi một INSERT :Nhanh gấp 10 lần mỗi hàng.
  • BEGIN; INSERT...; INSERT...; ... COMMIT; :Cũng 10 lần.
  • Ở trên giả sử HDD; SSD có thể nhanh hơn 10 lần nữa.
  • Nếu mỗi kết nối đang thực hiện chèn, chúng có thể có thể chạy song song. 10 luồng có thể thực hiện gấp 5 lần công việc trong cùng một thời gian đã trôi qua. (Tất nhiên, điều này có thể thêm sự phức tạp không mong muốn vào ứng dụng.)

Các số liệu tương tự cho UPDATE , mặc dù không dễ dàng thực hiện các cập nhật khác nhau trên các hàng khác nhau chỉ với một truy vấn.

Thử nghiệm của bạn cho thấy 8,5 mili giây mỗi hàng UPDATEd khi thực hiện từng hàng một. Kết hợp với BEGIN...COMMIT có thể sẽ mất khoảng 85ms cho tất cả 100 hàng, ngay cả trên HDD.

Một số ứng dụng tự cho vay theo lô; một số không. Nếu bạn muốn nói về việc cải thiện hiệu suất MySQL, chúng tôi cần đi vào chi tiết về ứng dụng của bạn.

Bộ đếm "Thích" và "Xem" có thể cần được chuyển sang bảng 'song song' vì chúng có xu hướng được Cập nhật từng lần một, có một số ảnh hưởng đến hoạt động khác. Chúng cũng có xu hướng tự động cho phép đa luồng, do đó ít hơn nhiều so với 850 mili giây / 100. Trong hoạt động thực sự cao (hơn 1 nghìn lượt xem mỗi giây), các bộ đếm như vậy có thể được ghép một cách giả tạo thông qua mã ứng dụng bổ sung.

Vui lòng viết lại điểm chuẩn của bạn để phản ánh hoạt động sẽ xảy ra trong ứng dụng thực. (Tôi đang đoán rằng Cập nhật sẽ diễn ra song song, không nối tiếp. Và chúng sẽ được trải ra một cách ngẫu nhiên theo thời gian.)

Một điều khác ... Nếu mỗi "lượt xem" đến với một máy chủ web, thì cũng có kết nối và ngắt kết nối; do đó, đã trôi qua thời gian có thể là hơn 8,5 mili giây. Nhưng "trôi qua" không phải là vấn đề quan trọng; vấn đề thực sự là "có bao nhiêu cập nhật có thể được thực hiện mỗi giây".)

Và một điều khác ... Nếu bạn kiểm tra 'song song', đừng đánh cùng một hàng theo từng yêu cầu. Điều đó có thể sẽ chậm hơn nhiều so với nếu bạn nhấn các hàng khác nhau. (Đánh vào một hàng ngẫu nhiên sẽ tốt hơn. Có sự thiên vị trong việc đánh vào hàng nào sẽ thậm chí còn thực tế hơn.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jdbc có hỗ trợ ngôn ngữ Ba Tư không

  2. Làm cách nào để nhận phần trăm tổng số hàng với mysql cho một nhóm?

  3. Cách tốt nhất để quản lý ngày tháng trên PHP, MySQL, v.v. là gì?

  4. Phương ngữ ngủ đông cho MySQL 8?

  5. Nhập tệp nén trong Mysql bằng CMD