You can also answer this question. I have to comment that I'm not strong in NoSQL, so I'm leaning towards SQL.
I would do it as a set of three tables. You will see that this is called the logic of a pair of entity values ββon the Internet ... it is a way of handling multiple dynamic attributes for elements. Let's say you have a bunch of products and each has a few attributes.
Prd 1 - a,b,c Prd 2 - a,d,e,f Prd 3 - a,b,d,g Prd 4 - a,c,d,e,f
So, here are 4 products and 6 attributes ... the same theory will work for hundreds of products and thousands of attributes. The standard way to keep this in one table requires product information along with 6 columns for storing data (in this setting, at least one third of them are zero). The added new attribute means changing the table to add another column to it, and come up with a script to populate the existing one or just leave it zero for all existing ones. Not the funniest, maybe a headache.
An alternative to this is to set a pair of name values. You want the header table to contain common values ββamong your products (for example, name or price ... everything rpoducts always has). In our example above, you will notice that the attribute βaβ is used for each record ... this means that attribute a can also be part of the header table. We will call the key column here 'header_id'.
The second table is a look-up table that simply stores the attributes that can be assigned to each product and assigns an identifier to it. We call the table attribute with atrr_id for the key. Rather straight forward, each attribute above will be one line.
Quick example:
attr_id, attribute_name, notes 1,b, the length of time the product takes to install 2,c, spare part required etc...
This is just a list of all your attributes and what this attribute means. In the future, you will add a row to this table to open a new attribute for each heading.
A final table is a mapping table that actually contains information. You will have your product id, attribute id, and then value. Commonly called a detail table:
prd1, b, 5 mins prd1, c, needs spare jack prd2, d, 'misc text' prd3, b, 15 mins
See how data is stored as a product key, value label, value? Any future product may have any combination of any attributes stored in this table. Add new attributes - add a new row to the attribute table, and then populate the details table as needed.
I believe there is also a wiki ... http://en.wikipedia.org/wiki/Entity-attribute-value_model
After that, it just calculates the best methodology for outputting your data (I would recommend Postgres as the db open source option)