Today I had the pleasure of spending some time with Attila Kisko, a Membase contributor and the author and maintainer of Enyim - the Membase Client Library for .NET. On holiday in San Francisco from Budapest, Hungary, Attila came by the office for a visit. I enjoyed our conversation, and thought I’d share some of it with others who may want to know a bit about the man behind one of the most popular and widely deployed open source client libraries within the Membase user community.
How’d you get started coding?
I started very young, at age 7 or 8, developing on the Commodore 64. I was coding in assembly language and spending most of my energy at that point hacking on games. I also spent time with the HT-1080, which was a Hungarian version of the TRS-80.
From there I transitioned to the IBM-PC platform and was coding in Turbo Pascal and using Borland Delphi. At this point I started developing business software, and built a complete, packaged solution for a friend of mine, including an installer, CD packaging and a slick user interface. Though I never got paid for the work by my friend : ), it did leave me with a very nice demo of my capabilities.
That demo led to my next role at Fathom Technologies, a development outsourcing company in Hungary. I joined Fathom as one of the first employees and stayed with the firm for 7 years as we grew exponentially. My role there gave me the opportunity to travel quite a bit and to work with a number of large technology companies such as Microsoft, Autodesk, Oracle and others. Fathom was acquired by EPAM Systems. As often happens, advancement in the company took me from coder, to architect to manager. The further I got from the code, the less happy I found myself, so I decided to leave and devote all my energy to FreeBlog which was a hobby project I had begun in 2003. Now it is my primary “day job” and I’m loving it.
How did the Enyim project start?
I started the project out of necessity. I was looking for a distributed caching solution for use behind Freeblog.hu and though Microsoft had some technology (which would later become Project Velocity, and now AppFabric Caching) Memcached was a much better solution. At that point, however, there was only one client library for Windows and it was a port of a Java library (a library that pre-dated Dustin’s Spy library). I didn’t really trust the code, and decided that I’d write my own from the ground up in C#.
When Membase (which was, at that point, NorthScale) introduced its initial Memcached distribution I really liked the direction of the technology, so I decided to build a special version of the Enyim client that supported the extensions. Membase is even more exciting, and I’ve been revising the client to keep it in step with the rapid advancements being made. I’m really looking forward to the query and data structure extensions. I’m working on a Redis client library right now and believe combining the capabilities of Redis with Membase would be a powerful solution – one I could use at Freeblog.hu. I’m looking forward to supporting those capabilities within Enyim : )
Did you consider writing Enyim in native, unmanaged C++ on Win32, versus .NET?
Not really. At this point, just about everyone developing on Windows is developing managed code. And it is a pain to call into an unmanaged library from managed code for what turns out to be a very minimal performance gain (probably on the order of 10%, at most). A bit of extra memory or a slight CPU upgrade to close the performance gap is all that is needed to avoid the pain.
Additionally, it is far easier to maintain C# code. The language and environment is very attractive.
Java done right?
Definitely. And the language is advancing far more rapidly than Java at this point. We’ve been getting extremely useful additions to the language each year. Java is a much more slowly moving project at this point.
What is the direction of Enyim? What features are you planning to add?
It seems to be working pretty well for people. I’ve not had a tremendous number of enhancement requests. One thing I am considering is implementing pipelining, like it exists in the Spy Java client. I’m not sure how meaningful that would be to people, but it is something I’m considering. And like I said before, I’m eagerly anticipating the functionality extensions to Membase and will continue to keep the client in step with those additions.
How easy or hard was it to write a Membase client? Any tips for other client writers?
Actually it was pretty easy. The biggest issue I had was around documentation. But that is to be expected given that the server was being built at the same time I was building the client. The documentation available now is pretty good. And Perry has been a huge help in getting any questions answered.
What do you think about the whole “NoSQL” movement?
In general, I think of NoSQL as code for “noLocking” and believe the most important characteristic is the support for automatically sharding a dataset across servers. I firmly believe the future of computing is in the cloud, and the cloud model is one of scaling out. That’s just too difficult to do with a relational data model, and NoSQL is really a response to that.
Do you have direct experience with other NoSQL technologies?
Yes. I’ve used both Redis and MongoDB. Membase is awesome technology, but in many cases I have to be able to interact with my data more directly in the database. I use hash and counter data structures in Redis to implement a number of features in freeblog.hu. I’d probably switch to Membase if it had that sort of functionality.