2011-08-26 28 views
9

Tôi đang cố chèn một lượng lớn bản ghi (trong hàng triệu) vào cơ sở dữ liệu SQLite. Dữ liệu được đọc từ một luồng tệp (C++). Nếu tôi bắt đầu một giao dịch, thực hiện tất cả của các lần chèn và sau đó cam kết giao dịch, tôi chỉ nhận được một tỷ lệ rất nhỏ các bản ghi thực sự được chèn vào cơ sở dữ liệu của tôi.Số lượng hạn chế giao dịch SQLite?

Thứ được chèn vào có vẻ ngẫu nhiên - tôi không thể thấy bất kỳ mẫu nào được chèn vào và mẫu nào bị bỏ đi. Tuy nhiên, nếu tôi cam kết và sau đó bắt đầu giao dịch một lần nữa sau khi một cái gì đó như 2000 chèn, tôi không có vấn đề này và tất cả các hồ sơ được chèn vào, mặc dù quá trình này là nhiều hơn chậm hơn. Vì vậy ...

Có giới hạn nghiêm ngặt về số lần chèn có thể được thực hiện trong một giao dịch không? Có cách nào để thay đổi giới hạn này không?

+1

Đã khắc phục sự cố này. Chỉ cần đăng bài này ở đây cho hậu thế. Nếu bạn gặp phải điều này, trước tiên, hãy thử xử lý các gói chỉ 1k-2k cho mỗi giao dịch để xem đây có thực sự là vấn đề hay không. –

Trả lời

13

Tôi có thể chèn 10 triệu hàng trong một giao dịch mà không gặp sự cố.

đoán của tôi:

  • bạn đang chèn quá nhiều hàng trong một tuyên bố đơn và đánh độ sâu tối đa Một hạn Biểu Tree. Điều này có thể được tắt hoàn toàn.
  • bạn đang sử dụng INSERT quá dài không có giá trị ràng buộc và nhấn Giới hạn chiều dài tối đa của giới hạn câu lệnh SQL. Trong trường hợp này, sử dụng tham số ràng buộc.
  • nó có thể là một lỗi trong thư viện (là bạn kiểm tra tất cả các lợi nhuận API cho các mã lỗi?)

Kiểm tra Limits In SQLite. Nó có thể hữu ích nếu bạn chỉ ra cách bạn chuẩn bị và thực hiện các INSERT trong mã.

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