Опять же вопрос к разработчикам, вполне резонный впрочем, возможно в будущем это появится. Предпололожу, что можно написать такой хитрый макрос, какой-нибудь SmartInc, который будет разбираться по аргументу, глобал там или нет, и делать правильный выбор. Судя по тому, что вы хорошо пишете макросы, может быть и вы сможете.
Вышла новая книга по Caché — Об’єктно-реляційна СУБД Caché. Багатовимірний сервер даних і способи реалізації бізнес логіки засобами вбудованої мови Caché ObjectScript. Гайдаржи В., Михайлова І
Заказать можно здесь.
Согласен, что хранимость логов это плюс: можно SQL по ним потом легко или DeepSee. Да и параметр loglevel бы добавить. Про отключение журналирования +1
Штука хорошая. Как я понял, все записи в лог помещаются в хранимые классы — это очевидный оверхед к работе системы. А есть какой-то флаг включать/отключать логирование?
Все получается. Один нюанс: класс %SYS.Audit как источник данных для куба нужно вводить вручную (как и показано на видео) — в окне выбора не показывается, как и все системные классы.
Как видно, вы не можете представить себе проекта с тоннами унаследованного кода, куда, тем не менее, продолжает добавляться новый функционал )))
Представить не сложно ) Непонятно только, зачем в новую функциональность вносить точечный синтаксис? Читабельность от этого точно не повышается, а вероятность ошибок увеличивается.
Генерировать в Caché блоки «традиционные» блоки do с точками — не могу представить ни одного случая, зачем это может понадобиться. Синтаксис с фигурными скобками как раз и пришел на смену точек, чтобы устранить не писать такие потенциально ошибочные, затрудняющие чтение и наполненные лишними точками места.
BTW, приходите на нашу конференцию на ритфест 21-22 мая. Можно будет задать вопросы лично инженерам и разработчикам InterSystems (кроме России будут инженеры из Австралии и Бельгии). Также, что, наверняка, не менее интересно, можно будет пообщаться с инженерами партнеров InterSystems в России, тех кто используют наши технологии для разработки информационных систем и делают на этом бизнес.
Предлагают вручную писать код, который обходит Б-деревья (в терминологии Caché — работает с глобалами).
В Caché B-деревья никто не обходит. Глобалы действительно хранятся в виде B-дерева, но это физический уровень хранения, о котором заботится движок, и не нужно думать, где именно лежат блоки данных в B-дереве.
В Caché при «ручном» выполнении запросов обходятся собственно глобалы, и таких видов обхода ровно два.
Функция $Order- перебор ключей на определенном уровне индексов глобала. Документация.
Вот пример обхода всех записей класса Sample.Person и вывода их на текущее устройство.
set personid=$Order(^Sample.PersonD("")) // берем первый ID человеков
while personid {
set person=##class(Sample.Person).%OpenId(personid) // открываем объект по id
do person.PrintPerson() // выводим данные человека на устройство
set personid=$Order(^Sample.PersonD(personid)) // берем ID следующего человека
}
Структура хранения класса в глобалах описана в исходном коде класса в блоке XData.
Функция $Query — обход всего глобала, учитывая все вложенные индексы. Документация.
Но вот только Tarantool — это специализированная СУБД, которая вообще не поддерживает SQL.
— роуты http->function пишутся в XML-подобном стиле;
это довольно общее место в Caché. Ресурсы, которые относятся к классу или удобно использовать из класса можно держать в блоках XData. Записываются ресурсные данные в виде XML-ных блоков. Так в хранимых классах описывается структура хранения, в классах-кубах описываются измерения и показатели, в рест-брокерах — маршруты.
Caché основана на системе MUMPS, уходящей корнями ещё в 60-ые годы. Там был весьма специфичный язык программирования, в котором используется очень много псевдографики, и встроенная возможность хранения данных в Б-дереве, которое из этого языка программирования видно как вложенный массив (именно «вложенный», термин «многомерный» добавляется исключительно для понтов). Для своих лет, вероятно, система была довольно продвинутой.
Про MUMPS все верно. Действительно в 60-е и 70-е была весьма продвинутой системой. Более того: в 80-х ее даже скопировали в СССР вместе с PDP-11 и создали советский MUMPS — Диамс и распространили на всю страну. Кое где это чудо до сих пор работает(!) еще на тех же СМ-ках (порт в Магадане, колхозы в Беларуси). Подробности можно нагуглить, вот интересный рассказ. В мире осталось несколько инкарнаций MUMPS, самая массовая это GT.M, есть и российская реализация. Есть и апологеты. Термин «вложенный массив» — ваш? Про псевдографику в коде — это про что конкретно?
Caché, с свою очередь, является попыткой модернизировать MUMPS до уровня 21ого века. В язык программирования была добавлена объектность и прочие современные возможности, в результате чего он стал странным смешением псевдографики и современного синтаксиса. Для хранения данных были добавлены SQL и объектный доступ, реализованные на базе этих самых вложенных массивов, пресловутых глобалов. При этом оба эти новых способа доступа получились очень отсталыми на фоне тех возможностей, которые предоставляются современными реляционными СУБД и ORM. Об их недостатках можно говорить очень много, я не хочу сейчас распылять на этом внимание. Достаточно сказать, что SQL в Caché застрял на уровне стандарта 92-ого года, самый сильный поддерживаемый уровень изоляции данных там read committed (не настоящий, с нарушениями), планировщик запросов путается в JOIN'ах 3ёх таблиц.
В Caché тоже можно писать «как в MUMPS». Но зачем? На курсах обучения InterSystems этому не учат — а учат, как эффективно писать приложения на Caché с использованием объектного подхода, SQL и прямого доступа к глобалам, где это необходимо. Вы проходили обучение в InterSystems?
SQL 92 да. Но скажите, какие отличительные возможности SQL 2011 от SQL 92 вы используете в своей работе каждый день? Думаю, если нашим клиентам будет не хватать SQL 2011, такую поддержку сделают. В CachéSQL есть свои удобные расширения тоже.
Оптимизатор SQL возможно не лучший в мире, хотя и постоянно улучшается. Но! В Caché всегда есть возможность написать свою реализацию работы конкретного SQL-запроса, если SQL не справляется.
Про отсталость объектной СУБД по сравнению с ORM — можно подробности? ИМХО в случае с .NET и Java bindings Caché как раз убирает оверхэд на объектно-реляционное преобразование, которое есть в некоторых ORM.
Но всё это компенсируется агрессивностью маркетинга. Он не перестаёт кричать, что них круче всё и вся, зачастую выдавая новейшие технологические фишки из 70-ых-80-ых годов прошлого века.
А где Вы нашли агрессивный маркетинг? Помоему его вообще почти нет в России — я не вижу в аэропортах и на улицах биллбордов о сверхскоростной и надежной СУБД Caché.
Из вышесказанного очевидно, что такая система не может завоевать популярность и признание у широкого круга разработчиков. Её судьба — замкнуться в рамках узкой «секты» и не выходить за её пределы. Отражение этого процесса мы можем видеть и на хабре.
Видимо, у Вас был негативный опыт с СУБД Caché. ИМХО на любой платформе можно писать хорошо и плохо. Примеры «ада» написанного на Caché и MUMPS есть, что справедливо также для любого языка вообще. Но, есть и весьма впечатляющие системы с десятками тысяч одновременных пользователей в том числе в России и СНГ, построенные на технологиях InterSystems.
Для меня Caché — это СУБД, которая весьма эффективно и, что важно, очевидно и поддерживаемо позволяет манипулировать данными произвольной сложности. И продуктивно выдавать их во внешние системы для UI с помощью JSON, вебсервисов, SQL и т.п. Также подкупает легкость администрирования и масштабирования системы.
И да, я работаю в InterSystems.
Идея ИМХО в том, что если проекту понадобилось масштабирование, то это коммерчески успешный проект, и в этом случае переход на Caché и покупка поддержки не выглядит бессмысленной тратой, а является закономерной оплатой снижения рисков.
Заказать можно здесь.
Тоже думал так, но похоже что сначала mac? Источник.
Представить не сложно ) Непонятно только, зачем в новую функциональность вносить точечный синтаксис? Читабельность от этого точно не повышается, а вероятность ошибок увеличивается.
В Caché B-деревья никто не обходит. Глобалы действительно хранятся в виде B-дерева, но это физический уровень хранения, о котором заботится движок, и не нужно думать, где именно лежат блоки данных в B-дереве.
В Caché при «ручном» выполнении запросов обходятся собственно глобалы, и таких видов обхода ровно два.
Функция $Order- перебор ключей на определенном уровне индексов глобала. Документация.
Вот пример обхода всех записей класса Sample.Person и вывода их на текущее устройство.
Структура хранения класса в глобалах описана в исходном коде класса в блоке XData.
Функция $Query — обход всего глобала, учитывая все вложенные индексы. Документация.
Я бы не сказал, что это преимущество Tarantool.
это довольно общее место в Caché. Ресурсы, которые относятся к классу или удобно использовать из класса можно держать в блоках XData. Записываются ресурсные данные в виде XML-ных блоков. Так в хранимых классах описывается структура хранения, в классах-кубах описываются измерения и показатели, в рест-брокерах — маршруты.
$$$OK — это макрос.
Конфигурация хранится в конфигурационном файле. А для одновременного безопасного изменения на сотнях инстансов служит Enterprise Manager.
Отладка и логи есть конечно нормальные — это достойно отдельной статьи, спасибо за коммент.
А статья скорее про принцип построений приложений с Caché: сервер сайд: хранилище+REST API <-JSON-> frontend на статических HTML+JS.
Про MUMPS все верно. Действительно в 60-е и 70-е была весьма продвинутой системой. Более того: в 80-х ее даже скопировали в СССР вместе с PDP-11 и создали советский MUMPS — Диамс и распространили на всю страну. Кое где это чудо до сих пор работает(!) еще на тех же СМ-ках (порт в Магадане, колхозы в Беларуси). Подробности можно нагуглить, вот интересный рассказ. В мире осталось несколько инкарнаций MUMPS, самая массовая это GT.M, есть и российская реализация. Есть и апологеты. Термин «вложенный массив» — ваш? Про псевдографику в коде — это про что конкретно?
В Caché тоже можно писать «как в MUMPS». Но зачем? На курсах обучения InterSystems этому не учат — а учат, как эффективно писать приложения на Caché с использованием объектного подхода, SQL и прямого доступа к глобалам, где это необходимо. Вы проходили обучение в InterSystems?
SQL 92 да. Но скажите, какие отличительные возможности SQL 2011 от SQL 92 вы используете в своей работе каждый день? Думаю, если нашим клиентам будет не хватать SQL 2011, такую поддержку сделают. В CachéSQL есть свои удобные расширения тоже.
Оптимизатор SQL возможно не лучший в мире, хотя и постоянно улучшается. Но! В Caché всегда есть возможность написать свою реализацию работы конкретного SQL-запроса, если SQL не справляется.
Про отсталость объектной СУБД по сравнению с ORM — можно подробности? ИМХО в случае с .NET и Java bindings Caché как раз убирает оверхэд на объектно-реляционное преобразование, которое есть в некоторых ORM.
А где Вы нашли агрессивный маркетинг? Помоему его вообще почти нет в России — я не вижу в аэропортах и на улицах биллбордов о сверхскоростной и надежной СУБД Caché.
Видимо, у Вас был негативный опыт с СУБД Caché. ИМХО на любой платформе можно писать хорошо и плохо. Примеры «ада» написанного на Caché и MUMPS есть, что справедливо также для любого языка вообще. Но, есть и весьма впечатляющие системы с десятками тысяч одновременных пользователей в том числе в России и СНГ, построенные на технологиях InterSystems.
Для меня Caché — это СУБД, которая весьма эффективно и, что важно, очевидно и поддерживаемо позволяет манипулировать данными произвольной сложности. И продуктивно выдавать их во внешние системы для UI с помощью JSON, вебсервисов, SQL и т.п. Также подкупает легкость администрирования и масштабирования системы.
И да, я работаю в InterSystems.