Въз основа на някои от обратните връзки, които получавам, които изглежда твърдят, че не е възможно да се раздели, като се използва поле за списък като ключ за разделяне, исках да илюстрирам как този случай на употреба може да бъде разделен, като се използват ограниченията на MongoDB:
Оригинален обект:
widget:
{
primary_key: '2389sdjsdafnlfda'
categories: ['hair', 'nails', 'dress']
colors: ['red', 'white']
#All the other fields in the document that don't need to be queried upon:
...
...
}
Слоят с данни разделя обекта на множество указателни обекти въз основа на броя на елементите в полето, избрано за ключа на фрагмента:
widget_pointer:
{
primary_key: '2389sdjsdafnlfda'
categories: 'hair',
colors: ['red', 'white']
}
widget_pointer:
{
primary_key: '2389sdjsdafnlfda'
categories: 'nails',
colors: ['red', 'white']
}
widget_pointer:
{
primary_key: '2389sdjsdafnlfda'
categories: 'dress',
colors: ['red', 'white']
}
Обяснение:
- Полето
categories
вече може да бъде shard ключът в MongoDB. - Оригиналният обект вече ще се съхранява в хранилище за ключ-стойност. Заявките към данните в MongoDB ще върнат указателен обект, който ще се използва за получаване на обекта от хранилището за ключ-стойност.
- Заявките за данните на MongoDB ще засегнат само един фрагмент.
- Вмъкванията в данните на MongoDB ще засегнат толкова фрагменти, колкото има елементи в списъка, в повечето случаи само малка част от общия брой фрагменти ще бъдат засегнати.