The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Доступна СУБД Apache Cassandra 3.0

10.11.2015 21:57

Организация Apache Software Foundation представила релиз распределённой СУБД Apache Cassandra 3.0, относящейся к классу noSQL-систем и рассчитанной на создание высокомасштабируемых и надёжных хранилищ огромных массивов данных, хранимых в форме ассоциативного массива (хэша). Код проекта написан на языке Java и распространяется в рамках лицензии Apache 2.0. Изначально СУБД Cassandra была разработана в недрах компании Facebook и в 2009 году передана под покровительство фонда Apache. Промышленные решения на базе Cassandra, хранящие сотни терабайт данных, охватывающие сотни серверов и способные обрабатывать тысячи запросов в секунду, развернуты для обеспечения сервисов таких компаний и организаций, как Adobe, CERN, Cisco, IBM, HP, Comcast, Disney, eBay, Netflix, Sony, Rackspace, Reddit и Twitter.

Основные новшества:

  • Поддержка материализованных представлений, позволяющих сформировать виртуальную таблицу на основе произвольного CQL-запроса, содержимое которой не генерируется на лету как в обычных представлениях, а кэшируется между запросами в форме индекса. Материализованное представление может применяться в качестве более эффективной альтернативы вторичным индексам для запросов по непервичным ключам, денормализация данных с разных узлов в которой выполняется на стороне сервера;
  • Полностью переработан механизм хранения информации о репликах для сбойных узлов ("hinted handoff"), вместо одного файла system.hints хинты теперь записываются в отдельные файлы, что значительно увеличивает эффективность диспетчеризации;
  • Поддержка режима EACH_QUORUM для обеспечения заданного уровня согласованности для запросов на чтение;
  • Поддержка ограничения выборки любых компонентов ключей раздела или кластера через выражение "IN" в директивах UPDATE и DELETE;
  • В директиву DELETE добавлена поддержка отсеивания одно- или многостолбцовых слайсов при помощи операторов ">", ">=", "<=" и "<";
  • В команде "nodetool rebuild_index" теперь можно указывать индекс, без необходимости указания связанной с ним таблицы;
  • Повышена эффективность хранения данных, что привело к экономии места в хранилище в среднем на 50%;
  • Обеспечен вывод предупреждений в лог, если операция сборки мусора выполняется дольше 1000мс.

СУБД Cassandra объединяет в себе полностью распределённую hash-систему Dynamo, обеспечивающую практически линейную масштабируемость при увеличении объема данных. Cassandra использует модель хранения данных на базе семейства столбцов (ColumnFamily), отличающуюся от систем подобных memcachedb, которые хранят данные только в связке ключ/значение, возможностью организовать хранение хэшей с несколькими уровнями вложенности. Для упрощения взаимодействия с БД поддерживается язык формирования структурированных запросов CQL (Cassandra Query Language), напоминающий SQL, но урезанный по функциональности. Из возможностей можно отметить поддержку пространств имён и семейств столбцов, создание индексов через выражение "CREATE INDEX".

СУБД позволяет создавать устойчивые к сбоям хранилища: помещаемые в БД данные автоматически реплицируются на несколько узлов распределённой сети, которая может охватывать разные центры обработки данных. При сбое узла, его функции на лету подхватываются другими узлами. Добавление новых узлов в кластер и обновление версии Cassandra производится на лету, без дополнительного ручного вмешательства и переконфигурирования других узлов. Драйверы с поддержкой CQL подготовлены для языков Python, Java (JDBC/DBAPI2), Ruby, PHP, C++ и JavaScript (Node.js).

  1. Главная ссылка к новости (https://blogs.apache.org/found...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/43298-apache
Ключевые слова: apache, cassandra, nosql
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (31) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, Вареник (?), 00:32, 11/11/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    В своей нише (расшадить БД на 10.000 нод) у отой базыне нет альтернантив.
     
     
  • 2.4, Аноним (-), 02:41, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • +4 +/
    http://www.opennet.me/opennews/art.shtml?num=43017
     
     
  • 3.5, Классический анонимуз (?), 04:50, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    СцЫллу только начали писать, и функционал до Кассандры не дотянули даже близко. Внедрений ноль. А тут уже под 10 лет эксплуатации на жирнейших задачах.
     
     
  • 4.6, Аноним (-), 05:53, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > СцЫллу только начали писать

    Делаем ставки, за сколько месяцев выпрут жабу на помойку после того как СцЫллу допишут.

     
     
  • 5.7, Классический анонимуз (?), 06:30, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    после того как СцЫллу допишут

    ЕСЛИ допишут. После этого лет через 5-10. Печаль фанбоям си?

     
     
  • 6.11, Аноним (-), 08:59, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Допишут-допишут, не волнуйся так. Хоть ты и пытаешься сучить ножками, осознавая, что против плюсового решения у жабы нет шансов, факта это не изменит.
     
  • 2.8, Аноним (-), 08:11, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    10000 нод потому что жаба на меньшем не шевелится даже? а постгрес один справился бы?
     
     
  • 3.9, Классический анонимуз (?), 08:29, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Так набрасываешь, аж вспотел наверное? А у нас на некоторых задачах джава работает быстрее приплюснутого си. В случае с Кассандрой всё ещё интереснее - она просто работает, а все остальные поделены на ноль и существуют только в сферическо-вакуумных мечтах сишных фанатов

    Про постгрес посмеялся...

     
     
  • 4.10, АнонимУася (?), 08:54, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >>А у нас на некоторых задачах джава работает быстрее приплюснутого си.

    1) Выгоните своих кодеров на плюсах.
    2) Расскажите про задачи, на которых жаба задушила плюсы, мы тут посмеяться хотим.

     
     
  • 5.13, RaSla (?), 09:17, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    http://blog.carlesmateo.com/2014/10/13/performance-of-several-languages/

    JIT (в идеале) написав саму программу 1 РАЗ, позволяет запустить её используя МАКСИМУМ производительности на КОНКРЕТНОМ компе (задействовав оптимальные инструкции КОНКРЕТНОГО процессора)
    вместо компиляции С/С++ с флагами оптимизации под каждый тип процессора в "серверной" (а потом ещё и деплоить на каждый сервер "истинно-верную версию" - тоже гемор ещё тот).

    Будущее лвиной доли программ Прикладного уровня однозначно за JIT.
    А JIT (на данный момент времени) одна из лучших реализаций всё-таки - Oracle Java ...
    (к моему сожалению)

     
  • 5.15, Классический анонимуз (?), 09:31, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ну например берем список недействительных российских паспортов (с сайта ФМС). 94 млн записей. Надо выделять дельту, т.е. скачали сегодня (сунули в SQL), через пару дней там 94млн+~20k. Надо найти эти 20k и засунуть в SQL.

    На джаве за 40 сек отрабатывает на древнем 2.5ггц ксеоне. Сишечка грубо на 20% дольше, плюс саму программу писали в разы дольше.

    Жалко, что я в map-reduce не силён, так бы можно было ещё в 4 раза ускорить джавку ;)

    p.s. для умников собирающихся покричать "сделай сразу 100млн инсертов", сразу отвечаю - это примерно полчаса средствами ОрацлеЕЕ.

     
     
  • 6.21, Аноним (-), 10:52, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вариант что ты в сишечке анскиллед лузер - в рассчёт не принимается?
     
     
  • 7.22, Классический анонимуз (?), 11:47, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Words are cheap (c)

    Show you code, Luke! И сюда ссылочку на свой гитхабчик с кучей реактивного кода. Я на том же железе запущу ;)

     
  • 6.32, . (?), 05:55, 12/11/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Ну например берем список недействительных российских паспортов (с сайта ФМС). 94 млн записей. ....
    >На джаве за 40 сек отрабатывает на древнем 2.5ггц ксеоне. Сишечка грубо на 20% дольше, плюс саму программу писали в разы дольше.

    А попробуй тупо: sort list_old > list_old_s; sort list_new > list_new_s; diff list_old_s list_new_s  :-)
    А то я пару раз уже наступал когда это уделывало все кассандры\шмасардры\оракакелы :)

     
  • 6.35, Voland (??), 23:40, 16/11/2015 [^] [^^] [^^^] [ответить]  
  • +/
    В sqlite на десктопной машине с iCore 5 загрузка за 2.5 минуты.
     
  • 5.18, ДяДя (?), 10:19, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Есть у вас абстрактный класс. Есть массив, который содержит объекты классов-потомков этого класса. Заранее НЕВОЗМОЖНО знать какие конкретно потомки в этом массиве. Вы перебираете массив, получаете объект и вызываете какой-то метод.

    Это в C++ ОЧЕНЬ медленно, т.к. нужно ВСЕГДА залезать в специальную табличку, чтобы понять где находится исполняемый код конкретного потомка.
    В Java в рантайме определяется какой конкретный класс в массиве и вызов испоняемого кода инлайнится. Т.о. лезть в табличку при КАЖДОМ вызове метода не нужно. (Раньше было ограничение на то, что в массиве не боле 2-х различных классов. Сейчас не знаю, но в реальной жизни два возникает очень часто).
    А таких оптимизаций во время выполнения ОЧЕНЬ много.

     
     
  • 6.20, Аноним (-), 10:51, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Выкидываешь абстрактный класс, и этот кусок пишешь на шаблонах. Всё, жаба начинает реактивно сливать.
     
  • 6.29, demon (??), 23:09, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Теретически задача неплохая. А вот каково практическое применение? И главное - нельзя ли конечную практическую задачу решить более простыми методами?
     
  • 6.30, alex (??), 01:21, 12/11/2015 [^] [^^] [^^^] [ответить]  
  • +/
    можно поподробнее, каким образом жава определяет где какой метод инлайнить?
    я лично вижу только один способ: хранить в объекте флаг и в вызове метода делать что-то типа:
    if(flag)
      do_method1();
    else
      do_methd2();
    Через switch/case можно расширить на большее разнообразие подклассов.
    Но как-то это всё неизящно что-ли.
    Дак как там на самом деле? реально интересно
     
  • 5.19, Нанобот (ok), 10:29, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >1) Выгоните своих кодеров на плюсах.

    да! потому что аноним опеннета так сказал!

     
  • 3.14, pkdr (ok), 09:27, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Справедливости ради, даже несмотря на все "прелести" явы и ставшее притчей во языцех "ява не тормозит(с)" сама по себе кассандра довольно шустрая штука, когда надо писать в базу МНОГО данных.
     
  • 2.16, Аноним (-), 09:33, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ошибаетесь. Намекну на правильный метод: самой базе необязательно что-либо знать о шардировании.
     

  • 1.12, Аноним (-), 09:03, 11/11/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    java.. недешево наверно содержать в такой базе данные
     
     
  • 2.17, Аноним (-), 09:50, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На самом деле дешевле чем в любой реляционной БД написанной на C, т.к. обычно нужно не только хранить, а еще читать и писать.
     

  • 1.24, Аноним (-), 14:50, 11/11/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В ней CAS (прочитать значение и время создания значения - изменить значение с указанным временем создания) реализован?
     
  • 1.25, Аноним (-), 15:22, 11/11/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    хочу хранить ключ в нескольких копиях (для надежности) но чтобы не было возможно расслоение сети и изменения значения ключа в разных сетях... как тут это можно сделать?

    как у меня это сделано сейчаc: я храню ключ в postgres при этом синхронно этот postgres реплицирую. если вдруг postgres сдохнет я его вообще выключу из работы и буду работать с другим.

    как бы сделать так же чтобы у ключа были копии но использовались бы они только когда сдох основной сервер при этом копия на сдохшем сервере уже не участвовала в работе.

    вообщем меня пугает расслоение данных которое описывали люди ранее, когда есть ключ и есть его копия, потом сеть распадается, в одной копии ключ меняется по одному, в другой по другому и в результате мы теряем данные

     
  • 1.26, Аноним (-), 15:38, 11/11/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    EACH_QUORUM is now a supported consistency level for read requests.

    те можно хранить скажем 4 копии ключа и требовать чтобы при чтении были доступны все 4 копии, что делать если все 4 не доступны?

     
     
  • 2.28, одмин (?), 19:16, 11/11/2015 [^] [^^] [^^^] [ответить]  
  • +/
    я бы тебе посоветовал проверить сетевой кабель и кабель питания у всех 4 серверов
     
     
  • 3.31, Аноним (-), 02:01, 12/11/2015 [^] [^^] [^^^] [ответить]  
  • +/
    А если они все на разных континентах?
     
     
  • 4.33, одмин (?), 09:39, 12/11/2015 [^] [^^] [^^^] [ответить]  
  • +/
    тогда нужно или переносить севера в один датацентр или читать документацию такого типа http://www.datastax.com/dev/blog/deploying-cassandra-across-multiple-data-cen
     

  • 1.34, oooops (??), 23:49, 13/11/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а что говорят относительно производительности и потребления/требований к памяти в новой версии? (по сравнению с 2.2)
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру