Na podstawie niektórych informacji zwrotnych, które otrzymuję, które wydają się twierdzić, że nie można shardować przy użyciu pola listy jako klucza sharda, chciałem zilustrować, w jaki sposób można podzielić ten przypadek użycia przy użyciu ograniczeń MongoDB:
Oryginalny obiekt:
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:
...
...
}
Warstwa danych dzieli obiekt na wiele obiektów wskaźnikowych na podstawie liczby elementów w polu wybranym dla klucza fragmentu:
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']
}
Wyjaśnienie:
- Pole
categories
może być teraz kluczem fragmentu w MongoDB. - Oryginalny obiekt będzie teraz przechowywany w magazynie klucz-wartość. Zapytania dotyczące danych w MongoDB zwrócą obiekt wskaźnika, który zostanie użyty do pobrania obiektu z magazynu klucz-wartość.
- Kwerendy dotyczące danych MongoDB trafią tylko w jeden fragment.
- Wstawienia danych MongoDB trafią na tyle fragmentów, ile jest elementów na liście, w większości przypadków będzie to miało wpływ tylko na mały podzbiór całkowitej liczby fragmentów.