0

In the project I have been working on, the data modeling requirements are:

A system consisting of N number of clients with each having N number of events. An event is an entity with a required name and timestamp at which it occurs. Optionally, an event may have N number of properties (key/value pares) defining attributes that a client want to store with the particular instance of that event.

The system will have mostly:

  • inserts – events are logged but never updated.
  • selects – reports/actions will be generated/executed based on events and properties of any possible combinations.

The requirements reflect an entity-attribute-value (EAV) data model. After researching for sometimes, I feel that a relational dbms like Sql Server might not be a good fit for this. (correct me if I'm wrong!)

So I'm leaning toward NoSql option like MongoDb/CouchDb/RavenDb etc. My questions are:

  1. What is the best fit in available NoSql solutions keeping in view of my system's heavy insert/select needs?
  2. I'm also open for relational option if these requirements can be translated into relational schema. Although I personally doubt this, but after reading performance DBA answers (like referenced here), I got curious. However, I couldn't figure out myself an optimal relational model for my requirements, perhaps the system being rather generic.

thanks!

Community
  • 1
  • 1
Varun K
  • 3,593
  • 2
  • 25
  • 26

1 Answers1

0

MongoDB really shines when you write unstructured data to it (like your event). Also, it is able to sustain pretty heavy write load. However, it's not very good for reporting. At least, for reporting in the traditional sense.

So, if your reporting needs are simple, you might get away with some simple map-reduce jobs. Otherwise you can export data to a relational database (nightly job, for example) and report the hell out of it.

Such hybrid solution is pretty common (in my experience).

Sergio Tulentsev
  • 226,338
  • 43
  • 373
  • 367