2

For a new application based on Erlang, Python, we are thinking of trying out a non-RDBMS database(just for the sake of it). Some of the databases I've researched are Mongodb, CouchDB, Cassandra, Redis, Riak, Scalaris). Here is a list of simple requirements.

  1. Ease of development - I need to make a quick proof-of-concept demo. So the database needs to have good adapters for Eralang and Python.
  2. I'm working on a new application where we have lots of "connected" data. Somebody recommended Neo4j for graph-like data. Any ideas on that?
  3. Scalable - We are looking at a distributed architecture, hence scalability is important.
  4. For the moment performance(in any form) isn't exactly on top of my list, and I don't think we'll be hitting the limitations of any of the above mentioned databases anytime soon.

I'm just looking for a starting point for non-RDBMS database. Any recommendations?

Templar
  • 1,843
  • 7
  • 29
  • 42
Neo
  • 13,179
  • 18
  • 55
  • 80

2 Answers2

6

We have used Mnesia in building an Enterprise Application. Mnesia when in a mode where the tables are Fragmented performs at its best because it would not have table size limits. Mnesia has performed well for the last 1 year and is still on. We have around 15 million records per table on the average and around 24 tables in a given database Schema.

I recommend mnesia Database especially the one that comes shipped within Erlang 14B03 at the Erlang.org website. We have used CouchDB and Membase Server (http://www.couchbase.com)for some parts of the system but mnesia is the main data storage (primary storage). Backups have been automated very well and the system scales well against increasing size of data yet tables running under many checkpoints. Its distribution, auto-replication and Complex Data Model enabled us to build the application very quickly without worrying about replication, scalability and fail-over / take-over of systems.

Mnesia Scales well and it's schema can be configured and changes while the database is running. Tables can be moved, copied, altered e.t.c while the system is live. Generally, it has all features of powerful systems built on top of Erlang/OTP. When you google mnesia DBMS, you will get a number of books and papers that will tell you more.

Most importantly, our application is Web based, powered by Yaws web server (yaws.hyber.org) and we are impressed with Mnesia's performance. Its record look up speeds are very good and the system feels so light yet renders alot of data. Do give mnesia a try and you will not regret it.

EDIT: To quickly use it in your application, look at the answer given here

Community
  • 1
  • 1
Muzaaya Joshua
  • 7,736
  • 3
  • 47
  • 86
  • I briefly read about Mnesia and had given up on it because it seemed like a lot of effort to maintain. I need something that works out of the box. Will u recommend mnesia in that case? – Neo Sep 23 '11 at 18:53
  • yes i do. Depending on your data needs and architecture however, `CouchDB` or `riak` can do. To me, Mnesia is more comfortable – Muzaaya Joshua Sep 24 '11 at 11:36
4
  • Ease of development - I need to make a quick proof-of-concept demo. So the database needs to have good adapters for Eralang and Python.

Riak is written in Erlang => speaks Erlang natively

  • I'm working on a new application where we have lots of "connected" data. Somebody recommended Neo4j for graph-like data. Any ideas on that?

Neo4j is great for "connected" data. It has Python bindings, and some Erlang adapters How to Use Neo4j From Erlang. Thing to note, Neo4j is not as easy to Scale Out, at least for free. But.. it is fully transactional ( even JTA ), it persists things to disk, it is baked into Spring Data.

  • Scalable - We are looking at a distributed architecture, hence scalability is important. For the moment performance(in any form) isn't exactly on top of my list, and I don't think we'll be hitting the limitations of any of the above mentioned databases anytime soon.

I believe given your input, Riak would be the best choice for you:

  • Written in Erlang
  • Naturally Distributed
  • Very easy to develop for/with
  • Lots of features ( secondary indicies, virtual nodes, fully modular, pluggable persistence [LevelDB, Bitcask, InnoDB, flat file, etc.. ], extremely reliable, built in full text search, etc.. )
  • Has an extremely passionate and helpful community with Basho backing it up
tolitius
  • 22,149
  • 6
  • 70
  • 81
  • `Thing to note, Neo4j is not as easy to Scale Out, at least for free`. Same would hold true for Riak, right! – Neo Sep 23 '11 at 18:53
  • no. Riak is extremely easy to scale out for FREE. It is built to scale out and stay reliable. If you refer to EnterpriseDS, it just adds "Management Tools", "SNMP Monitoring Support", etc.. and mostly people get it if they need Basho's support. Neo4j, on the other hand, is not built with distribution in mind, so while graph things are extremely cool, taking it out of a single node mode is not all that simple. – tolitius Sep 23 '11 at 19:52
  • Ease of development clinched the issue for me. Although I will keep any eye out for Couchbase(looks promising), for the current project I'll got with Riak. – Neo Sep 25 '11 at 20:32