От переводчика:
Хочу представить вашему вниманию перевод ответа одного из разработчиков Redis, на вопрос о том, какие структуры данных используются внутри Redis. Оригинальную дискуссию вы можете найти на stackoverflow.
Я попробую ответить на вопрос, но начну с того, что на первый взгляд может показаться странным: если вы не интересуетесь внутренностями Redis, вы
не должны заботиться о том, как реализованы структуры данных изнутри. Причина этому проста — сложность каждой команды Redis вы можете найти в документации, и если у вас есть набор операций и их вычислительная сложность, то единственное, что вам нужно, это некоторое представление об использовании памяти (и потому, что мы делаем много оптимизаций, в зависимости от данных, лучший способ получить эти последние цифры это тесты в реальных условиях)
Но поскольку вы спросили, вот внутренние реализации каждой структуры данных Redis:
- Строки реализованы с использованием библиотеки динамических строк C, так что мы не платим (говоря асимптотически) за выделение памяти в операциях добавления. Таким образом мы получаем сложность добавления O(N), вместо, например, квадратичной.
- Списки реализованы как связные списки.
- Множества и Хэши реализованы как хэш-таблицы.
- Упорядоченные множества реализованы как списки с пропусками (особый тип сбалансированных деревьев)
Всем привет! Рад представить вам уже пятую статью из цикла «Внутреннее устройство и архитектура сервиса AtContent.com». В ней я расскажу о том как сделать работу с Azure Table Storage более функциональной и удобной.
Платформа Windows Azure дает очень мощный набор инструментов для реализации своих идей. И среди них – Azure Table Storage – нереляционная база данных с неограниченным объемом. Большим плюсом этого хранилища является то, что можно делать к нему достаточно сложные запросы. Но помимо этого есть и некоторые неудобства. Так, например, с помощью LINQ нельзя выполнить запросы, в которых есть логика Or или Contains без дополнительных модификаций.

Хочу поделиться историей, как наш проект слёг на полтора часа, и опытом выяснения причин.
В один прекрасный момент мы понимаем, что часть сайта грузится с 15-минутной задержкой, а другая часть попросту не работает, выдавая 504 ошибку.
Внимание! Поскольку люди любят умничать, и не любят читать — пишу тут. Цель поста — подсказать, как выйти из аварийной ситуации, всё остальное просто лирика, на которой почему-то все заостряют внимание.

Наконец-то вместо уговоров подождать еще немного, на вопрос “Есть ли InterSystems GlobalsDB/Caché Extreme под Microsoft .Net?” можно ответить утвердительно. В новой версии Caché 2012.2 (Field Test) и GlobalsDB v2012.296 появилась поддержка этой платформы.
Попытаюсь в любимом для многих разработчиков на одной шестой суши стиле, то есть без чтения
install notes и прочего, исследовать, что, собственно говоря, представляет дистрибутив GlobalsDB под Windows.
Хотелось бы рассказать о некоторых особенностях
Redis при использовании на боевом сервере. Будут рассмотрены альтернативы при сохранении данных на диск, позволяющие достичь различной степени надёжности при сбоях. Так же будут приведены примеры конфигурации для резервного копирования и мониторинга. Используется Redis 2.2.11 на Amazon EC2 с установленной Ubuntu 10.10.
12 марта анонсирован выход очередной версии бесплатной NoSQL InterSystems СУБД — GlobalsDB v2012.296.

В новой версии появился интерфейс .NET API, внесены незначительные изменения и исправлен ряд ошибок.
Полная версия документа на английском языке доступна на сайте
GlobalsDB.org.
Загрузить
GlobalsDB.
Подробности под катом.
29 марта в 18-00 по восточному времени (30 марта 3 часа ночи по Москве) начнется очередной
турнир программистов GlobalsDB, бесплатной NoSQL СУБД от InterSystems.
Формат мероприятия: 1 неделя на выполнение задания, с выкладкой его на
github ресурс.
Приз победителю — $3500 и специальный пресс-релиз InterSystems в его честь.
Моя любимая тема в программировании — копаться в негативных эффектах, которые преподносят нам самые, на наш взгляд, тривиальные операции.
Один из таких вопросов — удаление записей в базе данных. Данная операция, по мнению большинства программистов, ускоряет работу с базой и делает её компактнее. Фокус состоит в том, что это неправда. И если с реляционными базами это неправда только отчасти, то с NoSQL это может быть полнейшим враньём.
Вот о такой проблеме в Apache CouchDB мы и поговорим далее.
Картинка в тему:
В релизе 2.1
было заявлена реализация такой функциональности, как новый фреймворк агрегирования данных. Хотелось бы рассказать о первых впечатлениях от этой весьма интересной штуки. Данный функционал должен позволить в некоторых местах отказаться от Map/Reduce и написания кода на JavaScript в пользу достаточно простых конструкций, предназначенных для группировки полей почти как в SQL.

Авторы позиционируют
HyperDex как распределённое, отказоустойчивое, легко-маштабируемое,
заточенное на очень быстрый поиск NoSQL key-value хранилище.
Главная фича — новый принцип хранения объектов в многомерном эвклидовом пространстве (рис. слева), используя гиперпространственное хэширование (hyperspace hashing) (
на который, кстати, авторы сейчас получают патент), которое позволяет выполнять большинство типичных задач
от 2 до 13 раз быстрее, чем в MongoDB, Redis, Cassandra.
23 февраля 2012, 07:51
222