The OpenNET Project / Index page

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

Доступна открытая СУБД CrateDB 1.0

17.12.2016 23:09

После трёх лет разработки состоялся релиз проекта CrateDB 1.0, в рамках которого развивается открытая, быстрая и масштабируемая СУБД с поддержкой выполнения SQL-запросов и встроенными возможностями полнотекстового поиска. Версия 1.0 позиционируется как первый выпуск, достигший должного уровня стабильности и пригодный для промышленного использования. Исходные тексты CrateDB написаны на языке Java и распространяются под лицензией Apache 2.0.

СУБД позволяет использовать SQL как для структурированных, так и для неструктурированных данных. Запросы могут выполняться распределённо, охватывая данные, хранящиеся на нескольких узлах, при этом для таких запросов обеспечивается производительность, близкая к обработке в реальном режиме времени. CrateDB оптимально подходит для хранения и формирования выборок для различных автоматически генерируемых данных, таких как логи, результаты периодического опроса датчиков и параметры сетевого трафика.

Особенности и возможности CrateDB:

  • Возможность подключения к СУБД с использованием бинарного протокола PostgreSQL. CrateDB на уровне протокола эмулирует PostgreSQL 9.5 и позволяет с некоторыми ограничениями (например, не поддерживаются транзакции) использовать написанное для PostgreSQL клиентское ПО;
  • Встроенный управляющий web-интерфейс (http://localhost:4200/admin/) и CLI-клиент crash;
  • Средства для обеспечения высокой доступности и масштабируемости - возможно распределённое хранение данных с шардингом на несколько узлов и хранением нескольких копий на разных узлах. Репликация выполняется автоматически, уровень дубликатов задаётся в конфигурации БД. В случае сбоя или вывода узла для обновления, хранимая на нём информация замещается данными с других узлов;
  • Хорошая масштабируемость - для расширения хранилища или увеличения производительности достаточно просто добавить в кластер СУБД дополнительные узлы и СУБД сама выполнит автоматическую ребалансировку данных. Для распараллеливания операций в CrateDB применяется архитектура без разделения ресурсов (shared-nothing - каждый узел независим и самодостаточен, не использует централизованную информацию о состоянии и не конкурирует с другими узлами);
  • Эффективная система кэширования полей, позволяющая выполнять запросы, в том числе с агрегатными функциями, слиянием таблиц и подзапросами, со скоростью обращения данным в оперативной памяти;
  • Высокая производительность операций добавления данных (INSERT). На типовом оборудовании обеспечивается производительность на уровне 40 тысяч операций INSERT в секунду на один узел в кластере. Запросы выполняются с предсказуемой производительностью за считанные миллисекунды, независимо от наличия активности на запись;
  • Интерфейсы для определения схемы хранения данных и структуры метаданнных. Поддержка как реляционных данных, так и вложенных документов JSON и блобов. Возможность обращения к атрибутам JSON из SQL и хранение в форме блобов изображений, видео и прочих бинарных данных;
  • Средства аналитики для выявления аномалий и тенденций во временных рядах. Для ускорения производительности и удобства работы поддерживается автоматическое партицирование данных за разные интервалы времени (каждый интервал представлен как виртуальная таблица);
  • CrateDB не поддерживает ACID-транзакции и обеспечивает непротиворечивость на уровне строк через использование модели "read-after-write" и оптимистическое управление параллельной обработкой данных (OCC - Optimistic Concurrency Control), в котором для выявления и разрешения конфликтов используется внутреннее версионирование;
  • Встроенные средства инкрементального резервного копирования БД, позволяющие сохранять снапшоты со срезом данных на текущий момент времени;
  • Наличие условных и математических функций, а также типов для задания местоположения (geo_point и geo_shape) и функций для вычисления расстояний, пересечений и вхождений областей;
  • Возможность создания узлов, доступных только на чтение;
  • Поддержка подзапросов (вложенные SELECT);
    
       select average_price from (
          select avg(price) as average_price
          from articles) as t
          order by average_price;
    
  • Поддержка внешних слияний (LEFT/RIGHT/FULL/CROSS JOIN);
    
        select e.name || ' ' || e.surname as employee, coalesce(d.name, '') as manager_of_department
           from employees e left join departments d
           on e.id = d.manager_id
           order by e.id;
    
  • Поддержка определения полуструктурированных схем хранения с динамически добавляемыми в процессе работы полями:
    
       create table demo (
           name string,
           obj object (dynamic) as (
               age int
           ),
           tags array (string));
    
       insert into demo (name, obj, tags) values
         ('Trillian',
         {age = 39, gender='female'}, // поле gender явно не определено в схеме и создаётся динамически
         ['mathematician', 'astrophysicist']);
    
       select * from demo where obj['gender'] = 'female';
    
    
  • Встроенные средства полнотекстового поиска на базе движка Lucene. Например, можно задавать вес для совпадений в определённых полях:
    
       select title from wikipedia where match((title 1.5, text 1.0), 'Test')
    


  1. Главная ссылка к новости (https://crate.io/releases/achi...)
  2. OpenNews: Релиз открытой СУБД VoltDB 3.0, развиваемой одним из основателей Ingres и PostgreSQL
  3. OpenNews: Открыты исходные тексты СУБД CitusDB
  4. OpenNews: Открыты исходные тексты СУБД TrailDB
  5. OpenNews: Представлена децентрализованная СУБД Noms, основанная на идеях Git
  6. OpenNews: Доступна СУБД InfluxDB 1.1
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/45707-cratedb
Ключевые слова: cratedb, database
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (43) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 01:19, 18/12/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    > быстрая
    > на языке Java

    «Ява не тормозит»©

     
     
  • 2.2, Вареник (?), 01:51, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Так она действительно не тормозит.
     
     
  • 3.5, Анонимус1 (?), 02:29, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +18 +/
    Только плашки оперативки подкидывай, подкидывай давай.. чего остановился?
     
     
  • 4.7, Аноним (-), 02:51, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    У Java тормозит только гуй. Безгуйные приложения на Java сопоставимы с безгуйными приложениями на С++ и проседают в производительности по сравнению с ними всего в полтора раза.
     
     
  • 5.8, 101 (??), 03:03, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >всего в полтора раза.

    полтора-два раза

     
     
  • 6.20, Аноним (-), 07:06, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > полтора-два раза

    Может и 3 получиться. А сборщик мусора может все надолго клинить. Written once, profile evrywhere!

     
     
  • 7.33, Cpper (?), 13:33, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Там есть разные реализации сборщика. Он может работать параллельно и не тормозить остальных.
     
     
  • 8.34, wwarlock (ok), 15:13, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Да, к тому же он может вообще отключаться или даже выпиливаться из исходников JV... текст свёрнут, показать
     
  • 7.52, Вареник (?), 08:23, 23/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Подключи параллельный сборщик, задай максимальный интервал окна в несколько миллисекунд и будет тебе Soft RealTime счастье.
     
  • 5.10, leap42 (ok), 03:15, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    всё немного сложнее: тормозит запуск виртуальной машины, потом какое-то время уходит на прогрев кэшей и оптимизацию кода. как результат, настольные приложения работают невыносимо медленно, но серверные, которые запускаются один раз и работают годами считают на скорости C (ну почти). все неверующие могут поискать  бенчмарки на хабре.
     
     
  • 6.14, angra (ok), 03:57, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > тормозит запуск виртуальной машины

    Запусти hello world на жаве через time и узнай сколько миллисекунд на самом деле запускается jvm. Треск шаблона гарантирован.

    > работают годами считают на скорости C (ну почти). все неверующие могут поискать бенчмарки на хабре.

    Зачем хабр, если есть Benchmarks Game. Твое "почти" это в среднем в два раза на задачах, требующих сравнительно небольшого количества памяти. При этом кушает в среднем в 10 раз больше памяти. Но еще веселее становится, когда потребляемая память измеряется гигабайтами и неожиданно оказывается, что gc на таких объемах может очень сильно тормозить работу и разница в скорости куда больше двух раз.


     
     
  • 7.29, anonymous (??), 12:42, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Допускаю, что скорость бывает даже соизмерима, но только в идеальных условиях - когда уже по куску кода прошелся JIT (на него кстати тоже тратится время на первых стадиях после запуска приложения) и если не дергается GC.
    Второе может быть достигнуто только если писать код специальным образом, грубо говоря в особом процедурном стиле, что слабо читаемо, и вообще говоря противоречит всем практикам энтерпрайзного программирования. Вся инфраструктура также сделана в духе ООП.
    Иначе говоря, GC всегда будет при работе. Естеcтсвенно, при этом отжирая время процессора - впрочем, в обычном случае нефатально.
    Стоит упомянуть случай, если повезло меньше, и код оказывался недружелюбным для GC. Тогда большие тормоза, фризы обеспечены, а бороться с этим зачастую нетривиально. Надо осмысливать архитектуру приложения, прикидывать жизненный цикл объектов, их связи, и рефакторить со всеми вытекающими.
    Итого, в Jave в обмен на более простой и быстрый цикл разработки ПО мы получаем бомбу замедленного действия в виде GC. В энтерпрайзе это оправдано, обычное приложение до такой стадии развития не доживает, а если все же оказывается таким большим и ценным (т.е. проект уже можно считать успешным), гипотетически можно привелечь команду гуру и все поправить.
     
     
  • 8.30, anonymous (??), 13:04, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Вдогонку Зачем они принялись писать на БД на Java Потому что проще, быстрее и ... текст свёрнут, показать
     
     
  • 9.42, лютый жабист__ (?), 09:02, 19/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Отличная аналитика, бро У людей, покупающих например IBM z13 за мегабакс на кру... текст свёрнут, показать
     
     
  • 10.43, Аноним (-), 13:10, 19/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    На крутых сишников действительно нет денег, но просто там нужно 1000 таких что-... текст свёрнут, показать
     
  • 9.53, Вареник (?), 08:28, 23/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Почему же создатели и эксплуатанты Cassandra, Hive, BigTable, Elasticsearch, Ori... текст свёрнут, показать
     
  • 7.41, лютый жабист__ (?), 06:53, 19/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >еще веселее становится, когда потребляемая память измеряется гигабайтами и неожиданно оказывается, что gc на таких объемах может очень сильно тормозить работу и разница в скорости куда больше двух раз

    Все сишнеки знают, что GC в жабе тормозит проги с кучей на десятки гигабайт.
    Насколько я знаю, подвисает на пару секунд.

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

     
     
  • 8.48, Аноним84701 (ok), 17:38, 19/12/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Дорогой собрат по разуму, пишу вам из параллельной вселенной 8211 увы, у нас ... текст свёрнут, показать
     
  • 6.24, Ubuntu (?), 11:36, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> настольные приложения работают невыносимо медленно

    Приложения назовёте?

     
     
  • 7.27, leap42 (ok), 12:34, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Intel RAID Web Console 2 Utility пойдёт?
     
     
  • 8.40, Ubuntu (?), 21:01, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Это десктоп приложение Швайн ... текст свёрнут, показать
     
     
  • 9.45, Аноним (-), 14:24, 19/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Забавная штука, аналогично АМД пошли, те тоже сервис с вэб мордой на управление ... текст свёрнут, показать
     
  • 6.35, Анын (ok), 16:19, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну да, ну да.. Про проблемы с GC не забывайте.
     
  • 6.36, Анын (ok), 16:21, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > на скорости C (ну почти). все неверующие могут поискать  бенчмарки
    > на хабре.

    Посмотрите лучше бенчмарки ScyllaDB и Cassandra. Все вопросы отпадут.

     
  • 5.26, Игорь (??), 12:27, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Кто такой "безгуйный", и на каком языке это написано?
     
     
  • 6.32, Аноним (-), 13:10, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Имеется ввиду соснольное аппликэйшен, сервис (демон), етц. Написано на языке твоего тела.
     

  • 1.12, Аноним (-), 03:47, 18/12/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Не понятно, как они разруливают конфликты двух параллельных модифицирующих запросов для одних данных. На основе версий можно консистентно читать данные (пусть немного устаревшие), но как записывать мне не понятно. Для того и придуманы транзакции
     
     
  • 2.15, angra (ok), 04:02, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Элементарно - они на это забивают. Данная БД предназначена для случаев, когда данных очень много и потерей или некорректностью части из них можно спокойно пренебречь
     
     
  • 3.16, Аноним (-), 05:49, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    можно спокойно пренебречь всеми данными после сбоя данной субд
     
     
  • 4.19, Аноним (-), 06:59, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Мне сложно представить ситуации, когда можно использовать такие базы. Разве что для какого-нибудь кеша, но там, обычно, за глаза хватает key-value баз.

    Если данные помещаются в базу, значит они ценны. Сейчас даже статистику терять жалко. Она, скорее всего, как-то обрабатывается и анализируется, и говорить, что сегодня отчетов не будет, так как наша бд после сбоя находится в непонятном состоянии, как то глупо.

    Да и как делать более или менее сложные запросы, без транзакций? Обычно делаешь селект, обрабатываешь результаты и делаешь абдейт. Даже если это будет один сложный SQL запрос с селектом и апдейтом, все равно внутри бд должно существовать некое понятие транзакций

     
     
  • 5.23, A.Stahl (ok), 11:06, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >абдейт

    Кстати, часто вижу такую необычную форму записи. Это какая-то шутка или обычная глупость уровня "андройд"?

     
     
  • 6.28, Аноним (-), 12:39, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это безграмотное бидуро.
     
  • 5.38, Crazy Alex (ok), 16:59, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Как раз со статистикой - в самый раз. Не "говорить, что отчётов не будет", а просто самую малость упадёт их точность. Скорее всего - даже не упадёт, один хрен всё усреднится.

    То же касается логов - крайне редко там важна одна-единственная конкретная запись из миллионов. Вообще, если не считать финансовые БД небольшая доля потерь частенько вполне приемлема.

     
  • 5.39, angra (ok), 20:59, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Мне сложно представить ситуации, когда можно использовать такие базы.

    Посмотри use cases их сайте. И речь идет не о крупной потере в результате сбоя, а о потере или неточности отдельных записей из-за отстутсвия транзакций.

     
     
  • 6.46, Аноним (-), 14:30, 19/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >а о потере или неточности отдельных записей из-за
    > отстутсвия транзакций.

    Если у продукта А в БД вдруг стала цена от продукта Б (да мало-ли человек в двух табах нажал добавить товар в корзину, чисто гипотетически;) ), то ошибка конечно в конкретной строчке, но результат неверный совсем :).

     
     
  • 7.50, angra (ok), 02:44, 20/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Еще раз для танкистов, посмотри для чего ее применяют. Подсказка, для магазинов/складов/бухгалтерии/итд такие БД не подходят и никто не предлагает их использовать, но мир не ограничен этой сферой.
     
  • 2.31, arzeth (ok), 13:07, 18/12/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    https://crate.io/docs/reference/sql/dml.html#updating-data
    > If the same documents are updated concurrently an VersionConflictException might occur. Crate contains a retry logic that tries to resolve the conflict automatically.

    Если данные будут модифицироваться одновременно, то выбросит VersionConflictException, а затем попытается снова выполнить запрос.


    > Crate heavily relies on Elasticsearch and Lucene for storage
    > and cluster consensus.
    > Every replica shard is updated synchronously with its primary and
    > always carries the same information. Therefore it does not matter if
    > the primary or a replica shard is accessed in terms of
    > consistency. Only the refresh of the ''IndexReader'' affects
    > consistency.

    Консистентна запись (insert, update, т.п.); консистентно получение данных с полным указанием primary key в WHERE.

    Про консистентность тут написано: https://crate.io/docs/reference/architecture/storage_consistency.html

     
  • 2.44, fi (ok), 13:55, 19/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Вот тут собственно ответ:

    >CrateDB оптимально подходит для хранения и формирования выборок для различных автоматически генерируемых данных, таких как логи, результаты периодического опроса датчиков и параметры сетевого трафика.

    Один источник - множество получателей.  И никаких конфликтов. Самый простой и надежный способ.

     
     
  • 3.47, Аноним (-), 14:32, 19/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Вот тут собственно ответ:
    >>CrateDB оптимально подходит для хранения и формирования выборок для различных автоматически генерируемых данных, таких как логи, результаты периодического опроса датчиков и параметры сетевого трафика.
    > Один источник - множество получателей.  И никаких конфликтов. Самый простой и
    > надежный способ.

    А чем это плохо работает в текущих решениях?
    Есть к примеру firebird :)

     
     
  • 4.51, angra (ok), 02:49, 20/12/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Скорость. Поинтересуйся, сколько транзакций в секунду может firebird.
    Хотя надо сказать, что 40k insert без транзакций у сабжа тоже ни разу не впечатляют.

     

  • 1.22, Аноним (-), 10:46, 18/12/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На сколько я помню внутри elasticsearch живёт, почему в новости нет кпоминания о этом?
     
  • 1.25, anonymous (??), 11:39, 18/12/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    как тут с brainsplit? раз данные хранятся в виде нескольких копий значит менять эту копию нужно на сервере ответственном за запись, что будет при его падении? при его восстановлении? вообщем как тут под CAP теорему подстраиваются?
     
  • 1.49, ananim (?), 18:10, 19/12/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    таки железо уже с сотнями гигабайт уже выпускают, да и терабайтом тож. base in memo
     

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



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

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