views:

449

answers:

5

There are many datastores written in Erlang, for example Riak, Dynomite, CouchDb, Scalaris, have I missed any?

I know that Java and C/C++ have also been used to write datastores (Cassandra, Hypertable, etc), but have any Datastores been written in any other functional languages such as F#, Scala, Haskell, Clojure, etc? The reason I am asking this (and many other functional programming and Erlang type questions) is to assess the feasibility of functional programming languages for real world projects.

As a side note it has been pointed out to me that I mean the actual implementation language of the datastore itself, and not the client language to access the datastore (ie: via ODBC).

+3  A: 

Hi

Your question puzzles me a little. You ask about datastores written in a variety of languages. Generally, when I program I look for a library or API to get and put data from and to the datastore in my chosen language. What the underlying datastore is written in (if it's written in anything, some datastores are no more than file layouts) I do not care.

And on that basis a little Googling will turn up Haskell-to-ODBC libraries, and I imagine the other languages will have similar facilities. I have no knowledge of these, so won't comment on their suitability for projects.

Regards

Mark

High Performance Mark
Yes, you are right, I did not explain it so clearly. I did mean the "underlying" data store as you pointed out.
Zubair
Also, interesting point you made, which datastores are just file layouts, as I would like to evaluate them?
Zubair
Really? Are you sure, that application data storage which doesn't copy data between processes of application and db doesn't have some benefits? Performance? In this case data store in specific language have big sense. Ordinal embedded db is not solution here because necessity of boiler plate. For example It is why mnesia in Erlang have big sense in some cases especially with native "stored procedures" and transactions (distribution involved).
Hynek -Pichi- Vychodil
Well, I guess when I think of a datastore I think of something persistent, something on disk, in which case yes, accessing data storag has to transfer data between disk and memory. And yes, there are cases where it is advantageous to have a very close fit between your programming language and your data store. But it is not necessary that the datastore be written in the same language as your programs. And, if you work in multi-language environments, as many of us do, which language do you choose ?
High Performance Mark
@Zubair: have a look at HDF5 or netCDF for data formats which are suitable for large datastores but are really just file layouts. Then, invent your own file format which contains all the information you need, translate it into a binary form, and there you have your own datastore which is language independent.
High Performance Mark
+6  A: 
  1. Data.Tcache is a transactional cache with configurable persistence for Haskell.
  2. Elephant is a persistent object database for Common Lisp with full transaction semantics.
  3. CLSQL - a SQL database for Common Lisp interface.
  4. AllegroCache is a high-performance, dynamic object caching database system for Allegro Common Lisp.
  5. Spark-Scheme comes with a built-in database and ODBC support.
Vijay Mathew
Brilliant, I will look into these. Thanks
Zubair
I had a brief look at these. Spark seems the nicest, but has the worst website :) Do any of them work in clustered settings?
Zubair
@Zubair Thanks for the favorable comment on Spark. That is my personal Lisp! About the website, do not have enough resources (all of time, money and personal) to create a better one.
Vijay Mathew
A: 

HALFS

ja
Production grade data store in Version 0.1 (and exists only this one) with webpage full of broken links. LOL
Hynek -Pichi- Vychodil
+3  A: 

In one sense you have already answered your own question. The systems you mention, and others from the comments, ARE written in functional langauges and ARE definitely real world projects, so the answer is yes.

rvirding
+2  A: 

FleetDB is schema-free database in Clojure.

Flamefork