MongoDB позволит вам эффективно хранить эти данные в Типе 1. В зависимости от вашего использования они будут выглядеть так (данные в JSON):
Массив строк
{ "_id" : 1, "strings" : ["a", "b", "c", "d", "e"] }
Набор строк KV
{ "_id" : 1, "s1" : "a", "s2" : "b", "s3" : "c", "s4" : "d", "s5" : "e" }
Исходя из ваших запросов, я бы, вероятно, использовал метод Array of Strings . И вот почему:
Возможно, мне нужно знать, что все строки
данный идентификатор содержит и затем пересекается
список с другим полученным списком
для другого ID.
Это очень просто, вы получаете один идентификатор ключа. В коде это будет выглядеть примерно так:
db.my_collection.find({ "_id" : 1});
Мне может понадобиться узнать, какие все идентификаторы содержат данную строку
Так же просто:
db.my_collection.find({ "strings" : "my_string" })
Да, это так просто. Я знаю, что «строки» технически являются массивом, но MongoDB распознает элемент как массив и перебирает, чтобы найти значение. Документы для этого здесь .
В качестве бонуса вы можете проиндексировать поле «strings» и получить индекс для массива. Таким образом, приведенная выше находка будет работать относительно быстро (с очевидным компромиссом: индекс будет очень большим).
С точки зрения масштабирования кластер из 14 узлов может быть почти излишним. Однако Mongo поддерживает наборы автоматического разделения и репликации. Они даже работают вместе, вот пост в блоге от 10gen участника, чтобы вы начали (10gen делает Mongo).