The iOS Development Podcast
Episode 32: 031 iPhreaks Show – High Performance Core Data with Matthew Morey
Panel
Matthew Morey (twitter github blog)
Jaim Zuber (twitter Sharp Five Software)
Andrew Madsen (twitter github blog)
Ben Scheirman (twitter github blog NSSreencast)
Charles Max Wood (twitter github Teach Me To Code Rails Ramp Up)
Discussion
00:35 - Matthew Morey Introduction
Buoy Explorer
ChaiOne
01:23 - Making Core Data Perform
05:45 - Importing Data
08:23 - Batch Sizing
09:37 - Photo Blobs
13:25 - Persistence
16:43 - Query Performance
String Comparison
Order of Operations
Hashing
Tokens
22:24 - Concurrency Models
Context
Notifications
Picks
iPad Telepresence Robot (Ben)
Mercurial SCM (Andrew)
Florian Kugler: Backstage with Nested Managed Object Contexts (Andrew)
Needle Doctor (Jaim)
Grado Labs Black1 (Jaim)
Remote: Office Not Required by Jason Fried and David Heinemeier Hansson (Chuck)
Audible (Chuck)
High Performance Core Data (Matthew)
Planet Money Podcast (Matthew)
Core Data: Data Storage and Management for iOS, OS X, and iCloud by Marcus S. Zarra (Matthew)
Next Week
Security with Rob Napier
Transcript
BEN: That’s the problem is that when my kids see the mixer, they are like, “Oh, knobs and buttons! I'm going to push all of them.”
CHUCK: Hey everybody and welcome to episode 31 of the iPhreaks Show. This week on our panel, we have Jaim Zuber.
JAIM: Boy, that is one cranky Rottweiler.
CHUCK: Andrew Madsen.
ANDREW: Hi from Salt Lake City.
CHUCK: Ben Scheirman.
BEN: Hi from Houston.
CHUCK: I'm Charles Max Wood from devchat.tv and we have a special guest this week, and that is Matthew Morey.
MATTHEW: Hello, also from Houston.
CHUCK: So since you haven’t been on the show before, do you wanna introduce yourself?
MATTHEW: Sure. So I got a couple of degrees in semiconductors physics and electrical engineering and quickly did nothing with those degrees. Spent a couple of years working on embedded electronics and a lot of C programming. And iOS SDK came out and jumped it to that, and been doing my own apps, including Buoy Explorer, which is a marine conditions app for surfers and water sports enthusiasts, where I implemented core data improperly there. And also I do work for a company here in Houston called ChaiOne, where we do a lot of client work.
CHUCK: Yeah, I've met those guys before.
MATTHEW: My boss is a real stickler.
CHUCK: Yeah, I've heard that a couple of times. We brought John today to talk about high performance core data. Are there tricks to making core data perform or does it just work, or what?
MATTHEW: Well, you can check the check box in the templates and it will generally just work. The problem is that it is such a complex framework and it’s just its so flexible and large. It’s very easy to put yourself in a bind or do the wrong thing and then suddenly, you'll have performance issues. I spent a lot of time making those mistakes, and I finally got to the point where I just wanted to figure all that out and kind of wrap my head around it. And so I've been focusing on that a lot, in particular.
JAIM: You mentioned in Buoy Explorer, you initially did it improperly. Do you wanna elaborate on what mistakes you made there?
MATTHEW: Yeah, so a common pattern in apps is you have to import data; either user’s data from the server or just general data, be it JSON, XML. On Buoy Explorer’s case, I'm downloading a bunch of data from these Buoys that are on the ocean and I measure wind conditions. And this data is very dense, so there's readings every 15 minutes from hundreds and thousands of these buoys. So there's a lot amount of data. And the way that the data is structured, I can't really fetch that data in a network efficient way. Unfortunately, I have to grab large amounts of data at a time. And importing that data into the persistence layer or into core data takes time; the data has to be parsed, the relationships have to be made, and then it has to be saved.