9 декабря в Екатеринбурге прошла первая в России конференция, посвященная NoSQL-системе Cassandra. Организаторами конференции выступили компании IT-People, СКБ Контур и DataStax. Поддержку мероприятию оказало Министерство транспорта и связи Свердловской области.
Рубрика «nosql» - 24
В Екатеринбурге завершилась Cassandra conf
2013-12-23 в 11:43, admin, рубрики: big data, cassandra, it-people, nosql, Блог компании IT-People, екатеринбург, конференция, метки: cassandra, it-people, екатеринбург, конференцияAWS объявила о новых инстансах. Теперь до 32 ядер, 244ГБ RAM, 8×800 ГБ SSD
2013-12-20 в 13:45, admin, рубрики: Amazon Web Services, AWS, cassandra, mongodb, nosql, высокая нагрузка, высокая производительность, метки: aws, cassandra, mongodb, nosql, высокая нагрузка, высокая производительностьТолько что получил анонс, что на AWS стали доступны новое поколение Amazon EC2 High I/O инстансов. Данные типы инстансов базируются на новом поколении процессоров Intel Ivy Bridge. Каждый виртуальный CPU (vCPU) соответствует одному аппаратную потоку исполнения (hyperthread) процессора Intel Xeon E5-2670 v2 (Ivy Bridge).
Вот табличка:
Читать полностью »
SELECT…WHERE запросы в Cassandra 2.0 на CQL3
2013-12-07 в 11:52, admin, рубрики: big data, Cassandara, CQL, CQL3, nosql, метки: Cassandara, CQL, CQL3 Cassandra (далее C*) ограничивает WHERE
запросы из-за своей внутренней структуры. Эта статья вам покажется сложной, запутанной, если вы не читали первую статью из цикла, где я рассказывал как устроена С*. Прочтите её, пожалуйста, прежде чем приступать к этой.
Цель этой статьи — выступать справочником для C* новичков.
Некоторые отличия CQL от SQL
В SELECT
запросах Cassandra Query Language (CQL) отсутсвутют привычные нам SQL операции JOIN
, GROUP BY
. А операция WHERE
сильно урезана. В SQL вы можете фильтровать по любой колонке, тогда как в CQL только по распределительным ключам (partition key), кластерным ключам (clustering columns) и вторичным индексам.
Заметка: В С* 2.0 можно создавать вторичные
INDEX
-ы у любой колонки наподобие SQL индексов. Фактически же, вторичные индексы Кассандры — это скрытая от вас дополнительная таблица, поэтому производительностьWHERE
запросов по ним хуже запросов по ключевым колонкам.
Пример моделирования схемы в Cassandra 2.0 на CQL3
2013-12-07 в 2:28, admin, рубрики: big data, Cassandara, CQL, CQL3, nosql, метки: Cassandara, CQL, CQL3В предыдущей статье я доходчиво рассказал как Cassandra хранит данные. Настоятельно рекомендую хотя бы пробежаться глазами. В этой статье мы создадим простенькую БД, чтобы использовать её в следующей статье, которая будет полностью посвящена выборке/поиску данных.
Задача
Допустим у нас есть ad network, который откручивает рекламу. Люди кликают на баннеры, заказчик рекламы платит, мы (сеть), реселлеры (распространители) и хостеры рекламного места имеем на этом доход. Реселлеры рекламного места работают за 20%. Этот процент растёт из-за различных факторов, самое главное, что он не постоянен и новый процент может применяться, например, на клики месячной давности.
Нужно: быстро уметь считать доход каждого реселлера за любой промежуток дней, вести график кликов в режиме реального времени.
Читать полностью »
uid.me — сервис личных страниц (технические детали inside)
2013-12-06 в 9:56, admin, рубрики: javascript, mojolicious, mongodb, mongodb sharding, nosql, perl, ucoz, асинхронное программирование, Блог компании uCoz, Веб-разработка, Социальные сети и сообщества, метки: javascript, mojolicious, mongodb, mongodb sharding, nosql, perl, ucoz, асинхронное программированиеДобрый день!
Мы хотим сделать обзорный пост, посвящённый нашему новому проекту. Обзор затронет как функционал, так и техническую часть, надеемся, это сделает статью интересной как профессиональным разработчикам, так и тем, кто читает Хабр с целью держать руку на пульсе Технологии.
Тем, кому интересна только техническая сторона проекта — рекомендуем сразу перейти ко второй части.
ЧАСТЬ 1. Лирическая
Мы — это команда разработки сервиса личных страниц uid.me.
Личная страница — это, например, вот так:
uid.me — cервис личных страниц на базе Perl, Mojolicious и MongoDB
2013-12-03 в 16:13, admin, рубрики: javascript, mojolicious, mongodb, mongodb sharding, nosql, perl, ucoz, асинхронное программирование, Социальные сети и сообщества, метки: javascript, mojolicious, mongodb, mongodb sharding, nosql, perl, ucoz, асинхронное программированиеДобрый день!
Мы хотим сделать обзорный пост, посвящённый нашему новому проекту. Обзор затронет как функционал, так и техническую часть, надеемся, это сделает статью интересной как профессиональным разработчикам, так и тем, кто читает Хабр с целью держать руку на пульсе Технологии.
Тем, кому интересна только техническая сторона проекта — рекомендуем сразу перейти ко второй части.
ЧАСТЬ 1. Лирическая
Мы — это команда разработки сервиса личных страниц uid.me.
Личная страница — это, например, вот так:
Программа CassandraConf.ru
2013-12-03 в 12:01, admin, рубрики: cassandra, nosql, Администрирование баз данных, базы данных, Блог компании IT-People, конференция, метки: cassandra, nosql, базы данных, конференция, С++ Расписание и тезисы докладов готовы и доступны на сайте CassandraConf.ru. Итак, что нас ждет 9 декабря:
MongoDB — это горизонтально масштабируемая база данных
2013-12-01 в 20:32, admin, рубрики: mongodb, mysql, nosql, высокая производительность, шутки, юморВнимание: тег «юмор».
И в заключение. Мы пришли к выводу, что MySQL — это прекрасная база данных для нашего сайта. Вопросы?
Да, у меня есть вопрос. Почему вы не использовали MongoDB? MongoDB — это горизонтально масштабируемая база данных, она не использует SQL или JOINы, поэтому обладает высокой производительностью.
Это прекрасный вопрос. Мы изучили несколько NoSQL баз данных и поняли, что все варианты пока ещё незрелы для применения на работающих проектах. MySQL — это проверенная база данных, которая используется во всём мире и имеет все необходимые нам функции.
Но она не масштабируется. Все знают, что реляционные базы данных не масштабируются, потому что они используют JOINы и записывают на диск.
Читать полностью »
Про Redis (официальный сайт, материалы на Хабре) написано много, но мне до сего дня не хватало материала, который послужил бы шпаргалкой по его практическому использованию, а так же справочником по базовым теоретическим моментам. Постараюсь заполнить этот пробел в богатой базе знаний Хабра.
Я поставил перед собой цель показать возможности Redis с помощью примеров кода. После публикации приму любые предложения по улучшению материала.
Здесь используется общение с сервером через консольный клиент, но, основываясь на приведенных примерах, можно легко найти реализацию этих примеров в клиентских библиотеках на вашем любимом языке.
Ключи
Redis — хранилище данных в формате «ключ-значение». Факты о ключах:
- Ключи в Redis — бинарно-безопасные (binary safe) строки.
- Слишком длинные ключи — плохая идея, не только из-за занимаемой памяти, но так же и в связи с увеличением времени поиска определенного ключа в множестве в связи с дорогостоящим сравнением.
- Хорошая идея — придерживаться схемы при построении ключей: «object-type:id:field».
Типы данных Redis
- Строки (strings). Базовый тип данных Redis. Строки в Redis бинарно-безопасны, могут использоваться так же как числа, ограничены размером 512 Мб.
- Списки (lists). Классические списки строк, упорядоченные в порядке вставки, которая возможна как со стороны головы, так и со стороны хвоста списка. Максимальное количество элементов — 232 — 1.
- Множества (sets). Множества строк в математическом понимании: не упорядочены, поддерживают операции вставки, проверки вхождения элемента, пересечения и разницы множеств. Максимальное количество элементов — 232 — 1.
- Хеш-таблицы (hashes). Классические хеш-таблицы или ассоциативные массивы. Максимальное количество пар «ключ-значение» — 232 — 1.
- Упорядоченные множества (sorted sets). Упорядоченное множество отличается от обычного тем, что его элементы упорядочены по особому параметру «score».
Про типы данных Redis есть отдельная хорошая статья: «Структуры данных, используемые в Redis».
Читать полностью »
Моделирование данных в БД Cassandra 2.0 на CQL3
2013-11-24 в 5:36, admin, рубрики: big data, cassandra, CQL, CQL3, nosql, метки: cassandra, CQL, CQL3Статья предназначена для людей пытающихся создать свою первую «таблицу» в БД Cassandra.
За посление несколько релизов Кассандры разработчики взяли правильный вектор направленный на простоту использования этой базы данных. Учитывая её достоинства, такие как скорость работы и отказоустойчиваость, её было сложно как администрировать, так и писать под неё. Сейчас же количество танцев с бубном, которые надо провести прежде чем запустить и начать разрабатывать, свели к минимуму — несколько комманд в bash или один .msi в Windows.
Более того, сильно облегчил жизнь разработчикам недавно обновлённый CQL (язык запросов), вытеснив бинарный и довольно сложный язык Thrift.
Лично я столкнулся с проблемой наличия отсуствия русскоязычных руководств по Кассандре. Самую, на мой взгляд, сложную тему мне бы хотелось поднять в этой статье. Как же дизайнить базу данных то?
- Статья НЕ предназначена для людей, которые впервые видят слово Cassandra.
- Статья НЕ служит как рекламный материал той или иной технологии.
- Статья НЕ стремится доказать что-либо кому-либо.
- Если скорость записи/чтения не так важна, и если «100% uptime» не сильно нужен, и если у вас всего лишь несколько миллионов записей, то, вероятно, эта статья, да и вся Cassandra в целом, — не то, что вам нужно.
Ликбез
- Cassandra (далее C*) — распределённая NoSQL БД, поэтому все решения «почему так, а не вот так» всегда принимаются с оглядкой на кластеризацию.
- CQL — это SQL-подобный язык. Аббревиатура от Cassandra Query Language.
- Node (нода) — инстанс C*, или java процесс в терминах операционных систем. На одной машине можно запустить несколько нод, например.
- Основная единица хранения — строка. Строка целиком хранится на нодах, т.е. нет ситуаций когда полстроки — на одной ноде, полстроки — на другой. Строка может динамически раширяться до 2 миллиардов колонок. Это важно.
- cqlsh — коммандная строка для CQL. Все примеры ниже выполняются именно в ней. Является частью дистрибутива C*.
Основное правило моделирования данных в C*
Кассандра создавалась как распределённая БД с упором на максимальную скорость записи и чтения. Моделировать «таблицы» нужно в зависимости от SELECT
запросов вашего приложения.
В SQL мы привыкли накидать таблиц, связей между ними, и потом уже SELECT ... JOIN ...
чего хотим и как хотим. Именно JOIN-ы основная проблема с произвоидтельностью в RDBMS. Их нет в CQL.
Первый пример.
У нас есть сотрудники какой-то компании. Создадим таблицу (которые на самом деле называются Column Family, но для простоты перехода с SQL на CQL используют слово table) на CQL и заполним данными:
CREATE TABLE employees (
name text,
age int,
role text,
PRIMARY KEY (name)
);
INSERT INTO employees (name, age, role) VALUES ('john', 37, 'dev');
INSERT INTO employees (name, age, role) VALUES ('eric', 38, 'ceo');
Таблицы в C* обязаны иметь PRIMARY KEY. Он используется для поиска ноды, в которой хранится искомая строка.
Прочитаем данные:
SELECT * FROM employees;
Эта картинка — руками разукрашенный вывод cqlsh.
Выглядит как обычная таблица из реляционной БД. C* создаст две строки.
Внимание! Это две внутренние структуры строк, а не таблицы. Если чуть слукавить, то можно сказать, что каждая строка — это как маленькая таблица. Далее понятней.
Читать полностью »