Хотя это, вероятно, зависит от других параметров (таких как размер атрибутов, их тип, соотношение чтения / записи), я думаю, что база данных документов, такая как MongoDb (или couchDb, даже если я не использую ее лично) было бы хорошо подходит. Причина в том, что вы хотите делать запрос на основе «значения» атрибутов, что невозможно в базе данных, такой как Redis (без изменения предложенной вами схемы, и хотя Redis отлично подходит для многих случаев использования) ).
С такими документами: {name: "Item 1", AttributeA: "ValueA", AttributeB "ValueB" ...} вы можете реализовать запросы, о которых вы упомянули:
db.docs.find ({имя: "Элемент 2"}); (возможно, установив индекс на имя, если вы часто используете этот запрос)
db.docs.distinct ( 'attributeA');
db.docs.find ({attributeB: {$ exist: true}}});
и так далее ...
Вы можете найти очень хороший драйвер для nodejs mongodb здесь: https://github.com/christkv/node-mongodb-native
Надеюсь, это поможет!