I would suggest that you design your model API first. Whether the data is backed by core data, or pure sqlite, or a big in-memory array/dictionary should not matter, except in how the model is implemented.If you can decide on a reasonable model API, then how you implement the backend is an implementation detail of the model. This way you can use whatever backend technology you want, and change it easily enough if you find your requirements change.Since you referenced the OS X programming book, I assume this is for OS X, and unless your objects are incredibly huge, you can probably get away with having your model be completely resident in memory as 25,000 objects is not many at all. However, remember that loading and saving will take longer when you atomically load/save the whole model at once.Thus, design your model API to be independent of how the storage and retrieval is implemented, and start with the easiest backend implementation to do the job, knowing you can swap it out at any time.