четверг, 28 мая 2009 г.

redis - persistent key-value database


Redis является серверным хранилищем данных вида ключ/значение и продолжает идеи таких проектов, как memcached и memcachedb. Для обеспечения максимальной производительности Redis во время работы хранит все данные в оперативной памяти, периодически сохраняя снимки базы на диск. Архитектура приложения - однопроцессная, основанная на обработке событий, что позволяет избежать блокировок.
Redis позволяет использовать в качестве значений строки, хеши, списки, множества. Механизмы транзакций отсутствуют, что компенсируется богатым набором атомарных команд: инкремент/декремент, стандартные операции над списками и множествами, (объединение, пересечение), переименование ключей, множественная выборка, функции сортировки и т.д.
Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений, во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями "публикация/подписка", при котором создается канал, сообщения из которого распространяются клиентам по подписке.
Redis является хорошим выбором для высоконагруженных сервисов, так как адаптирован под максимальную производительность и поддерживает репликацию. Заявленные значения производительности составляют 110000 операций записи или 81000 операций выборки в секунду на процессоре Xeon X3320 2.5 ГГц под управлением Linux 2.6
Для случаев когда данных слишком много, предусмотрен специальный режим, позволяющий держать в ОЗУ только ключи, а значения перемещать по мере необходимости в специальный файл подкачки. Также имеется поддержка транзакций, позволяющих выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения.
В настоящее время клиентские библиотеки доступны для большинства популярных языков ActionScript, C, C#, C++, Clojure, Common Lisp, Erlang, Go, Haskell, Haskell, haXe, Io, Java, Lua, Node.js, Objective-C, Perl, PHP, Python, Ruby, Scala, Smalltalk, Tcl



Комментариев нет:

Отправить комментарий