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

Bản đồ mối quan hệ ngủ đông / Tăng tốc độ chèn hàng loạt

Chiến lược tạo ID rất quan trọng đối với việc chèn hàng loạt trong Hibernate. Đặc biệt, việc tạo IDENTITY thường sẽ không hoạt động (lưu ý rằng AUTO cũng thường ánh xạ tới IDENTITY). Điều này là do trong quá trình chèn hàng loạt, Hibernate có một cờ gọi là "RequiredIm InstantIdAccess" cho biết liệu các ID được tạo có được yêu cầu ngay lập tức hay không; nếu vậy, xử lý hàng loạt bị vô hiệu hóa.

Bạn có thể dễ dàng phát hiện điều này trong nhật ký cấp GỠ LỖI khi nó cho biết "thực hiện chèn danh tính ngay lập tức" - điều này có nghĩa là nó đã bỏ qua quá trình xử lý hàng loạt vì nó được thông báo rằng cần có các ID được tạo ngay sau khi chèn.

Các chiến lược tạo thường làm công việc là TABLE và SEQUENCE, vì Hibernate có thể tạo trước ID, do đó cho phép chèn hàng loạt.

Một cách nhanh chóng để phát hiện xem chèn hàng loạt của bạn có hoạt động hay không là kích hoạt nhật ký cấp GỠ LỖI vì BatchingBatcher sẽ cho bạn biết kích thước lô mà nó đang thực thi ("Đang thực thi kích thước lô:" + batchSize).

Ngoài ra, các thuộc tính sau đây rất quan trọng để đạt được chèn hàng loạt. Tôi không dám nói rằng chúng được yêu cầu vì tôi không đủ chuyên gia Hibernate để làm như vậy - có lẽ đó chỉ là cấu hình cụ thể của tôi - nhưng theo kinh nghiệm của tôi, chúng vẫn cần thiết:

hibernate.order_inserts = true
hibernate.order_updates = true

Các thuộc tính này được ghi chép lại khá kém, nhưng tôi tin rằng những gì chúng đã làm là cho phép các câu lệnh SQL INSERT và UPDATE được nhóm đúng cách để thực thi hàng loạt; Tôi nghĩ rằng đây có thể là chèn nhiều hàng mà bạn đang theo đuổi. Đừng bắn tôi nếu tôi sai về điều này, tôi đang nhớ lại từ trí nhớ.

Tôi cũng sẽ tiếp tục và giả sử rằng bạn đặt thuộc tính sau; nếu không, đây sẽ là một lời nhắc nhở:

hibernate.jdbc.batch_size = xx

Trong đó xx là kích thước lô mong muốn của bạn, tự nhiê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. Làm thế nào để viết một thủ tục được lưu trữ bằng phpmyadmin và làm thế nào để sử dụng nó thông qua php?

  2. Cách nâng cấp MySQL 5.5 lên 5.6 trên Ubuntu 14.04

  3. kiểu dữ liệu lược đồ sails-mysql

  4. Làm cách nào để sửa đổi một cột MySQL để cho phép NULL?

  5. LỖI 1366 (HY000):Giá trị chuỗi không chính xác:'\ xF0 \ x9F \ x98 \ x9C' cho cột 'nhận xét' ở hàng 1