[erlang-questions] Conceptual questions on key-value databases for RDBMs users

Rudolph van Graan <>
Sun Nov 7 13:09:04 CET 2010


Hi Joe,

I am not sure I agree with your statement that traditional databases "suffer" from the fact that columns have simple types. You can easily (within reason) make them store complex types. They are at the most basic level also KV stores. The most basic abstraction for a "Table" is a set of tuples stored in a certain way. There is no reason why you cannot define a table with an arbitrary key and an arbitrary "blob" as value column and then storing your parse tree in that blob field. (Obviously you need to serialise/deserialise it - as you would need to do for any storage abstraction). 

The issue is that the information in the "blob" is not useful. Neither stored in the RDBMS, nor in a plain KV-store. You have to make it useful before you can do something with it or extract information from it. I guess that is why you said thus:

> I'm not thinking in terms of joins and normalizing things - the thought process
> is different - so far I haven't met any problems that don't map onto key-values
> queries.


I agree with you. If you throw distribution, map-reduce and lots of indices into the equation you can solve most issues this way. Except for one thing - invariance between multiple records and record types. There are very few examples where it is useful to live without invariance - searching being one example.

Invariance is a first order concept in any RDBMS system and essential for many types of systems. However, in my experience, you can achieve application-level invariance in other ways. But it requires substantially more work to approximate first order invariance using KV-stores.  It is sometimes simpler to have your data properly normalised I think. 

Rudolph van Graan


On Nov 4, 2010, at 10:01 PM, Joe Armstrong wrote:

> On Tue, Nov 2, 2010 at 9:14 PM, Silas Silva <> wrote:
>> This is a message I sent to the 
>> discussion group.  I thought it might be interesting to send it
>> erlang-questions, so here we go...
>> 
>> 
>> Hi all!
>> 
>> I have used SQL RDBMSs for some time.  I've never used any very advanced
>> feature, but I know enough of it to make database applications.
>> 
>> Nowadays, I decided it would be interesting to learn some NoSQL
>> databases concepts.  So I decided to pick up some Erlang and Mnesia, its
>> native key-value database.  More than scalability itself, the most
>> valuable feature for me is the possibility of replication and
>> synchronization between nodes.
>> 
>> But all pros have cons as companion.  The lack of a relationship model
>> is difficult for who is used to RDBMSs.  So, my question is:
>> 
>> * Is there any guide, tutorial, book, whatever, that tries to introduce
>>  NoSQL databases to SQL users?
>> 
>> * Key-value databases are surprising simple.  I know you solve
>>  relationship by denormalizing data.  What data should be normalized?
>>  What shouldn't?  How do you update denormalized data?
> 
> I'm no database expert so don't quote me here ...
> 
> As far as I am concerned traditional databases like SQL suffer
> from the fact that the data stored in an individual column is incredible
> simple - I can store an integer/string/... in a column but these are
> incredibly simple data structures. I want to store and retrieve incredibly
> complicated things - how do I store an XML parse tree in a single cell
> of a database? - How do I store a database in a database ...
> 
> In a decent K-V database the value of the key can be *anything* - an
> entire database for example, a compiler, ... no worries
> 
> Then when I analyse my problem I start thinking "I can store and retrieve any
> complex object that keys do I need to solve my problem?"
> 
> I'm not thinking in terms of joins and normalizing things - the thought process
> is different - so far I haven't met any problems that don't map onto key-values
> queries.
> 
> It seems to my that SQL provides you with the ability do to complex
> queries on simple things. K-V dbs can do simple queries on complex
> things.
> 
> /Joe
> 
> 
> 
>> 
>> Sorry for such simple and general questions.  Things were simple up to
>> the moment that I realized that it would be easily solved with a JOIN
>> SQL statement.  :-)
>> 
>> Thank you very much!
>> 
>> --
>> Silas Silva
>> 
>> ________________________________________________________________
>> erlang-questions (at) erlang.org mailing list.
>> See http://www.erlang.org/faq.html
>> To unsubscribe; mailto:
>> 
>> 
> 
> ________________________________________________________________
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3822 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20101107/08760727/attachment.bin>


More information about the erlang-questions mailing list