Скажем, у меня есть объекты для хранения. В банкомате было бы достаточно рассмотреть их как капли. Я хочу, чтобы сущности были сохранены в кластере. Ключ / ID объекта является (x, y) целочисленной координатой. Таким образом, они в основном расположены в двумерной сетке. Обновление любого объекта требует блокировки его 4-х соседей. Поскольку я хочу избыточности, я подумал, что лучше всего использовать избыточность, чтобы гарантировать, что соседи всегда доступны. Вот как может выглядеть дистрибутив:
1 2 3 4 5 6
1 [F][F][E][E][G][G]
2 [F][F][E][E][G][G]
3 [D][D][A][A][B][B]
4 [D][D][A][A][B][B]
5 [H][H][C][C][I][I]
6 [H][H][C][C][I][I]
Если A, B, C, D, E, F, G, H, I являются серверами, то A владеет (3,3) объектом, и ему необходимо знать (2,3) и (3,2) ) которые принадлежат другим серверам. Расположенный в блоках по 4, это всегда оставляет две стороны, принадлежащие другим серверам. Используя тройную избыточность, я хочу форсировать локальную копию всех соседей. Это даст мне эффект линейной масштабируемости.
Существует ли база данных, которая позволяет мне определить ключ шардинга / репликации, чтобы я мог указать такое распределение, или есть способ объединить x и y в одно значение, которое можно использовать для достижения этого?
Что мне нужно, так это низкая задержка и избыточность, а не экономия места на диске. Мои объекты имеют свойство «месторасположение ссылки»; транзакции только когда-либо обращаются к соседям, но использование одного и того же ключа для объекта и его соседей приведет к тому, что у всех будет один и тот же ключ.