Оглавление:
Видео: Что такое база данных (sql, nosql) и зачем они нужны? 2024
Возможности быстрого считывания значений ключа хранятся в результате использования четко определенных ключей. Эти ключи обычно хэшируются, что дает хранилище значений ключа очень предсказуемый способ определения того, на каком разделе (и, следовательно, на сервере) находятся данные. Конкретный сервер управляет одним или несколькими разделами.
Хороший ключ позволяет однозначно идентифицировать единственную запись, которая отвечает на запрос, без необходимости просмотра каких-либо значений внутри этой записи. Плохой ключ потребует, чтобы ваш код приложения интерпретировал вашу запись, чтобы определить, действительно ли она соответствует запросу.
Если вы не хорошо разработали свой ключ, вы можете оказаться на одном сервере с непропорционально тяжелой нагрузкой, чем другие, что приводит к низкой производительности. Например, используя текущее системное время в качестве ключа, толкает все новые данные на последний узел в кластере, что приводит к кошмарному сценарию перебалансировки.
Разделение
Дизайн разделов важен, потому что некоторые хранилища ключевых значений, такие как Oracle NoSQL, не позволяют изменять количество разделов после создания кластера. Их распределение по серверам может быть изменено. Поэтому начните с большого количества разделов, которые вы можете разложить в будущем.
Одним из примеров разбиения является последовательный подход Хешинга Вольдеморта, как показано. Здесь вы видите одни и те же разделы, распределенные по трем серверам сначала, а затем через четыре сервера позже. Количество разделов остается одинаковым, но их распределение различно на серверах. То же самое относится к их репликам.
Доступ к данным по разделам
Хранилища с ключевыми значениями очень распределены без единой точки отказа. Это означает, что главный координационный узел не должен отслеживать серверы внутри кластера. Управление кластером выполняется автоматически по протоколу чата между узлами на сервере.
Вы можете использовать трюк в драйвере клиента, чтобы сжать максимальную производительность из-за извлечения и хранения ключей и значений - драйвер клиента отслеживает, какие серверы содержат диапазон клавиш. Поэтому клиентский драйвер всегда знает, с каким сервером разговаривать.
Большинство баз данных, включая NoSQL, передают запрос всем членам кластера. Этот кластер либо принимает внутреннюю запись, либо передает ее под капот на правильный узел. Эта настройка означает, что возможна дополнительная сетевая переключение между узлами, что может привести к задержке.
Во избежание латентности обнаружения большинство клиентских драйверов хранилищ ключей хранят список метаданных текущих узлов в кластере и который разделяет ключи, которыми управляет каждый узел.Таким образом, клиентский драйвер может связаться с правильным сервером, что ускоряет работу.
Если новый узел добавлен в кластер, а метаданные устарели, кластер сообщает драйверу клиента, который затем загружает последние метаданные кластера, прежде чем пересылать запрос на правильный узел. Таким образом, максимальная пропускная способность поддерживается с минимальными накладными расходами во время разработки. Другим преимуществом является то, что нет необходимости, чтобы балансировщик нагрузки передавал запросы на следующий доступный или наименее занятый сервер только на одном сервере (или на сервере реплики) когда-либо получал клиентский запрос, поэтому нет необходимости в балансировке нагрузки,