2016-01-13

Longevity: A Persistence Framework for Scala and NoSQL

Longevity is a persistence framework for Scala and NoSQL. We currently support MongoDB, with a Cassandra back end coming soon. [UPDATE: We've had a Cassandra back end for a long time now. We now have a SQLite back end as well.] After having been working on this project for over a year, I am so excited to finally share it with you! I've been working hard to put in a core set of features that would make the tool feasible for you to use in a real application. The result is our MMP release, which we just put out yesterday.

I've worked on database applications for nearly two decades, in Scala, Java, and other languages. I've used any number of databases, and all kinds of database drivers and ORMs, including about 8 years working with Spring and Hibernate. My experience is that persistence concerns inevitably leak out into other - indeed, sometimes all other - parts of your application. Perhaps you have a database ID appearing in your API. Or there is a service method that contains commit-strategy logic that you wish was managed by JPA fetch strategies. We typically don't even worry about isolating persistence concerns, because it seems like such a hard thing to do.

Over the years, I've considered various ways to isolate persistence concerns from the rest of the application development process. I've implemented a lot of this where I was able, but the limitations that come along with using a driver or an ORM make it difficult. Many of these difficulties are passed on from the underlying database technology, and some reflect weaknesses of the programming languages and paradigms in use. I've found that NoSQL document databases such as MongoDB are much better at mapping a domain model than relational databases are. And the F/OO programming style of Scala provides for a wonderful experience developing a library API that is fluent and clear.

Longevity is designed to support multiple document-style NoSQL back ends. The 0.4 release only supports a Mongo back end, but a Cassandra back end is the next major feature to be implemented.
UPDATE: We are now up to release 0.19, and the Cassandra back end has been in place since March 2nd, 2016.
While a basic feature set is in, we are continually working on improving this tool. If there is something that is sorely missing for you please let us know, and we will prioritize it as best as we can. (We'd also be thrilled if you would consider contributing!)

If you want to get a feel for what using longevity is like, take a look at our Getting Started Guide. For more detail, see our User Manual. The manual is not entirely complete yet, but the core features are all described in detail there now.
UPDATE: Our user manual has been exhaustive and complete for many months.
We hope you will find longevity a suitable solution for the persistence concerns of your database application. Please take a look and see what you think.

No comments:

Post a Comment