Компания Canonical опубликовала (https://github.com/canonical/dqlite/releases/tag/v1.0.0) значительный выпуск проекта Dqlite 1.0 (https://dqlite.io/) (Distributed SQLite), развивающего совместимый с SQLite встраиваемый SQL-движок, поддерживающий репликацию данных, автоматическое восстановление после сбоев и обеспечение отказоустойчивости через разнесение обработчиков на несколько узлов. СУБД реализована в форме прикрепляемой к приложениям Си-библиотеки и распространяется (https://github.com/canonical/dqlite) под лицензией Apache 2.0 (оригинальный SQLite поставляется как общественное достояние). Доступны биндинги для языка Go (https://github.com/canonical/go-dqlite).
Библиотека является надстройкой над существующей кодовой базой SQLite, которая добавляет поддержку сетевого протокола для связывания между собой нескольких экземпляров приложения, запущенных на разных хостах. Собранное с Dqlite приложение может функционировать как самодостаточный отказоустойчивый кластер, не зависящий от внешних СУБД. На практике Dqlite используется компанией Canonical в системе управления контейнерами LXD (https://www.opennet.dev/opennews/art.shtml?num=44228). Среди областей применения библиотеки также упоминается создание отказоустойчивых устройств интернета-вещей и обработчиков в системах
Edge (https://www.opennet.dev/opennews/art.shtml?num=48372)-вычислений (https://www.opennet.dev/opennews/art.shtml?num=51077).
Для обеспечения непротиворечивости при репликации данных применяется метод достижения консенсуса на базе алгоритма Raft (https://raft.github.io/), который используется в таких проектах, как etcd, RethinkDB, CockroachDB и OpenDaylight. В Dqlite применяется собственная асинхронная реализация C-raft (https://github.com/canonical/raft), написанная на языке Си. Для мультиплексирования обработки соединений и организации запуска сопрограмм используются готовые библиотеки libuv (https://libuv.org/) и libco (https://github.com/canonical/libco).
По сравнению с похожим проектом rqlite (https://github.com/rqlite/rqlite), Dqlite обеспечивает полную поддержку транзакций, может связываться с любыми проектами на языке Си, позволяет использовать функцию time() и применяет репликацию на основе кадров вместо репликации на основе трансляции SQL-выражений.
Особенности Dqlite:
- Выполнение всех дисковых и сетевых операций в асинхронном режиме;
- Наличие тестового набора для подтверждения корректности данных;
- Низкое потребление памяти и эффективный обмен данным по сети;
- Постоянное хранение на диске БД и лога транзакций (c возможностью кэширования в памяти);
- Быстрое восстановление после сбоев;
- Стабильный CLI-клиент на языке Go, который можно использовать для инициализации БД, настройки репликации и подключения/отключения узлов;
- Поддержка архитектур ARM, X86, POWER и IBM Z;
- Реализация алгоритма Raft оптимизирована для минимизации задержек при фиксации транзакций.URL: https://github.com/canonical/dqlite/releases
Новость: https://www.opennet.dev/opennews/art.shtml?num=51402
.. проекта, который ждет та же судьба, что и Mir с Upstart'ом? ;)
Разумеется. Это ж абанто-вей: найти фатальный недостаток, запилить аналог, забросить его и рыдать о непонятом гении.
Альтернативы - это неплохо, про "фатальный недостаток" вообще мимо. В остальном что-то типа того. А скорее всего, просто накладно поддерживать и развивать самим.
Mir с Upstart'ом живут и здравствуют, то что их нет в вашем уютном мирке это уже ваше дело.
https://www.opennet.dev/opennews/art.shtml?num=51274
https://www.opennet.dev/opennews/art.shtml?num=49314
Похоже разработчики этой фигни вообще не понимают что такое sqlite. Это встраиваемая в приложение БД, что есть строгое противоположность того что ни учудили. Решили выехать на бренде sqlite.
Это встраиваемая бд для организации связности нескольких экземпляров - нужно для децентрализованных приложений.
"(...) надстройкой над существующей кодовой базой SQLite, которая добавляет поддержку сетевого протокола для связывания между собой нескольких экземпляров приложения, запущенных на разных хостах."Какая же это "строгая противоположность"? Это расширение.
Модуль съёмных крыльев для трактора тоже остаётся модулем хотя и меняет суть трактора на "строго противоположное".
> Модуль съёмных крыльев для трактора тоже остаётся модулем хотя и меняет суть
> трактора на "строго противоположное".Яркая образная аналогия != корректная аналогия.
И особенно занятно то, что предлагаемый расширенный вариант никак не отменяет дальнейшего существования классической SQLite, буде она для кого более по фэншую.
> Какая же это "строгая противоположность"? Это расширение.Два чаю вам. Это расширение sqlite для специяических кейсов.
Предлагается кластер на базе IoT... То есть холодильник с телевизором будут сплетничать через единую самореплицирующуюса БД. Восстаное машин, которое мы заслужили :D
В любом случае наличие альтернативы лучше её отсутствия.
> В любом случае наличие альтернативы лучше её отсутствия.Далеко не всегда, на ютубе куча роликов на эту тему, 2+2=22, например.
>холодильник с телевизором будут сплетничать через единую самореплицирующуюса БД. Восстаное машин, которое мы заслужили :D"Тыц-тыц холодильник, тыц-тыц телевизор..." (с) песенка Фиксиков
Вовсе не противоположность, а расширение. Выделенного сервера тут нет, и сеть не обязательна.
В общем, если провести аналогию, то классические клиент-серверные РСУБД - это как svn, а тут сделали как git.
Годнота от каноникл? Давно не было...приятно.
>Давно не было...Никогда не было, пофиксил тебя.
> Стабильный CLI-клиент на языке Go, который можно использовать для инициализации БД, настройки репликации и подключения/отключения узлов;закапывайте
CLI должен быть только на Bash и Perl? Какая тебе разница, на чём консольная утилита написана?
> CLI должен быть только на Bash и Perl? Какая тебе разница, наcli точно не должен быть ни на одном из тех языков (а в sqlite их не один) на котором написан весь остальной код. Был бы на tcl - можно было бы поудивляться и принять как данность.
Значит, его писание либо доверили совсем бестолковым пион...нецветочкам,запрещенным на опеннете, либо, что значительно более вероятно, целиком вся шобла разработчиков каноникла - вот такие макаки и есть.To build libdqlite from source you'll need:
A reasonably recent version of libuv (v1.8.0 or beyond).
A patched version of SQLite with support for WAL-based replication.
A build of the C-raft Raft library.
A build of the libco coroutine library.
понатащили первых показавшихся подходящими готовых либ, кое-как это собрали (а поскольку не собиралось - что-то как-то по живому попатчили в коде, непонятно даже, каком, поскольку оригинал не в гитляпе и не гитшляпе, а тут клон хз чего), а, ну да, нужен же cli - ну ща, быстро-быстро наляпаем на чем умеем.
> Собранное с Dqlite приложение может функционировать как самодостаточный отказоустойчивый кластер,Погодите, они сделали из бессерверной БД... серверную? Что?
скорее p2p-шную
В докер контейнерах вполне может быть востребована.
Каноникал откажется развивать проект не позже, чем 1-го января 2022 года.Запомните этот твит.
Если не удастся пропихнуть, окажется "не модным", то так оно и будет. Как всегда и было до этого.
Угу. Но чутка жаль.Интересно, что у них такое есть, от чего оно так.
типа lite-mnesia
Спасибо! Вы помогли мне понять, что происходит под капотом RabbitMQ
> Стабильный CLI-клиент на языке Goрасходимся. Ниасилили даже попатчить нормальный sqlite'овский клиент. Все что нужно знать об этом ненужно.
Судя по> который можно использовать для инициализации БД, настройки репликации и подключения/отключения узлов;
этот клиент лишь для сего и используется. Если хочется работать с базой как с обычной sqlite, то так с ней и работаете.
я и говорю - ненужно, расходимся.Вместо добавления трех функций в существующий неплохой и удобочитаемый код - ниосиляторы написали целый отдельный cli на нескучном язычке (требующий блоб компилятора нескучного язычка только для сборки компилятора, и, вероятно, тащащий за собой пол-интернета зависимостей, поскольку вряд ли ЭТИ умеют иначе)
что сразу говорит и об их квалификации, и об их подходе.
Плюсанул.
Если это "вариант sqlite", то сделайте его в стиле sqlite.
sqlite популярен из-за простоты, нетребовательности и совместимости со всем, что в голову придет.
Обвешали свиристелками по самые помидоры - кому такое громадьё нужно будет?
> Если это "вариант sqlite", то сделайте его в стиле sqlite.есть миллион уважительных причин так не cделать в конкретном случае - но написание вшивого cli на модном йезычке - явно не из этого списка (и уж явно не эти люди решат какую-то из тех задач).
sqlite популярен еще и из-за нечеловеческой аккуратности кода и безумной эффективности в сочетании с надежностью. Тут на это рассчитывать не приходится - скорее всего, "я его слепила из того что было", никто эти прекрасные библиотеки внимательно не изучал.
> я и говорю - ненужно, расходимся.Всем было бы только лучше, если бы ты, прочитав об очередном, по твоему мнению «ненужно», действительно ушёл, а не высказывал тут своё сверхценное мнение, тем более что его и так уже все заранее знают.
Глупый вскукарек от того кому данное решение не нужно было бы даже в случае если там был клиент "по феншую", то есть тебе лишь бы придраться и вкускарекнуть о "нинужно!!!".
Кому технология действительно нужна плевать на чём написан CLI-клиент. Тем более если разобраться то голанг не тащит никаких зависимостей.
>СУБД реализована в форме прикрепляемой к приложениям Си-библиотекиТак Rust же лучше или нет?
Как язык, лучше. Но для С не нужен «ещё один компилятор».
Распределенная встраиваемая БД, звучит как оксюморон.
Если нужно распределенное приложение без левых (или правых) зависимостей, то почему нет?Встраиваемый SQLite берут, когда не хотят ставить внешнюю базу. Dqlite будут встраивать, если не хочется внешней распределённой базы.
Дык весь смысл же теряется. Как только требуется распределение данных - внешние БД все равно являются внешними серверами, хоть они куда-то там встроены, хоть нет.
Докер берут если не хочется левых (лишних) людей.
да? а девопсики, по этой логике, становятся (внезапно) правыми и не лишними? вотэтоповорот.жпг
>СУБД реализована в форме прикрепляемой к приложениям Си-библиотекиТак Rust же лучше или нет?
А мне - понравилось сама идея dqlite и rqlite. Ни разу не слышал о таких (хотя "тему - слежу").Мне хватает обычного sqlite и вот почему: в моих корпоративных сценариях использования, думаю ничем особо не отличаюсь от 60% интерпрайза - база ~2ГБ, отражающая ВСЕ(!) данные 5-ти баз 1С за 20 лет, 2-х SCADA и нескольких XLS, в которых самое интересное.
В сутки на 1 запись в БД приходится 100 чтений, в день 30 писаний, 300 читаний от 50+ юзеров, "серверов" нет, все на уровне одного отдела с урезаными учетками AD на обычных АРМ. Так вот, этот "малопользовательский" доступ по сети Windows к обычному SQLite-файлу на шаре - оказался самым быстрым(!) по отклику из всех прочих тестенных, включая нормальные серверные PostgreSQL/MySQL/HSQLDB/FireBird/Access.
И главное - он был и остается самым безгеморройным: пофиг кодировки, типы, объявления полей в агр. функциях, валидность имен полей (да - да!).
Есть CTE для любой практической задачи "открыжить по-настоящему".
"Хранимок" нет - ну и не надо, храним сами в табличке внутри БД, благо 2 из 30 "IDE" для SQLite это умеют "искаропки".
SQLite оказалась просто мечтой-явью для фигак-продакшена на предприятии с 15+ млрд выручки в год. С обычными экономистами, которые на VBA еще UDF не пишут, но клепают SQL-запросы со скоростью 5 шт в день на лицо, ведь в них всё просто и понятно (для этого язык и создавался). ЗП в отделе от 50+... в городе 300к+
Обязательно изучу сабж и альтернативу. Если она позволит держать "базу" не на сетевой шаре, а локально иметь всегда обновленную, по типу торрента - это будет шикарное средство интероперабельной лоскутной автоматизации (ИЛА), которая лично у меня в офисе побеждает и будет всегда побеждать всех заезжих консалтеров с "2,5 MIO RUB за предложение научить нас работать". Предлагаю посмотреть, уверен - пригодится многим.
> пофиг кодировкиА что вы делаете с русской кодировкой которую записали в базу но не в UTF-8?
не использует collate, делов-то.sqlite совершенно пофиг, в какой кодировке и что вообще туда записывают - это одна из фич, чуть ли не в ридми заявленная.
а сортировку оно потом как делает?
sqlite3 хранит в utf8. Эта кодировка (точнее набор символов, ну вы поняли) - позволяет кидать любое "человеконечитаемое" - в базу, если это конвертить на лету дорого. Часто дешевле перекодить ResultSet или строку поиска.Всеядность СУБД очень важна с бухданными типа 1С. Эта желтая гидра порождает чудовищное кол-во граблей при перепроведении документов. Например создает время вида "24:00:09", не может парно обкавычивать поля при сохранении в TXT, там же чудит с разделителями полей (Tab). Почему TXT? TXT-обмен в 4-12 раз быстрее OLE/COM из 1С, а прямое чтение (там ведь "всего" 8 тыс таблиц, в этой самой 1С:УПП в MSSQL/Postgre) - невозможно из-за блокировок. Использование в таких случаях любой другой типизированной СУБД - приведет к куче ошибок импорта и необходимости непрерырвно хардкодить конверторы. Впрочем, для некоторой несознательной части айтисообщества - это является шаблоном поведения "чтобы выжить в клоповнике".
а с образцом оно потом как сопоставляет?
как двоичные данные, в чем проблема-то? У sqlite полный пофигизм к тому, что оно считает "строками", лишь бы binary null не попадались.
И все данные в таблице - строки ;-)
а верхний-нижний регистр оно потом как преобразовавает?
никак. Оно далеко не всем и надо.
Что значит что делаем? Не используем. От слова "совсем". Только UTF, только хардкор.
Я думал "запись русской кодировки в базу не в UTF8" уже давно уделом школоты стала. Ан нет ж.
>30 писаний, 300 читанийА как решаете вопрос с версионной согласованностью?
Никак. Файл базы - один, им пользуются. SQLite позволяет один поток записи или 4 потока чтения, остальные ловят таймаут 5 сек. Большинство юзает базу через ODBC, часть через JDBC, а часть из Python встроенной библиотекой, которая на INSERT быстрее чем sqlite3.exе.
Я вот ХЗ что это у ваз за "интерпрайз" такой, что 50 человек имеютдоступ к 5 базам 1с за 20 лет.
Может у вас и нет там ничего секретного, может где-то так и бывает...
Но больше всего меня коробит от мысли, что все они могут менять данные, которые для них не предназначены.
Вы правы - в базах 1С менять ничего нельзя. А вот в SQLite таблице, содержащей все проводки из 1С за 20 лет - можно и даже нужно. Ведь только так можно превратить 20 разных вариантов написания названия, скажем 203-го подшипника, и сделать это в отношении 10 тыс. позиций номенклатуры. И тогда можно запросы поручить писать девочкам, без регулярок и километровых IN()
А вы данные из этой sqlite-базы в 1С потом обратно загружаете или у вас идёт только односторонняя выгрузка 1С->sqlite только для построения отчётов?
Односторонне, в основном для отчетов по "нормализованным" данным. Некоторые отчеты, например XLS/DOC/ODT/ODS - сами порождают записи в SQLite через ODBC (http://www.ch-werner.de/), например автоматический номер договора или исходящего письма, сделанные на основе шаблона. Но при разовой миграции 1С77-1С83 - использовали нормализованные данные из SQLite.
Раз база просто валяется на шаре в r/w, то эту базу ещё и попортить можно случайно или специально.
Такое возможно и даже один раз случилось. SSD ушел в RO с TRIM. Файл помер полностью. 4-х часовой бэкап был - и лошадь снова на ногах.
Хохо, что-то годное, судя по описанию, надо будет потрогать. Если работает не через пень-колоду, как это обычно бывает с такими проектами: здесь завалилось, вот здесь не трогать ни в коем случае, ещё вот здесь known bug, а здесь рыбу заворачивали - я уже знаю этой штуке офигеннейшее применение.
Ничего. Если будет заваливаться - они напишут утилиту для сваливания обратно в кучу. на го, конечно )
Ну и, конечно, всякие бинлоги и лок-файлы полюбасу трогать нельзя будет. Ибо это же не sql-сервер, тут грязно-рыбными руками нельзя ))
годное. я недавно потерял целый кластер из-за взаимоблокировки трех инстансов. контейнеры есть - а достучаться до них через LXD интерфейс - невозможно. пришлось руками доставать оттуда данные. и переподнимать все из бэкапов.
Лучше бьі пофиксили fcntl file locking для NFS
отличная штука. то-то в багтрекере по LXD кластеру, вагон и телега багов, связанных с глюками этого поделия.
где ж ты раньше был - а тут всерьез обсуждали-спорили. Некоторые аж почти сами себя убедили, что у каюкинга или как там они может быть что-то "годное". А не слепили из дерьма и палок и кривых обезьянко-либ на модном raft гибрид ежа с ужом, как оно, очевидно, и есть.но вот поляну жаль...
да я сам почти поверил :) и потерял продакшен кластер. 4 часа даунтайма и откат всего на bare metal из бэкапов. не сильный продакшен, потери не велики, но теперь я эту поделку ни для чего, кроме тестирования на десктопе использовать не буду.
Подскажите, а можно встроить sqlite3 так в приложение на C++, чтобы была доступна родная командная строка sqlite3. По аналогии с интерпретатором луа. Цель при запуски программы на С++ распарсить логи, в SQL, а потом делать по ним запросы.
DSQLite Cloud offering provides unparallelled scalability, compliance, operational security, seamless integration, and TCO value for enterprises of any size. Book a call with our sales representative now!