2009-10-07 23 views
8

Theo thiết kế, Dữ liệu chính không đưa ra lệnh VACUUM SQL tới (các) cơ sở dữ liệu SQLite của nó, như detailed here. Tôi đang tạo một ứng dụng Dữ liệu cốt lõi sẽ lưu trữ, và sau đó xóa, các tệp nhị phân lớn (có kích thước 2-10MB) trong một db SQLite. Theo thời gian, điều này sẽ dẫn đến sự phân mảnh và cơ sở dữ liệu SQLite lớn hơn mức cần thiết. Tôi muốn định kỳ phát hành một lệnh VACUUM, nói rằng, trong một hoạt động dọn dẹp tôi chạy.Làm thế nào để VACUUM một dữ liệu lõi SQLite db?

  • Làm cách nào tôi có thể đưa lệnh VACUUM lên các cửa hàng SQLite lõi của Progmatic?
  • Có thể thực hiện điều này thông qua Dữ liệu cốt lõi hay tôi phải gắn kết db SQLite và kết nối trực tiếp với nó để thực thi SQL VACUUM?

Trả lời

11

Cách được hỗ trợ để thực hiện việc này, trên OS X 10.6/iOS 3.0 trở lên, là đặt NSSQLiteManualVacuumOption trong các tùy chọn khi bạn thêm cửa hàng vào điều phối viên lưu trữ liên tục.

+0

Cảm ơn Jim! Tôi lấy nó không hoạt động trong 10.5, đúng không? –

2

Có, vacuum là một câu lệnh SQL được công nhận trong SQLite. Nó có thể được sử dụng như một truy vấn bình thường, or so it says.

Hãy coi chừng, vì nó có thể dẫn đến hệ thống tệp quá mức đọc và viết — nút cổ chai của bất kỳ hệ thống nào thực tế — chưa kể đến phân đoạn hệ thống tệp máy chủ trên máy chủ Windows.

+0

Câu hỏi đặt ra là làm thế nào để thực hiện nó thông qua Dữ liệu cốt lõi, không cho dù nó tồn tại. – OrangeDog

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