Доброго времени суток!
Рис. 1. Пример топологии NoSQL базы.
Минимальная еденица данной системы - Storage Node (применительно к картинке выше - один из девяти серверов). Каждый Storage Node состоит из партиций (помните в самой первой статье говорилось, что на высшем уровне абстракции можно понимать Oracle NoSQL DB как одну огомную таблицу,на самом деле сегментируемую по хэшу от ключа на несколько частей). Секционирование - способ разделения инормации на независимые сегменты. Каждая секция имеет локальный B-Tree индекс. Соответственно, если у нас будет мало секций мы получим большие локальные индексы, а как известно чем больше индекс, тем выше стоимость добавления нового элемента.
Если секций будет очень много - мы получим высокую стоимость накладных расходов на вычисление нужной секции. В общем надо искать компромисс.
Рис.2. Key - Value Store в реляционном мышлении.
Строго говоря, Storage Node - логическая еденица(процесс в ОС), то есть один сервер может включать в себя несколько Storage Node. К примеру, если у нас есть 3 сервера и мы хотим обеспечить 3 репликацию данных - без проблем. Это будет выглядеть как то так:
Рис 3. Пример топологии NoSQL базы.
Но все же не рекомендуется держать всю базу на одном очень мощном сервере. Идея NoSQL баз в разнесении хранилища на множество дешевых серверов.
Это касаемо топологии хранилища. Теперь хотелось бы сделать одно маленькое, но весьма значительное замечание по поводу ключа. Ключ состоит из 2х частей major и minor (пример: /Smith/Bob/-/foto/, /Smith/Bob - это major составляющая ключа, а /foto/ - minor). Major part + Minor part = Key. Minor составляющей может и не быть. Major составляющая влияет на распределение ключа по партициям (и как следствие по серверам), minor - просто вспомогательная составляющая.
Пример:
Key: /Mijatovic/foto/ Value: здесь будет аватар
Key: /Mijatovic/foto/-/album1/My_dog Value: здесь будет фотография собаки
Key: /Mijatovic/foto/-/album1/My_Саt Value: здесь будет фотография кошки
В первом примере Minor составляющая отсутствует. У всех трех записей одинаковый Major key => все записи попадут в одну партицию (ну и конечно же в одну репликационную группу).
Key: /Mijatovic/foto/ Value: здесь будет аватар
Key: /Mijatovic/foto/album1/ - /My_dog Value: здесь будет фотография собаки
Key: /Mijatovic/foto/album1/ - /My_Саt Value: здесь будет фотография кошки
В этом случае Major key у второй и третей записи будет отличаться от первой. Скорее всего 1 запись попадет в партицию отличную от партиции 2 и 3 записи. Вот как то так...
Если у вас есть какие-либо вопросы по Oracle NoSQL - задавайте в комментах, постараюсь ответить, либо пишите на oracle.nosql@gmail.com.
Продолжение следует!
"едИница" пишется правильно. А так очень даже толково написано, спасибо!
ОтветитьУдалить