I came on board just before 1.0 release, and for 1.5 we cleaned things up a bit. For 2.0 we (mainly I) completely rewrote the database code, and got between 10x and 100x improvements by using SQLite directly rather than going through CoreData. CoreData has since improved, but it was a nascent technology itself back then, and not suited to the sort of database use we needed.
The SQLite database wasn't "vulnerable to corruption", SQLite has several articles about its excellent ACID nature. The design of the application was flawed at the beginning though, with bindings used frequently in the UI to managed objects persisted in the database, which meant (amongst other things) that:
- User changes a slider
- Change is propagated through bindings
- CoreData picks up the binding and syncs it to disk
- But the database is on another thread, which invalidates the ManagedObjectContext
- Which means the context has to re-read everything from the database
- Which takes time
- By now the user has moved the slider again.
So: slow. I fixed that - see the other post I made.