Friday, February 11, 2011

Sterling Object-Oriented Database 1.0 RTM

In early 2010 I was working on several Silverlight projects that were driven by the need to provide a working offline solution. Isolated storage was the obvious answer. Unfortunately, serializing 10,000 contacts came with some overhead and I realized quickly that I was following some similar patterns when it came to handling large sets of data: I would serialize the key fields (for example, names for contacts) in order to manage lists that I could filter in-memory, while saving the bulk of data for separate serialization events.

This inspired me to create Sterling as a way to ease the burden of persisting data. I looked at other options and didn't like having to change my classes just to save data (for example, make them derive from a database base class when I already was deriving them from my own helper classes). I also didn't like the inflexibility of options available. So, I set out to build something lightweight and non-intrusive that would give the user full control over serialization. The key would be to provide keys and indexes through lambda expressions to make it easy to access common data using LINQ to Object queries in memory while saving the "slow" part (loading from disk) for when it was needed.

I knew I would use Sterling in my own projects but I never imagined how popular it would become with other users. The timing for Sterling was perfect because when the Windows Phone 7 was released, the application developers were faced with a unique scenario called "tombstoning" that requires saving data when the application is swapped to the background. Sterling turns out to be a perfect fit for saving and restoring that data.

After asking some of my peers whether or not it would make sense to provide the solution as an open source community project, the responses were consistent and I realized this was definitely the way to go. I uploaded the bits and quickly went from a fledgling "0.1" release to several interim change sets that morphed into something I was comfortable calling "beta."

That's when the real power of the open source community began to transform the project. Numerous people were pulling down Sterling and using it in their applications, then providing me with valuable feedback for features and bug fixes. Some even sent me code-complete patches to implement various changes. We went from a small set of options for serializing data to a rich, interactive, highly adaptive and flexible solution that can handle a large variety of class configurations and relationships.

It's been a challenging 8 months of late nights fixing bugs, responding to feature requests, and writing a comprehensive guide to make sure the product is well documented, but I would be lying if I said I didn't enjoy every moment. I'm excited to see what the future versions will bring but for now am absolutely ecstatic to announce that I've released Sterling from beta to version 1.0. Enough people have shared the testimonial of their projects and helped me expand the battery of unit tests on both the phone and browser versions to finally make this milestone possible.

You can download the release at CodePlex. You can read the full user's guide at Please take the time to rate your experience with the product so others know what to expect, and if you are interested in what others are doing or are willing to share your own story, visit our Real World Sterling Projects thread. Thanks everyone and I look forward to exciting features to come.

Jeremy Likness

1 comment:

  1. Great work Jeremy. I can't wait to use this in my next project.