2012-07-24 24 views
6

Tôi gặp sự cố với việc chèn sqlite hiệu suất ngay cả với các giao dịch. Ứng dụng android của tôi nhận được khoảng 23.000 hàng từ một dịch vụ web và tôi phải chèn chúng vào một bảng duy nhất.Chèn SQLite trở nên chậm hơn ngay cả với các giao dịch

Dịch vụ web được phân đoạn để tôi nhận được khoảng 2000 hàng trong mỗi yêu cầu gửi đến WS và tôi bọc 2000 chèn trong một giao dịch. Sau khi những chèn được thực hiện, tôi gửi yêu cầu mới đến WS và sử dụng lại một giao dịch mới cho hàng 2000 mới.

Lúc ban đầu nó hoạt động tốt. Nó làm rất nhiều chèn mỗi giây. nhưng với thời gian nó chậm hơn và cuối cùng kết thúc với 4 hoặc 3 lần chèn mỗi giây cho đến khi nó hoàn thành 23000 hàng.

Có vấn đề với kích thước của bảng không? Khi nó lớn hơn thì chèn sẽ chậm hơn? Có cách nào để cải thiện hiệu suất cho số lượng lớn dữ liệu đó không?

Cảm ơn sự giúp đỡ của bạn.

+3

Bạn có bất kỳ chỉ mục nào có thể làm chậm chỉ mục này không? Và bạn có chắc chắn rằng bạn chỉ chèn 2000 vào một thời điểm, và không phải (tất cả dữ liệu nhận được cho đến nay) mỗi lần? –

+3

Điều này nghe có vẻ như một bộ giao dịch đang hoạt động mở rộng khi không có COMMIT. – DaveE

+0

Tất cả cũng phụ thuộc vào dữ liệu bạn đang chèn quá, các chuỗi sẽ làm chậm db của bạn. Kích thước của những hàng 2000 về byte là bao nhiêu? Sự khác biệt kích thước trong tệp DB sau khi chèn 2000 hàng. Tôi có một db với 388000 hàng và 64M của nó trong kích thước tập tin nhưng dữ liệu là tất cả tăng gấp đôi. – JPM

Trả lời

1

Có một chuỗi tuyệt vời bao gồm hiệu suất SQLite trong câu hỏi How Do I Improve The Performance of SQLite? khá tốt. Tôi sẽ đi cho ít nhất các báo cáo chuẩn bị nếu bạn không sử dụng chúng.

Tuy nhiên, khi bạn đang sử dụng Android, tôi đoán rằng bạn có thể đang gặp phải một số tắc nghẽn I/O ghi vào bộ nhớ flash. Hãy thử chạy mã trên một vài thiết bị khác nhau từ các nhà sản xuất khác nhau cũng xem có bất kỳ biến thể cực đoan nào không.

0

bạn nên sử dụng phân vùng dữ liệu. khi bạn có thể chèn 100 - 100 chèn từng cái một để quá trình sẽ được mịn màng và không có dữ liệu bị mất vấn đề sẽ xảy ra.

một điều khác mà tôi giả định rằng bạn đang sử dụng chuỗi asynch (có thể khác).

hoặc bạn cũng có thể sử dụng dịch vụ trong trường hợp cuối cùng để tiêu thụ tất cả dữ liệu cùng một lúc.

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